1. 程式人生 > >hadoop中map數量的確定及host的選擇

hadoop中map數量的確定及host的選擇

一:準備知識  InputFormat介面:主要用於描述資料的格式,有兩個功能,一個是資料切分,另外一個是為Mapper提供輸入資料  InputFormat其中一個實現基類是FileInputFormat,今天來學習一下FileInputFormat的實現,其中有兩個核心演算法,一個是檔案切分演算法,一個是主機選擇演算法 二:map數量的確定       檔案切分演算法:用於確定InputSplit的個數以及每個Inputsplit對應的資料段       InputSplit的個數由一下三個屬性共同決定              goalSize:根據使用者期望的inputsplit數量決定,goalsize = totalsize / numSplit,totalsize是總檔案大小,numsplit是使用者設定的map task 個數,預設情況下為1.              minSize: inputsplit的最小值,有配置引數mapred.min.split.size確定,預設為1              blockSize:HDFS中block的大小,預設64M       splitSize = max{minSize,min{goalSize,blockSize}}     計算例子:minsize = 128MB,使用者期望的numsplit為2,totalSize = 250MB,計算splitSize               首先計算goalSize =  total/2 = 128MB               min{goalSize,blockSize} = 64MB
              因此,splitSize = max{minSize,min{goalSize,blockSize}} = 128M,故InputSplit的數量為2 三:host的確定
       首先計算每個rack中含有InputSplit的大小(不要計算相同的資料),根據大小進行排序,在按照rack內部的node包含的資料量進行node排序,最後取前N個node作為host列表(N為副本數)       當使用基於FileInputFormat實現InputFormat時,為了提高Map Task的資料本地性,應儘量使inputSplit大小與block的大小相同