2013-04-27 5 views
1

hadoop-1.0.4 소스 코드에서 SequenceFile.java를 읽었습니다. 그리고 sync(long) 메소드 은 SequenceFile을 MapReduce에서 파일 분할로 나눌 때 SequenceFile에서 "동기화 마커"(파일 생성시 생성 될 때 16 바이트 MD5)를 찾는 데 사용됩니다.Hadoop SequenceFile 바이너리가 안전합니까?

/** Seek to the next sync mark past a given position.*/ 
public synchronized void sync(long position) throws IOException { 
    if (position+SYNC_SIZE >= end) { 
    seek(end); 
    return; 
    } 

    try { 
    seek(position+4);       // skip escape 
    in.readFully(syncCheck); 
    int syncLen = sync.length; 
    for (int i = 0; in.getPos() < end; i++) { 
     int j = 0; 
     for (; j < syncLen; j++) { 
     if (sync[j] != syncCheck[(i+j)%syncLen]) 
      break; 
     } 
     if (j == syncLen) { 
     in.seek(in.getPos() - SYNC_SIZE);  // position before sync 
     return; 
     } 
     syncCheck[i%syncLen] = in.readByte(); 
    } 
    } catch (ChecksumException e) {    // checksum failure 
    handleChecksumException(e); 
    } 
} 

이 코드는 단순히 "동기화 마커"와 동일한 데이터를 포함하는 데이터 시퀀스를 찾습니다.

내 의심하십시오 SequenceFile의 데이터가 16 바이트의 데이터 시퀀스를 "동기 마커"와 같은를 포함하는 일이 어디
이 코드는 위의 실수 "동기 마커로 그 16 바이트의 데이터를 취급하는 상황을 고려 "그리고 SequenceFile은 정확하게 파싱되지 않을 것인가?

데이터 또는 동기화 마커에 대한 "이스케이프"작업을 찾을 수 없습니다. SequenceFile은 어떻게 바이너리 안전 할 수 있습니까? 내가 놓친 게 있니?

답변

관련 문제