我有一个简单的代码来创建hadoop的序列文件。每次运行代码时,它都会在工作目录中留下两个文件:
mySequenceFile.txt .mySequenceFile.txt.crc
每次运行后,两个文件的大小保持不变。但是crc文件的内容变了!这是错误还是预期行为?
igsr9ssn1#
这是一种令人困惑的行为,但却是意料之中的行为。根据sequencefile标准,每个sequencefile都有一个同步块,其长度为16字节。同步块在块压缩序列文件中的每条记录之后重复,在未压缩或记录压缩序列文件中的一些记录或一条很长的记录之后重复。问题是,同步块是某种随机值。它是写在头上的,所以这就是读者识别它的方式。它在一个sequencefile中保持不变,但在一个sequencefile和另一个sequencefile中它可以(实际上)不同。所以这些文件在逻辑上是相同的,但二进制不同。crc是二进制shecksum,所以两个文件之间的crc也是不同的。我还没有找到任何方法来手动设置这个同步块。如果有人挡了路,请写在这里。
1条答案
按热度按时间igsr9ssn1#
这是一种令人困惑的行为,但却是意料之中的行为。
根据sequencefile标准,每个sequencefile都有一个同步块,其长度为16字节。同步块在块压缩序列文件中的每条记录之后重复,在未压缩或记录压缩序列文件中的一些记录或一条很长的记录之后重复。
问题是,同步块是某种随机值。它是写在头上的,所以这就是读者识别它的方式。它在一个sequencefile中保持不变,但在一个sequencefile和另一个sequencefile中它可以(实际上)不同。
所以这些文件在逻辑上是相同的,但二进制不同。crc是二进制shecksum,所以两个文件之间的crc也是不同的。
我还没有找到任何方法来手动设置这个同步块。如果有人挡了路,请写在这里。