1. 程式人生 > >split和block的區別以及maptask和reducetask個數設定

split和block的區別以及maptask和reducetask個數設定

  • 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);