其他分享
首页 > 其他分享> > hive 参数优化

hive 参数优化

作者:互联网

最近为了调试hive试了很多hive参数,对于hive任务优化,减少使用内存有一些自己的见解,在此做一个记录。

一:mapreduce的基本流程及阶段可进行的优化操作

1. Splitting阶段优化:将输入数据进行按照大小节分,分成不同的块。

优化点:

    set mapreduce.input.fileinputformat.split.minsize = 1024000000;
set mapreduce.input.fileinputformat.split.maxsize = 1024000000;(默认256M)
set mapreduce.input.fileinputformat.split.minsize.per.node= 1024000000;
set mapreduce.input.fileinputformat.split.maxsize.per.node= 1024000000;(默认1b)
set mapreduce.input.fileinputformat.split.minsize.per.rack= 1024000000; 
set mapreduce.input.fileinputformat.split.maxsize.per.rack= 1024000000;(默认1b)
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;(默认存在)
2. Mapping阶段优化:将相同的key进行对应的转换,其实map的个数取决于上一阶段切割的最终的数据块个数。

优化点:

手动规定map的个数(例子:任务中有100个map,但是可以使map分批执行一批10个)

规定map同时并行的个数(例子:任务中有100个map,但是可以使map分批执行一批10个)

限制map可使用的最大内存

3. Shuffing阶段优化:将相同的的key放到一个reduce中,其实是一个网络传输的过程。

优化点:
map后进行压缩(压缩后自动解压)

map后进行合并文件操作

4. reducing阶段优化:进行数据累加操作,并将结果传输到对应的文件中。

优化点:
手动规定reduce的个数

限制reduce可使用的最大内存

5. finalresult阶段优化:其实就是写文件的过程。

优化点:
reduce后要进行压缩写到HDFS(每个节点单独跑任务,但是最后的结果需要汇聚到一处)

6. 其他优化:

JVM优化:一个JVM运行的job数是有上限的,我们可以设置最大执行的个数

并发及并发线程数优化:job的子查询可能没关系,所以可以开启并发查询

分区优化:hive有桶表和分区表,可开启动态分区(其实就是不同文件夹)

job之间优化:

二:常用hive参数优化

    其实上面是对每一个阶段都进行数据优化,有很多参数都是默认开启或者有默认值的。
    只需要用到常用的几个就行,其他的作为面试。下面列举出比较常用的:
1. Splitting阶段:将输入小文件合并成为大文件
2. map阶段一般很快,参数可以不设置

reduce阶段

3. 合并小文件

hive合并文件是新启动一个任务合并文件,感觉这个参数不太合适,有这个时间不如直接输出(map和reduce阶段都是一样的)。

4. 压缩文件

(这个参数十分好,压缩不仅仅节约空间而且在网络传输的时候比较省宽带,mapreduce和spark都是默认可以解压缩的,比较方便。)

5. 矢量模式 一次读取1024行
6. 并发优化
7. 数据倾斜优化:
8. 分区优化(建表的时候要partation by ):
9. SQL优化

小表往前放、多重模式(查一张表的多次插入)(from a insert insert 1 insert 2)
map join、桶表

10. 推测执行

执行慢的换别人执行

三:hive杂项

1.hive参数配置:
2.hivesql使用内存资源
3.hivesql生成的job的map个数reduce个数

标签:map,set,reduce,mapreduce,hive,job,参数,优化
来源: https://www.cnblogs.com/wuxiaolong4/p/16628868.html