我試着去學習潛水HDFS中存儲的文件到分裂和讀給不同的過程(在不同的機器。)的Hadoop在同樣大小分割文件
我想到的是,如果我有一個包含1200條記錄與SequenceFile
12過程中,我會看到每個過程大約有100條記錄。劃分文件的方式是獲取數據長度,然後除以進程數,爲每個分割導出chunk/beg/end大小,然後將該分割通過例如SequenceFileRecordReader
,在簡單的while循環中檢索記錄:代碼如下。
private InputSplit getSplit(int id) throws IOException {
...
for(FileStatus file: status) {
long len = file.getLen();
BlockLocation[] locations =
fs.getFileBlockLocations(file, 0, len);
if (0 < len) {
long chunk = len/n;
long beg = (id*chunk)+(long)1;
long end = (id)*chunk;
if(n == (id+1)) end = len;
return new FileSplit(file, beg, end, locations[locations.length-1].getHosts());
}
}
...
}
但是,結果顯示每個進程統計的總記錄總數與存儲在文件中的記錄不同。將SequenceFile均勻分成塊並將它們分發到不同主機的正確方法是什麼?
謝謝。