目錄
- 小文件處理的參數(shù)
- 數(shù)據(jù)傾斜參數(shù)
- 分區(qū)表參數(shù)
- 并行執(zhí)行參數(shù)
代碼塊中的參數(shù)值都是cdh 5.7的默認(rèn)值.
查看hive配置的方式為
[root@namenode1 ~]# hive -e "set"| grep hive.merge.mapredfiles
- 1,小文件處理的參數(shù)
hive.merge.mapredfiles=false //reduce輸出是否合并
hive.merge.mapfiles=true //map輸出是否合并
解決辦法:
1.修改參數(shù) hive.merge.mapredfiles=true
2.通過mapreduece的辦法生成一張新的分區(qū)表,此時(shí)生成的文件變成了每個(gè)分區(qū)一個(gè)文件
小結(jié):
正確處理hive小文件 是 控制map數(shù)的一個(gè)重要環(huán)節(jié).處理的不好 會大大影響任務(wù)的執(zhí)行效率.
- 2,數(shù)據(jù)傾斜參數(shù)
hive.map.aggr=true //map端是否聚合
hive.map.aggr.hash.force.flush.memory.threshold=0.9
hive.map.aggr.hash.min.reduction=0.5
hive.map.aggr.hash.percentmemory=0.5
hive.groupby.skewindata=false //是否開啟傾斜優(yōu)化
set hive.exec.reducers.max=200;
set mapred.reduce.tasks= 200;---增大Reduce個(gè)數(shù)
set hive.groupby.mapaggr.checkinterval=100000 ;--這個(gè)是group的鍵對應(yīng)的記錄條數(shù)超過這個(gè)值則會進(jìn)行分拆,值根據(jù)具體數(shù)據(jù)量設(shè)置
set hive.groupby.skewindata=true; --如果是group by過程出現(xiàn)傾斜 應(yīng)該設(shè)置為true
set hive.skewjoin.key=100000; --這個(gè)是join的鍵對應(yīng)的記錄條數(shù)超過這個(gè)值則會進(jìn)行分拆,值根據(jù)具體數(shù)據(jù)量設(shè)置
set hive.optimize.skewjoin=true;--如果是join 過程出現(xiàn)傾斜 應(yīng)該設(shè)置為true
解決辦法:
1.通過修改參數(shù)
hive.map.aggr=true // map端聚合,相當(dāng)于combiner
hive.groupby.skewindata=true //數(shù)據(jù)傾斜優(yōu)化,為true時(shí),查詢計(jì)劃生產(chǎn)兩個(gè)mapreduce,第一個(gè)mr隨機(jī)處理,第二個(gè)按照業(yè)務(wù)主鍵聚合,
- 3,分區(qū)表參數(shù)
hive.exec.dynamic.partition=true //是否允許動態(tài)分區(qū)
hive.exec.dynamic.partition.mode=strict //strict是避免全分區(qū)字段是動態(tài)的掖棉,必須有至少一個(gè)分區(qū)字段是指定有值的 .另一個(gè)值為 nonstrict
//以下是配置閥值
hive.exec.max.created.files=100000 //一個(gè)DML操作可以創(chuàng)建的文件數(shù)
hive.exec.max.dynamic.partitions=1000 //一個(gè)DML操作可以創(chuàng)建的最大動態(tài)分區(qū)數(shù)
hive.exec.max.dynamic.partitions.pernode=100 //each mapper or reducer可以創(chuàng)建的最大動態(tài)分區(qū)數(shù)
- 4,并行執(zhí)行參數(shù)
hive.exec.parallel=false; //打開任務(wù)并行執(zhí)行
set hive.exec.parallel.thread.number=16; //同一個(gè)sql允許最大并行度泽台,默認(rèn)為8曙砂。
對于同一個(gè)SQL產(chǎn)生的JOB,如果不存在依賴的情況下柒桑,將會并行啟動JOB慰枕。