2015-07-22 4 views
0

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

mySequenceFile.txt 
    .mySequenceFile.txt.crc 

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

Является ли это ошибкой или ожидаемым поведением?

ответ

0

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