Как импортировать сжатые файлы AVRO в таблицу Impala?

В своей работе я импортирую файлы AVRO в таблицы импала, копируя файлы в HDFS, а затем выполняю «обновление» в импале.

Но когда я хотел сделать это со сжатыми файлами, это не сработало.

Единственный документ, который я нашел о включении сжатия с таблицами avro, - это эта ссылка: http://www.cloudera.com/documentation/archive/impala/2-x/2-1-x/topics/impala_avro.html#avro_compression_unique_1.

Вот что я делаю:

  1. Включите сжатие улья в оболочке улья:

    куст> установить hive.exec.compress.output = true;

    улей> установить avro.output.codec = bzip2;

  2. Создайте таблицу:

    СОЗДАТЬ ТАБЛИЦУ log_bzip2 (timestamp bigint COMMENT 'из десериализатора', appid string COMMENT 'из десериализатора', clientid string COMMENT 'из десериализатора', statkey string COMMENT 'из десериализатора', expid string COMMENT 'из десериализатора', modid string COMMENT 'из десериализатора ', value двойной КОММЕНТАРИЙ' из десериализатора ', summary строка КОММЕНТАРИЙ' из десериализатора ', custom строка КОММЕНТАРИЙ' из десериализатора ') РАЗДЕЛЕННЫЙ ПО (day строка) ФОРМАТ СТРОКИ SERDE' org.apache.hadoop.hive.serde2.avro.AvroSerDe ' СОХРАНЯЕТСЯ КАК INPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat' TBLPROPERTIES ('hd : //szq2.appadhoc.com: 8020 / user / hive / log.avsc ');

  3. Загрузите сжатый файл AVRO в HDFS:

    hdfs dfs -put log.2016-03-07.1457184357726.avro.bz2 /user/hive/warehouse/adhoc_data_fast.db/log_bzip2/2016-03-07

  4. Добавьте раздел и обновите в оболочке Impala:

    изменить таблицу log_bzip2 добавить раздел (day = "2016-03-07") location '/user/hive/warehouse/adhoc_data_fast.db/log_bzip2/2016-03-07/';

    обновить log_bzip2;

  5. Запросить, но не работать:

    выберите * из log_bzip2 limit 10; Запрос: выберите * from log_bzip2 limit 10

    ПРЕДУПРЕЖДЕНИЯ: недопустимый заголовок AVRO_VERSION_HEADER: '42 5a 68 39 '

Как я могу это сделать правильно? Спасибо!


person Bin Wang    schedule 10.03.2016    source источник


Ответы (1)


Оказывается, формат avro имеет собственный способ сжатия данных вместо сжатия сгенерированного файла avro вручную. Итак, что нам нужно сделать, так это добавить параметр сжатия в модуль записи AVRO во время записи файла, а затем сгенерированный файл сжимается кодировщиком avro. Поместите этот файл в Hive - все в порядке. Больше ничего настраивать не нужно.

person Bin Wang    schedule 27.01.2017