如何将压缩的 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 .
这是我的做法:
在 hive 中启用 Hive 压缩 shell:
蜂巢> 设置 hive.exec.compress.output=true;
hive> 设置 avro.output.codec=bzip2;
创建 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');
将压缩后的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:
改变 table log_bzip2 添加分区 (day="2016-03-07") 位置 '/user/hive/warehouse/adhoc_data_fast.db/log_bzip2/2016-03-07/';
刷新log_bzip2;
查询无效:
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了。没有其他需要配置。
在我的工作中,我将 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 .
这是我的做法:
在 hive 中启用 Hive 压缩 shell:
蜂巢> 设置 hive.exec.compress.output=true;
hive> 设置 avro.output.codec=bzip2;
创建 table:
创建TABLE
log_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');将压缩后的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:
改变 table log_bzip2 添加分区 (day="2016-03-07") 位置 '/user/hive/warehouse/adhoc_data_fast.db/log_bzip2/2016-03-07/';
刷新log_bzip2;
查询无效:
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了。没有其他需要配置。