hive参数深入浅出

本文深入探讨了Hive中的MapJoin优化、数据倾斜处理和二次排序的应用,解释了它们的概念、特点及解决方案。MapJoin适用于大表与小表的连接,减少数据移动,提高效率。数据倾斜可能导致部分Task执行缓慢,可以通过代码优化或数据分类解决。二次排序则为多字段排序提供了解决途径。此外,介绍了Hive参数的四种设置方式,包括配置文件、CLI参数、session设置和shell脚本调用。在实际应用中,通常使用集群平台参数,特殊情况才调整JVM内存参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hive参数深入浅出

一. Hive参数介绍

  • 特别说明

    • 关于MapJoin的问题剖析

      • 概念说明

        • 将join的本来应该是reduce进行关联查找的过程,改成由纯map端进行关联查找。

      • 特点特征

        • 减少了reduce的处理,全部放到map端进行操作。

        • 减少了数据移动,提升了IO和计算效率。

      • 应用场景

        • 大表join小表的时候,

        • 大数据块join小数据块的时候。

      • 代码实现

        • 在hive当中已经默认开启了该功能。

    • 关于数据倾斜的问题剖析

      • 概念说明

        • 在大数据处理环境下,数据处理过程出现明显的倾斜现象,导致任务整体迟迟不能完全结束。

      • 特点特征

        • 在作业或是任务在分布式执行时,经常出现大部分Task任务很快结速,而很少一部分Task,往往是1个或是1-2个一直卡在99%的情况下。

        • 典型的木桶原理,任务的执行完成时间,取决于最后一个Task的完成时间。

      • 应用场景

        • 假倾斜场景

          • 实际数据并没有倾斜,而是由于人为代码原因导致的倾斜。

          • 比如:

            • 数据格式设置不对,导致没有发挥分布式处理的优势

              • :比如说设置成gzip,snappy。

            • SQL编写不合理-计算用户uv数

              • 如:select count(distinct uid) from visted_log;

              • 改成:

                • select count(1) from (select 1 from user group by uid) temp;

          • 代码优化就可以了

        • 真倾斜场景

          • 即数据或是任务本身真的存在客观的倾斜性

            • 比如:VIP会员数据的倒卖倒买问题,导致极少数VIP帐号对应的数据量极多,而正常帐号较少。

              • 解决方法:只能分而治之,将倾斜的数据分类,将正常数据分类,然后进行分别计算。

            • 比如:硬件机器本身配置不均衡导致的计算能力倾斜问题。

              • 解决方法:

                • 第1种是硬性解决即让硬件更加均衡。

                • 第2种是通过NodeLabel方式。

      • 代码实现

        • 参考如上的解决方法即可。

    • 关于二次排序的问题剖析

      • 概念说明

        • 在map到reduce的处理过程当中,按照2个字段进行升序排列,而不是像默认的一次排序那样,只按照key一个字段排序。

      • 特点特征

        • 2个字段排序,第1个字段若有比较结果则按第1个字段排序,若相等,则按第2个字段升序排列。

      • 应用场景

        • 当单个字段不能够满足排序要求时,均可使用二次排序。

      • 代码实现

        • Hadoopcore之mapreduce实现

          • 重写Map和Reduce之前的输入输出的Key和Value。

        • HiveSQL实现

          • Select * from table order by c1,c2 asc

二. Hive参数使用方式

四种使用方式:

  • 通过配置文件设置

此种主要是设置系统配置文件,多是全局性质的。在安装完hive后基本不需要再改动。主要是修改hive-site.xml或是hive-default.xml文件。

  • 通过在进入hive cli时指定配置参数

模板:hive --hiveconf param=value来设定session级参数

如:hive --hiveconf tez.queue.name=oncourse 

  • 在进入hive cli后,通过set来设定也是session级参数,此种最为常见

如之前提到的set tez.queue.name=oncourse; 

  • 通过shell脚本调用hive -e做参数设置和脚本执行,生产环境采用最多.

详细步骤:

  • 创建一个shell文件,名为hive_shell.sh:touch hive_shell.sh

  • 编辑文件,加入以下脚本:

#!/bin/sh

db="job017"

table_name="practice_set "

hive -e "

use $db;

set tez.queue.name=oncourse;

select count(1) from $table_name;

"

  • 执行脚本

sh hive_shell.sh

  • 输出效果

    • 执行过程与结果

  • 参数生效-队列

三. Hive参数实际应用

  • 升级到Tez/Spark引擎后一般均采用集群平台参数值即可,应用开发层设置参数的场景很少,只有极个别情况情下的jvm的内存相关参数设置需要特别设置,待后续高资源需求量时再另行使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值