如何将压缩的avro文件导入impala表?

d7v8vwbk  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(409)

在我的工作中,我将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 .
我是这样做的:
在配置单元外壳中启用配置单元压缩:
hive>set hive.exec.compress.output=true;
hive>set avro.output.codec=bzip2;
创建表:
创建表 log_bzip2 ( timestamp bigint comment“来自反序列化程序”, appid 字符串注解“来自反序列化程序”, clientid 字符串注解“来自反序列化程序”, statkey 字符串注解“来自反序列化程序”, expid 字符串注解“来自反序列化程序”, modid 字符串注解“来自反序列化程序”, value 双注解“来自反序列化程序”, summary 字符串注解“来自反序列化程序”, custom 字符串注解“来自反序列化程序”),由( day 行格式serde'org.apache.hadoop.hive.serde2.avro.avroserde'存储为inputformat'org.apache.hadoop.hive.ql.io.avro.avrocontainerinputformat'outputformat'org.apache.hadoop.hive.ql.io.avro.avrocontaineroutputformat'tblproperties('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\u data\u fast.db/log\u 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/';
刷新日志\u bzip2;
查询但不工作:
从log\ bzip2 limit 10中选择*;查询:从log\u bzip2 limit 10中选择*
警告:无效的avro\版本\标题:“42 5a 68 39”
我怎么才能做对呢?谢谢!

hiz5n14c

hiz5n14c1#

事实证明,avro格式有自己的方法来压缩数据,而不是手动压缩生成的avro文件。因此,我们需要做的是在编写文件时向avro writer添加compress选项,然后由avro编码器对生成的文件进行压缩。将此文件放入配置单元就可以了。没有其他需要配置的。

相关问题