大数据集群基本调优总结03

2021-04-27 10:27:42 浏览数 (1)

一、hive配置优化

今天从新复习下hive,同样是Clouderamanager 的hive的配置页面,进入hive的配置选项

1、hive的仓库目录

cdh集群默认的仓库目录位置,当然可以自己定义。

2、zookeeper服务选择

yarn与hdfs对接的这个

3、权限控制

建议cdh就不用提什么权限控制了,客户端越权操作基本上大家都知道了,反正个人觉得没啥软用。

4、继承权限

启用了hdfs的acl后这里就要启用,这样有一定的权限控制作用。

因为我不是大数据开发,所以基本不会碰数据,只是偶尔的功能测试或者hive程序问题处理,所以下面总结了一些hive的job参数基本都是平时大数据开发的同事总结的,仅供参考。

二、hive job优化

1、解决数据倾斜,负载均衡 如果没有数据倾斜不要加浪费资源,比如groupby

代码语言:javascript复制
set hive.groupby.skewindata=true;

2、设置reduce最大个数 (reduce端数据量大可以不加,比如最终结果在600g以上,通过 hive.exec.reducers.bytes.per.reducer 限制reduce个数)

代码语言:javascript复制
set hive.exec.reducers.max=300;

3、job名

代码语言:javascript复制
set mapreduce.job.name=whx_test;

4、队列名

代码语言:javascript复制
set mapreduce.job.queuename=ia;

5、cli窗口带scheme

代码语言:javascript复制
set hive.cli.print.header=true; 

6、map预聚合

代码语言:javascript复制
set hive.map.aggr=true;

7、map内存

代码语言:javascript复制
set mapreduce.map.memory.mb=2048;

8、reduce

代码语言:javascript复制
set mapreduce.reduce.memory.mb=4096;

9、根据map端shuffle输出数据量 判断多大数据量启用一个reduce,而且reduce个数决定输出数据的文件数

代码语言:javascript复制
set hive.exec.reducers.bytes.per.reducer=2147483648;

10、是否对最终输出数据压缩

代码语言:javascript复制
set hive.exec.compress.output=true;

11、最终输出数据压缩方式 压缩方式根据需求改变 snappy gz lz4 org.apache.hadoop.io.compress.SnappyCodec

代码语言:javascript复制
set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;

12、最终输出数据压缩类型

代码语言:javascript复制
set mapred.output.compression.type=BLOCK;

13、中间shuffle数据是否压缩

代码语言:javascript复制
set hive.exec.compress.intermediate=true;

14、中间shuffle数据压缩方式

代码语言:javascript复制
set hive.intermediate.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;

15、中间shuffle数据压缩类型

代码语言:javascript复制
set hive.intermediate.compression.type=BLOCK;

16、在Map-only的任务结束时合并小文件

代码语言:javascript复制
set hive.merge.mapfiles=true;

17、在Map-Reduce的任务结束时合并小文件

代码语言:javascript复制
set hive.merge.mapredfiles=true;

18、当输出文件的平均大小小于该值时,启动一个独立的map-reduce任务进行文件merge

代码语言:javascript复制
set hive.merge.smallfiles.avgsize=134217728;

19、合并文件的大小

代码语言:javascript复制
set hive.merge.size.per.task=536870912;

20、决定每个map处理的最大文件大小(结合CombineHiveInputFormat可以合并小文件)

代码语言:javascript复制
set mapred.max.split.size=1073741824;
set mapred.min.split.size.per.node=1073741824;
set mapred.min.split.size.per.rack=1073741824;

21、决定输入格式 合并小文件(或者block)

代码语言:javascript复制
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;

22、是否支持可切分的CombineInputFormat 合并输入小文件此参数必须加否则不生效

代码语言:javascript复制
set hive.hadoop.supports.splittable.combineinputformat=true;

23、具体小文件问题参数归类

代码语言:javascript复制
set hive.merge.mapfiles=true;
set hive.merge.mapredfiles=true;
set hive.merge.size.per.task=1073741824;
set hive.merge.smallfiles.avgsize=1073741824;
set hive.exec.compress.output=true;
set mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
set mapred.output.compression.type=BLOCK;

关于小文件的问题,以前有写过fsimage解析,具体的集群治理操作后续会看时间写出来,大家有兴趣可以留言交流。

0 人点赞