Каждый прогон одной и той же подпрограммы создания Hadoop SequenceFile создает файл с другим crc. Это нормально?

У меня есть простой код, который создает файл последовательности Hadoop. Каждый запускаемый код оставляет в рабочем каталоге два файла:

   mySequenceFile.txt
   .mySequenceFile.txt.crc

После каждого запуска размеры обоих файлов остаются неизменными. Но содержимое файла crc становится другим!

Это ошибка или ожидаемое поведение?

1 ответ

Это запутанное, но ожидаемое поведение.
Согласно стандарту SequenceFile, каждый файл последовательности имеет блок синхронизации, его длина составляет 16 байтов. Блок синхронизации повторяется после каждой записи в последовательных файлах со сжатым блоком и после некоторых записей или одной очень длинной записи в несжатых или сжатых записями последовательных файлах.
Дело в том, что блок синхронизации - это какое-то случайное значение. Это написано в шапке, так что читатель распознает это. Он остается тем же в пределах одного файла последовательности, но он может (и фактически) отличается от одного файла последовательности к другому.
Таким образом, файлы логически одинаковые, но двоичные разные. CRC - это двоичная контрольная сумма, поэтому она также различна для двух файлов.
Я не нашел способов вручную установить этот блок синхронизации. Если кто-то встанет, пожалуйста, напишите здесь.

Другие вопросы по тегам