前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >0632-6.2-通过Hive生成的Snappy表Impala无法访问异常分析

0632-6.2-通过Hive生成的Snappy表Impala无法访问异常分析

作者头像
Fayson
发布2019-05-17 11:48:57
1.5K0
发布2019-05-17 11:48:57
举报
文章被收录于专栏:Hadoop实操

温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。

Fayson的github: https://github.com/fayson/cdhproject

提示:代码块部分可以左右滑动查看噢

  • 测试环境:

1.CDH6.2

2.集群已开启Kerberos

3.Redhat7.4

1.已经准备好一个Parquet文件的表。

代码语言:javascript
复制
hive> show create table hive_table_test_parquet_snappy;
OK
CREATE TABLE `hive_table_test_parquet_snappy`(
  `s1` string, 
  `s2` string, 
  `s3` string, 
  `s4` string, 
  `s5` string, 
  `s6` string, 
  `s7` string, 
  `s8` string, 
  `s9` string, 
  `s10` string, 
  `s11` string)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
  'hdfs://ip-172-31-6-83.ap-southeast-1.compute.internal:8020/user/hive/warehouse/hive_table_test_parquet_snappy'
TBLPROPERTIES (
  'transient_lastDdlTime'='1557893659')
Time taken: 0.133 seconds, Fetched: 22 row(s)
hive>

2.此表的HDFS的大小为4.3GB

3.操作目标:把此hive表(hive_table_test_parquet)在表结构不变,数据内容不变的情况下压缩存储,得到新表(hive_table_test_parquet_snappy,此表记录数跟内容跟hive_table_test_parquet应该完全一致,但hdfs文件应该显著变小)

4.设置Hive压缩,并新建另外一张表。

代码语言:javascript
复制
set hive.exec.compress.output=true;
set hive.parquet.compression=snappy;

create table hive_table_test_parquet_snappy as select * from hive_table_test_parquet;

5.查看压缩存储后的表hive_table_test_parquet_snappy的数据:(正常)

6.通过查看HDFS文件大小,可以看到压缩存储后的文件小了:

7.用impala查看压缩存储后的表结构及数据,先查看未压缩存储的表:正常

8.然后查看压缩存储后的表:不正常

代码语言:javascript
复制
[ip-172-31-12-142.ap-southeast-1.compute.internal:21000] default> select *from hive_table_test_parquet_snappy limit 1;   
Query: select *from hive_table_test_parquet_snappy limit 1
Query submitted at: 2019-05-15 00:05:38 (Coordinator: http://ip-172-31-12-142.ap-southeast-1.compute.internal:25000)
Query progress can be monitored at: http://ip-172-31-12-142.ap-southeast-1.compute.internal:25000/query_plan?query_id=c6434c4543e6fd8b:9624686200000000
ERROR: Scanner plugin 'DEFLATE' is not one of the enabled plugins: 'LZO'

报错:

ERROR: Scanner plugin 'DEFLATE' is not one of the enabled plugins: 'LZO'

2

问题分析

1.查看hive_table_test_parquet_snappy表的底层文件

可以发现生成文件的后缀都是deflate,deflate是区别于snappy,gzip的其他压缩格式。这种格式目前在Impala中还不支持,而Hive能支持,导致同样的表在Hive中能查询,而在Impala中查询不了。即在通过Parquet表生成同样的snappy压缩格式的文件时失败,主要是hive.parquet.compression参数Hive不认识。

3

问题解决

1.重新生成hive_table_test_parquet_snappy表,使用以下语句:

代码语言:javascript
复制
set parquet.compression=SNAPPY;
create table hive_table_test_parquet_snappy stored as parquet as select * from hive_table_test_parquet;

2.使用Hive查看该表的schema以及进行查看,都正常。

3.使用Impala查询,也正常。

4.查看hive_table_test_parquet_snappy的底层文件

使用parquet-tools命令能查看该文件,说明是parquet文件,里面显示文件的压缩是snappy

5.与之前的parquet文件的大小进行比较

发现已经被压缩,文件有缩小。

4

问题总结

1.为什么使用Hive生成的“snappy”文件无法被Impala查询,是因为生成的并不是snappy文件,而是deflate的压缩文件,而该压缩在Impala中并不支持。

2.如果源表(bbb)是parquet格式的文件表,使用create aaa as select * from bbb;语句并不能让aaa表也是parquet格式,而是textfile的,需要使用create aaa stored as parquet as select * from bbb;

3.如果需要让Hive生成Snappy的压缩表,并不需要设置set hive.exec.compress.output=true;与set hive.parquet.compression=snappy;,只需要设置set parquet.compression=SNAPPY;即可,另外hive.parquet.compression该参数是Hive不支持的。

提示:代码块部分可以左右滑动查看噢

为天地立心,为生民立命,为往圣继绝学,为万世开太平。 温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档