Каждый прогон одной и той же подпрограммы создания Hadoop SequenceFile создает файл с другим crc. Это нормально?
У меня есть простой код, который создает файл последовательности Hadoop. Каждый запускаемый код оставляет в рабочем каталоге два файла:
mySequenceFile.txt
.mySequenceFile.txt.crc
После каждого запуска размеры обоих файлов остаются неизменными. Но содержимое файла crc становится другим!
Это ошибка или ожидаемое поведение?
1 ответ
Это запутанное, но ожидаемое поведение.
Согласно стандарту SequenceFile, каждый файл последовательности имеет блок синхронизации, его длина составляет 16 байтов. Блок синхронизации повторяется после каждой записи в последовательных файлах со сжатым блоком и после некоторых записей или одной очень длинной записи в несжатых или сжатых записями последовательных файлах.
Дело в том, что блок синхронизации - это какое-то случайное значение. Это написано в шапке, так что читатель распознает это. Он остается тем же в пределах одного файла последовательности, но он может (и фактически) отличается от одного файла последовательности к другому.
Таким образом, файлы логически одинаковые, но двоичные разные. CRC - это двоичная контрольная сумма, поэтому она также различна для двух файлов.
Я не нашел способов вручную установить этот блок синхронизации. Если кто-то встанет, пожалуйста, напишите здесь.