hive数仓的优化

(1)    资源分配
Mapredue的最小资源单元为container,container包括memory及vcores,所以直接与mapreduce挂钩的资源在yarn上是container,下面是具体的container及mapreduce资源占用设置:
Container:(配置在hadoop的yarn-site.xml里配置)

配置文件        配置项名称        配置项值
yarn-site.xml        yarn.nodemanager.resource.memory-mb        = Containers个数* 每个Container内存,机器总内存
yarn-site.xml        yarn.scheduler.minimum-allocation-mb        = 每个Container内存
yarn-site.xml        yarn.scheduler.maximum-allocation-mb        = Containers个数* 每个Container内存
mapred-site.xml        mapreduce.map.memory.mb        = 每个Container内存
mapred-site.xml        mapreduce.reduce.memory.mb        = 2 * 每个Container内存
mapred-site.xml        mapreduce.map.java.opts        = 0.8 * 每个Container内存
mapred-site.xml        mapreduce.reduce.java.opts        = 0.8 * 2 * 每个Container内存
yarn-site.xml (check)        yarn.app.mapreduce.am.resource.mb        = 2 * 每个Container内存
yarn-site.xml (check)        yarn.app.mapreduce.am.command-opts        = 0.8 * 2 * 每个Container内存

yarn监控界面中可以在如下位置看到资源分配(自己服务器是默认值,没做配置):
 


(2)    mapreduce的map切分设置(reduce同理):
每个map内存设置(单位为B):
       set mapred.max.split.size=50000000;
          set mapred.min.split.size.per.node=50000000;
          set mapred.min.split.size.per.rack=50000000;
这样就能控制我们map的切分大小为大约50m

(3)    控制任务并行:
set hive.exec.parallel=true;
set hive.exec.parallel.thread.number=8;
对于没有依赖的任务并行执行,例如union all,有显著优化效果,第二个参数主要控制任务并发数

(4)    数据倾斜参数优化:
1:如果是group by过程出现倾斜 应该设置为true
Set hive.groupby.skewindata=true; 
2:group时预先取100000条数据聚合,如果聚合后的条数/100000>0.5,则不再聚合
hive.groupby.mapaggr.checkinterval = 100000 (默认)hive.map.aggr.hash.min.reduction=0.5(默认)
3:如果是join 过程出现倾斜应该设置为true
Set hive.optimize.skewjoin=true;
4:这个是join的键对应的记录条数超过这个值则会进行分拆,值根据具体数据量设置
Set hive.skewjoin.key=100000;


5:map join,一般出现数据倾斜都是在reduce端,如果在map端就做了join会很好的避免问题的出现
set hive.auto.convert.join=true;(目前版本这个参数是默认打开的)
set hive.mapjoin.smalltable.filesize=25000000;(如果join时小表大小小于该阀值,会自动进行map join,我们也可以控制这个阀值,达到优化目的)
6:数据倾斜问题原因:数据在join时存在笛卡尔积,空值或重复值过多,所以在数据处理时最好先做好数据过滤,清洗
(5)    Jvm重用:
set mapred.job.reuse.jvm.num.tasks=20,避免重复的关闭重启
(6)    本地模式:
 set hive.exec.mode.local.auto=true;适合于数据量少的 操作

猜你喜欢

转载自blog.csdn.net/suansn/article/details/84100896