3.控制hive map reduce個數


參考:
https://blog.csdn.net/wuliusir/article/details/45010129
https://blog.csdn.net/zhong_han_jun/article/details/50814246

1.split的計算方式:

splitsize = max(splitsize,min(blocksize,filesize/NUMmaps))
NUMmaps即為默認的map數,默認為1,也就是說最大的splitsize為文件的大小。

2.不同的hive.input.format時map個數

hive 的split size在使用不同的input format時依賴的參數不同。

  • hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat
    此時由以下三個參數控制
mapred.max.split.size  #控制最大split
mapred.min.split.size.per.node #控制最小split,優先級低
mapred.min.split.size.per.rack #控制最小split,優先級高
  • hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat
    此時由
mapred.min.split.size
mapred.map.tasks #可以忽略,默認為1

在做split時,不如一個split的數據也會放到一個map執行,如果splitsize 128m,文件150m,則會有兩個map,一個128m,另外一個22m,這樣兩個map執行的時間就不一樣了

注意
把mapred.min.split.size\mapred.min.split.size.per.node 從128M增加到256M,可能並不會降低map數,這時需要增大數值,一邊增加一邊測試

3.reduce個數

reduce可以通過設置set mapred.reduce.tasks=100來指定個數,或者指定reduce計算的數據,set hive.exec.reducers.bytes.per.reducer=1073741824

以下是個樣例:

set mapred.max.split.size=1024000000;
set mapred.min.split.size.per.node=512000000;
set mapred.min.split.size.per.rack=512000000;
set mapreduce.task.io.sort.mb=200;
set hive.exec.parallel.thread.number=1  ;
set mapred.reduce.tasks = 314;
set mapreduce.map.memory.mb=1024;
set mapreduce.task.io.sort.factor=50;





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM