Как оказалось, сериализатор avro_event
хранит как заголовок & тело в файле.
Вот как я настроил свою мойку:
a1.sinks.i1.type=hdfs
a1.sinks.i1.hdfs.path=hdfs://localhost:8020/user/my-name
a1.sinks.i1.hdfs.rollInterval=0
a1.sinks.i1.hdfs.rollSize=1024
a1.sinks.i1.hdfs.rollCount=0
a1.sinks.i1.serializer=avro_event
a1.sinks.i1.hdfs.fileType=DataStream
Я послал событие с помощью упакованного агента avro-client
, впрыскиваюсь заголовки с помощью опции -R headerFile
.
содержания headerFile:
machine=localhost
user=myName
Наконец проверил результаты с помощью простого Java приложения, которое я украл из этого posting:
final FileSystem fs = FileSystem.get(getConf());
final Path path = new Path(fs.getHomeDirectory(), "FlumeData.1446072877536");
printWriter.write(path + "-exists: " + fs.exists(path));
final SeekableInput input = new FsInput(path, getConf());
final DatumReader<GenericRecord> reader = new GenericDatumReader<GenericRecord>();
final FileReader<GenericRecord> fileReader = DataFileReader.openReader(input, reader);
for (final GenericRecord datum : fileReader) {
printWriter.write("value = " + datum);
}
fileReader.close();
И точно я вижу, мои заголовки для каждой записи, здесь одна строка:
value = {"headers": {"machine": "localhost", "user": "myName"}, "body": {"bytes": "set -x"}}
Существует еще один сериализатор, который также испускает заголовки, и это header_and_text serializer Результирующий файл является текстовым файлом, доступным для человека. Вот пример строки:
{machine=localhost, user=userName} set -x
Наконец, в Apache Flume - Distributed Log Collection для Hadoop, есть упоминание о header_and_text
serialzer, но я не мог получить, чтобы работать.