我有一个创建 Hadoop 序列文件的简单代码。每个代码运行它都会在工作目录中留下两个文件:
mySequenceFile.txt
.mySequenceFile.txt.crc
每次运行后,两个文件的大小保持不变。但是crc文件内容变得不一样了!
这是一个错误还是预期的行为?
我有一个创建 Hadoop 序列文件的简单代码。每个代码运行它都会在工作目录中留下两个文件:
mySequenceFile.txt
.mySequenceFile.txt.crc
每次运行后,两个文件的大小保持不变。但是crc文件内容变得不一样了!
这是一个错误还是预期的行为?
这是一个令人困惑但预期的行为。
根据SequenceFile 标准,每个 sequencefile 都有一个sync-block,其长度为 16 个字节。同步块在块压缩序列文件中的每条记录之后重复,并且在未压缩或记录压缩序列文件中的一些记录或一条非常长的记录之后重复。
问题是,同步块是某种随机值。它写在标题中,所以这就是读者识别它的方式。它在一个 sequencefile中保持不变,但它可以(实际上是)从一个 sequencefile 到另一个不同。
所以文件在逻辑上是相同的,但二进制不同。CRC是二进制shecksum,所以它在两个文件之间也不同。
我还没有找到任何手动设置此同步块的方法。如果有人知道,请写在这里。