【问题标题】:How to import compressed AVRO files to Impala table?如何将压缩的 AVRO 文件导入 Impala 表?
【发布时间】:2016-06-24 17:20:23
【问题描述】:

在我的工作中,我将 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. 在 hive shell 中启用 Hive 压缩:

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

    hive> 设置 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 double COMMENT '来自反序列化器', summary 字符串 COMMENT '来自反序列化器', custom 字符串 COMMENT '来自反序列化器') 由 ( 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 中添加分区和刷新:

    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 中选择 *; 查询:select * from log_bzip2 limit 10

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

我怎样才能做到正确?谢谢!

【问题讨论】:

    标签: hive compression avro impala bigdata


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-06
      • 1970-01-01
      • 1970-01-01
      • 2017-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多