hadoop中map數量的確定及host的選擇
阿新 • • 發佈:2019-02-09
一:準備知識
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的大小相同
首先計算每個rack中含有InputSplit的大小(不要計算相同的資料),根據大小進行排序,在按照rack內部的node包含的資料量進行node排序,最後取前N個node作為host列表(N為副本數) 當使用基於FileInputFormat實現InputFormat時,為了提高Map Task的資料本地性,應儘量使inputSplit大小與block的大小相同