hive中如何控制mapper的数量
參考文檔:https://www.cnblogs.com/1130136248wlxk/articles/5352154.html
1. 決定map的數(shù)據(jù)的決定因素有:?input的文件總個(gè)數(shù),input的文件大小,集群設(shè)置的文件塊大小(目前為128M, 可在hive中通過set dfs.block.size;命令查看到,該參數(shù)不能自定義修改);
2.是不是map數(shù)越多越好,如何減少?
a. 不是越多越好,多了會(huì)造成資源的浪費(fèi);因?yàn)閙ap任務(wù)的啟動(dòng)和初始化的時(shí)間,遠(yuǎn)遠(yuǎn)大于邏輯處理的時(shí)間;并且,map的數(shù)據(jù)是有限制的。
b. 可以通過set設(shè)置,讓map在執(zhí)行前合并小文件,從而達(dá)到減少map數(shù):
比如:??set mapred.max.split.size=100000000;?-- 決定每個(gè)map處理的最大的文件大小,單位為B
? ? ? ? ? ? ? ? ? ? ? ? set mapred.min.split.size.per.node=100000000;?-- 節(jié)點(diǎn)中可以處理的最小的文件大小
? ? ? ? ? ? ? ? ? ? ? ? set mapred.min.split.size.per.rack=100000000;?-- 機(jī)架中可以處理的最小的文件大小
? ? ? ? ? ? ? ? ? ? ? ? set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;---實(shí)現(xiàn)map中的數(shù)據(jù)合并需要設(shè)置下面的參數(shù),集群默認(rèn)就是這個(gè)格式
3. 是不是每個(gè)map處理的接近128M的文件塊,就OK了呢? 如果不OK,如何增加map的數(shù)量?
a. 并不一定。當(dāng)文件接近128M,但是里的內(nèi)容卻非常多的時(shí)候并且map處理的邏輯比較復(fù)雜。那么用一個(gè)map處理,則時(shí)間會(huì)比較長(zhǎng)
b. 把原來的單個(gè)文件拆分成多個(gè)的文件, 然后使用新的文件來執(zhí)行sql。
set mapred.reduce.tasks=10;
? ?? ?? ?? ?? ?? ? create table a_1 as?
? ?? ?? ?? ?? ?? ? select * from a?
? ?? ?? ?? ?? ?? ? distribute by rand(123);
4. 控制map整體原則1:大數(shù)據(jù)量要利用合適的map數(shù);單個(gè)map要處理合適的數(shù)據(jù)量 。 2:map占用資源要合并小文件;map不足要把大文件拆成小文件。
5.reduce簡(jiǎn)單總結(jié):
a.?有多少個(gè)reduce,就會(huì)有多少個(gè)輸出文件,如果生成了很多個(gè)小文件,那么如果這些小文件作為下一個(gè)任務(wù)的輸入,則也會(huì)出現(xiàn)小文件過多的問題;
b.什么情況下只有一個(gè)reduce:1. 沒有g(shù)roup by就進(jìn)行count(1)。2.使用了order by。3.存在笛卡兒積。因?yàn)檫@些都是全局操作,生成一個(gè)文件,就只有1個(gè)reduce。
c. set mapred.reduce.tasks/set hive.exec.reducers.bytes.per.reducer=1073741824 -- 每個(gè)reduce處理的數(shù)據(jù)量,默認(rèn)1GB
?
6. map數(shù)量一些深入的知識(shí):
a. default_num = total_size/block_size,默認(rèn)情況下map的個(gè)數(shù)
b.可以通過set mapred.map.tasks = goal_num?來設(shè)置期望的map個(gè)人,但是這個(gè)數(shù)量?jī)H在大于default_num 的時(shí)候才會(huì)生效。
c. 可以通過set mapred.min.split.size來設(shè)置每個(gè)task的文件大小,但是這個(gè)數(shù)量在大于block_size的時(shí)候才會(huì)生效。
split_size = max(mapred.min.split.size,block_size); split_num = total_szie/split_size
d.
轉(zhuǎn)載于:https://www.cnblogs.com/chengdu-jackwu/p/10170895.html
總結(jié)
以上是生活随笔為你收集整理的hive中如何控制mapper的数量的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有这10个特征的项目领导者做的项目,失败
- 下一篇: [转]LoadRunner 各个指标分析