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

时间:2016-03-10 02:57:36

标签: hive compression avro impala bigdata

在我的工作中,我将AVRO文件导入impala表,方法是将文件复制到HDFS中,然后在impala中执行“刷新”。

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

我发现的关于使用avro表启用压缩的唯一文档是以下链接:http://www.cloudera.com/documentation/archive/impala/2-x/2-1-x/topics/impala_avro.html#avro_compression_unique_1

以下是我的工作:

  1. 在配置单元shell中启用Hive压缩:

    蜂房> set hive.exec.compress.output = true;

    蜂房> set avro.output.codec = bzip2;

  2. 创建一个表格:

    CREATE TABLE log_bzip2(   来自解串器的timestamp bigint评论',   来自反序列化程序的appid字符串COMMENT',   来自反序列化程序的clientid字符串COMMENT',   来自反序列化程序的statkey字符串COMMENT',   来自反序列化程序的expid字符串COMMENT',   来自反序列化程序的modid字符串COMMENT',   来自反序列化程序的value double COMMENT',   来自反序列化程序的summary字符串COMMENT',   来自反序列化程序的custom字符串COMMENT') 分居(   day字符串) 行格式SERDER   'org.apache.hadoop.hive.serde2.avro.AvroSerDe' 存储为INPUTFORMAT   'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat' 输出格式   'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat' TBLPROPERTIES(   'avro.schema.url'= 'HDFS://szq2.appadhoc.com:8020 /用户/蜂巢/ 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中添加分区和刷新:

    alter table log_bzip2 add partition(day =“2016-03-07”)location'/user/hive/warehouse/adhoc_data_fast.db/log_bzip2/2016-03-07 /';

    刷新log_bzip2;

  5. 查询但无效:

    从log_bzip2限制10中选择*; 查询:从log_bzip2 limit 10

    中选择*

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

  6. 我该怎么做?谢谢!

1 个答案:

答案 0 :(得分:0)

事实证明,avro格式有自己的压缩数据的方式,而不是手动压缩生成的avro文件。所以我们需要做的是在写入文件时将压缩选项添加到AVRO编写器,然后生成的文件由avro编码器压缩。将此文件放入Hive即可。没有其他东西需要配置。