Hadoop SequenceFile二进制文件是否安全?

时间:2013-04-27 10:41:18

标签: java hadoop cloud hdfs sequencefile

我在hadoop-1.0.4源代码中读取了SequenceFile.java。我找到sync(long)方法 当在MapReduce中将SequenceFile拆分为文件拆分时,它用于在SequenceFile中查找“同步标记”(在文件创建时生成16字节的MD5)。

/** 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中的数据恰好包含与“sync marker”相同的16字节数据序列,上面的代码会错误地将该16字节数据视为“同步标记”,然后SequenceFile将不会正确解析?

我没有找到关于数据或同步标记的任何“转义”操作。 SequenceFile如何是二进制安全的?我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

冲突在技术上是可行的,但实际上它们极不可能。

来自http://search-hadoop.com/m/VYVra2krg5t1

  

给定随机的概率   16字节字符串出现在一PB(均匀分布)的数据中   约10 ^ -23。您的数据中心更有可能被淘汰   陨石(http://preshing.com/20110504/hash-collision-probabilities)。

相关问题