在我的工作中,我将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。
以下是我的工作:
在配置单元shell中启用Hive压缩:
蜂房> set hive.exec.compress.output = true;
蜂房> set avro.output.codec = bzip2;
创建一个表格:
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');
将压缩的AVRO文件加载到HDFS:
hdfs dfs -put log.2016-03-07.1457184357726.avro.bz2 /user/hive/warehouse/adhoc_data_fast.db/log_bzip2/2016-03-07
在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;
查询但无效:
从log_bzip2限制10中选择*; 查询:从log_bzip2 limit 10
中选择*警告:无效的AVRO_VERSION_HEADER:'42 5a 68 39'
我该怎么做?谢谢!
答案 0 :(得分:0)
事实证明,avro格式有自己的压缩数据的方式,而不是手动压缩生成的avro文件。所以我们需要做的是在写入文件时将压缩选项添加到AVRO编写器,然后生成的文件由avro编码器压缩。将此文件放入Hive即可。没有其他东西需要配置。