如何将压缩的 AVRO 文件导入 Impala table?

How to import compressed AVRO files to Impala table?

在我的工作中,我将 AVRO 文件导入 impala tables,方法是将文件复制到 HDFS,然后在 impala.

中执行 "refresh "

但是当我想用压缩文件来做时,它不起作用。

我找到的关于使用 avro tables 启用压缩的唯一文档是 link: http://www.cloudera.com/documentation/archive/impala/2-x/2-1-x/topics/impala_avro.html#avro_compression_unique_1 .

这是我的做法:

  1. 在 hive 中启用 Hive 压缩 shell:

    蜂巢> 设置 hive.exec.compress.output=true;

    hive> 设置 avro.output.codec=bzip2;

  2. 创建 table:

    创建TABLElog_bzip2( timestamp bigint 评论 'from deserializer', appid 字符串评论 'from deserializer', clientid 字符串评论 'from deserializer', statkey 字符串评论 'from deserializer', expid 字符串评论 'from deserializer', modid 字符串评论 'from deserializer', value 双评论 'from deserializer', summary 字符串评论 'from deserializer', custom 字符串评论 'from deserializer') 分区方式( day 字符串) 行格式 SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe' 存储为输入格式 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat' 输出格式 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat' TBL属性( 'avro.schema.url'='hdfs://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中添加分区并刷新 shell:

    改变 table log_bzip2 添加分区 (day="2016-03-07") 位置 '/user/hive/warehouse/adhoc_data_fast.db/log_bzip2/2016-03-07/';

    刷新log_bzip2;

  5. 查询无效:

    select *从log_bzip2限制10个; 查询:select * from log_bzip2 limit 10

    警告:无效 AVRO_VERSION_HEADER:'42 5a 68 39'

我怎样才能做对?谢谢!

原来avro格式有自己的方式来压缩数据,而不是手动压缩生成的avro文件。所以我们需要做的就是在写文件的时候给AVRO writer加上compress选项,然后生成的文件就被avro encoder压缩了。把这个文件放到Hive中就OK了。没有其他需要配置。