임 다이빙을 분할로 HDFS에 저장된 파일을 배우려고 노력하고 다른 프로세스로 읽는 똑같이 크기의 파일을 분할 (다른 시스템에.)하둡은
내가 기대하는 것은 내가 1200 개 기록을 포함하는 SequenceFile
이있는 경우 12 프로세스에서는 프로세스 당 약 100 개의 레코드가 표시됩니다. 파일을 분할하는 방법은 데이터의 길이를 구한 다음 프로세스 수로 나누고 각 분할에 대한 청크/시작/끝 크기를 얻은 다음 해당 분할을 예를 들어로 전달하는 것입니다. 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을 균일하게 덩어리로 나누어 다른 호스트에 배포하는 올바른 방법은 무엇입니까?
감사합니다.