split和block的區別以及maptask和reducetask個數設定
阿新 • • 發佈:2019-01-27
- split和block的區別:
很多人可能認為在hadoop中的split和block是一樣的,可能是因為hadoop在預設情況下split的大小和hdfs檔案分塊大小是一樣而被誤導吧。
下面來談談他們的區別和聯絡:
1.split是mapreduce中的概念,而block是hdfs中切塊的大小。
2.split的大小時預設和hdfs的block塊大小一致,但是可以通過配置檔案自己設定:
其中有倆個配置檔案(如下):
--minsize 預設大小為1
mapreduce.input.fileinputformat.split.minsize
--maxsize 預設大小為Long.MAXValue
mapreduce.input.fileinputformat.split.maxsize
在mapreduce的FileInputFormat類中有個getSplits() 方法對檔案進行split,演算法如下:
Math.max(minSize, Math.min(maxSize, blockSize));
1.如果blockSize小於maxSize && blockSize 大於 minSize之間,那麼split就是blockSize;
2.如果blockSize小於maxSize && blockSize 小於 minSize之間,那麼split就是minSize;
3.如果blockSize大於maxSize && blockSize 大於 minSize之間,那麼split就是maxSize;
maptask和reducetask個數設定:
- 列表內容
1.在hadoop中一個split對應一個maptask,需要改變maptask的個數就需要改變上面所描述的配置。
2.而reducetask的個數可以又自己設定
job.setNumReduceTasks(10);