大數(shù)據(jù)開發(fā)之Hive案例篇13:Hive SQL 常見參數(shù)調(diào)整

一. 問題描述

hive的一些默認(rèn)參數(shù)設(shè)置不適合一些復(fù)雜的數(shù)據(jù)需求場(chǎng)景,需要針對(duì)具體情況進(jìn)行調(diào)整。

二. 解決方案

以下是常見的調(diào)參:

# 指定隊(duì)列
set mapreduce.job.queuename=root.default;

# 在只有map的作業(yè)結(jié)束時(shí)合并小文件,默認(rèn)開啟true;
set hive.merge.mapfile=true;

# #在Map-Reduce的任務(wù)結(jié)束時(shí)合并小文件
set hive.merge.mapredfiles = true;

# #當(dāng)輸出文件的平均大小小于該值時(shí),啟動(dòng)一個(gè)獨(dú)立的map-reduce任務(wù)進(jìn)行文件merge
set hive.merge.smallfiles.avgsize = 256000000;

# #合并文件的大小
set hive.merge.size.per.task = 256000000;

# 在嚴(yán)格模式下,用戶必須指定至少一個(gè)靜態(tài)分區(qū)
# 以防用戶意外覆蓋所有分區(qū)。
set hive.exec.dynamic.partition.mode=nonstrict;

# 動(dòng)態(tài)分區(qū)的個(gè)數(shù)
set hive.exec.max.dynamic.partitions=2000;

# 每個(gè)節(jié)點(diǎn)最大的動(dòng)態(tài)分區(qū)個(gè)數(shù)
set hive.exec.max.dynamic.partitions.pernode=2000;

# 默認(rèn)值是10000。如果現(xiàn)在你的表有60個(gè)分區(qū),然后你總共有2000個(gè)map,在運(yùn)行的時(shí)候,每一個(gè)mapper都會(huì)創(chuàng)建60個(gè)文件,對(duì)應(yīng)著每一個(gè)分區(qū),所以60*2000> 120000,就會(huì)報(bào)錯(cuò):exceeds 100000.Killing the job
set hive.exec.max.created.files=1000000;

# 對(duì) map 端的小文件進(jìn)行合并
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;

# 設(shè)置hive的執(zhí)行引擎
set hive.execution.engine=spark;
set hive.execution.engine=mr;

# 單個(gè)map任務(wù)的內(nèi)存資源
set mapreduce.map.memory.mb=2048;

# 單個(gè)reduce任務(wù)的內(nèi)存資源
set mapreduce.reduce.memory.mb=2048;

# 虛擬內(nèi)存
set yarn.nodemanager.vmem-pmem-ratio=4.1;

# 指定reduce的個(gè)數(shù)
set mapred.reduce.tasks = 15;

# 指定map的個(gè)數(shù)
Num_Map_tasks= $inputsize/ max($mapred.min.split.size, min($dfs.block.size, $mapred.max.split.size))
set mapred.max.split.size=10000000 ;
set mapred.min.split.size=10000000;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容