hive的优化乍看起来和之前hive数据倾斜的内容差不多,实则不太一样。优化不只是数据倾斜的情况才优化,数据分配的不合理、资源浪费的太多都是可优化项。
调整 map 个数
需要考虑的问题
输入数据的大小
输入数据的行数
还需要解决的一个问题是一个 map 使用了多少 CPU 的资源和内存的资源,然后综合来看一个 map 处理多大或者多少行的数据比较合适。 问题来了,怎样去看一个map用了多少 CPU 资源以及内存资源?
set mapreduce.input.fileinputformat.split.maxsize = 1024000000;
又一个奇怪的现象:mapreduce.input.fileinputformat.split.maxsize 这个参数变大,map的数量减少,reduce的数量增加。
调整 reduce 个数
set hive.exec.reducers.bytes.per.reducer=64000000;
设置每个 reduce 的大小,64000000 表示 64M,默认值 256000000
。
关闭 map join
set hive.auto.convert.join=false;
other
事实上“把小表放在前面做关联可以提高效率”这种说法是错误的。正确的说法应该是“把重复关联键少的表放在join前面做关联可以提高join的效率。”
第一:在map端产生join set hive.auto.convert.join=true;
比较叼有时间细看一下 数据仓库的几种建模方法 the same as 上面
造成数据倾斜的原因
解决方案
思想:
##