CC00026.hadoop——|Hadoop&Hive.V26|——|Hive.v26|Hive优化策略|实战.v02|

一、参数优化
### --- 本地模式
~~~     当Hive处理的数据量较小时,启动分布式去处理数据会有点浪费,
~~~     因为可能启动的时间比数据处理的时间还要长。
~~~     Hive支持将作业动态地转为本地模式,需要使用下面的配置:
           
SET hive.exec.mode.local.auto=true;                             -- 默认 false
SET hive.exec.mode.local.auto.inputbytes.max=50000000;
SET hive.exec.mode.local.auto.input.files.max=5;                -- 默认 4
### --- 一个作业只要满足下面的条件,会启用本地模式

~~~     输入文件的大小小于hive.exec.mode.local.auto.inputbytes.max 配置的大小
~~~     map任务的数量小于hive.exec.mode.local.auto.input.files.max 配置的大小
~~~     reduce任务的数量是1或者0
二、严格模式
### --- 严格模式
~~~     所谓严格模式,就是强制不允许用户执行3种有风险的HiveQL语句,一旦执行会直接失败。

~~~     # 这3种语句是:
~~~     查询分区表时不限定分区列的语句;
~~~     两表join产生了笛卡尔积的语句;
~~~     用order by来排序,但没有指定limit的语句。
~~~     # 要开启严格模式,需要将参数hive.mapred.mode 设为strict(缺省值)。
~~~     该参数可以不在参数文件中定义,在执行SQL之前设置(sethive.mapred.mode=nostrict )
三、JVM重用
### --- JVM重用

~~~     默认情况下,Hadoop会为为一个map或者reduce启动一个JVM,这样可以并行执行map和reduce。
~~~     当map或者reduce是那种仅运行几秒钟的轻量级作业时,
~~~     JVM启动进程所耗费的时间会比作业执行的时间还要长。
~~~     Hadoop可以重用JVM,通过共享JVM以串行而非并行的方式运行map或者reduce。
~~~     JVM的重用适用于同一个作业的map和reduce,对于不同作业的task不能够共享JVM。
~~~     如果要开启JVM重用,需要配置一个作业最大task数量,默认值为1,如果设置为-1,则表示不限制:
### --- 代表同一个MR job中顺序执行的5个task重复使用一个JVM,减少启动和关闭的开销

SET mapreduce.job.jvm.numtasks=5;
~~~     # 这个功能的缺点是,

~~~     开启JVM重用将一直占用使用到的task插槽,以便进行重用,直到任务完成后才能释放。
~~~     如果某个“不平衡的”job中有某几个reduce task执行的时间要比其他Reduce task消耗的时间多的多的话,
~~~     那么保留的插槽就会一直空闲着却无法被其他的job使用,直到所有的task都结束了才会释放。
四、并行执行
### --- 并行执行

~~~     Hive的查询通常会被转换成一系列的stage,这些stage之间并不是一直相互依赖的,
~~~     可以并行执行这些stage,通过下面的方式进行配置:
~~~     并行执行可以增加集群资源的利用率,如果集群的资源使用率已经很高了,
~~~     那么并行执行的效果不会很明显。
SET hive.exec.parallel=true;                                    -- 默认false
SET hive.exec.parallel.thread.number=16;                        -- 默认8
五、推测执行
### --- 推测执行

~~~     # 在分布式集群环境下,因为程序Bug、负载不均衡、资源分布不均等原因,
~~~     会造成同一个作业的多个任务之间运行速度不一致,
~~~     有些任务的运行速度可能明显慢于其他任务(比如一个作业的某个任务进度只有50%,
~~~     而其他所有任务已经运行完毕),则这些任务会拖慢作业的整体执行进度。
~~~     # 为了避免这种情况发生,Hadoop采用了推测执行机制,它根据一定的规则推测出“拖后腿”的任务,
~~~     并为这样的任务启动一个备份任务,让该任务与原始任务同时处理同一份数据,
~~~     并最终选用最先成功运行完成任务的计算结果作为最终结果。
set mapreduce.map.speculative=true

set mapreduce.reduce.speculative=true
set hive.mapred.reduce.tasks.speculative.execution=true
六、合并小文件
### --- 合并小文件

~~~     在map执行前合并小文件,减少map数
~~~     # 缺省参数

set
hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInput
Format;
### --- 在Map-Reduce的任务结束时合并小文件

# 在 map-only 任务结束时合并小文件,默认true
SET hive.merge.mapfiles = true;
# 在 map-reduce 任务结束时合并小文件,默认false
SET hive.merge.mapredfiles = true;
# 合并文件的大小,默认256M
SET hive.merge.size.per.task = 268435456;
# 当输出文件的平均大小小于该值时,启动一个独立的map-reduce任务进行文件
merge
SET hive.merge.smallfiles.avgsize = 16777216;
七、Fetch模式
### --- Fetch模式

~~~     Fetch模式是指Hive中对某些情况的查询可以不必使用MapReduce计算。selectcol1, col2 from tab ;
~~~     可以简单地读取表对应的存储目录下的文件,然后输出查询结果到控制台。
~~~     在开启fetch模式之后,在全局查找、字段查找、limit查找等都不启动 MapReduce 。
# Default Value: minimal in Hive 0.10.0 through 0.13.1, more in

Hive 0.14.0 and later
hive.fetch.task.conversion=more
### --- 参数调整:
~~~     本地模式
~~~     严格模式
~~~     JVM重用
~~~     并行执行
~~~     推测还行
~~~     合并小文件
~~~     Fetch模式
### --- Hive 参数说明的官方文档:

~~~     https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yanqi_vip

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值