首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >0631-6.2-如何确认一个Parquet文件是否被压缩

0631-6.2-如何确认一个Parquet文件是否被压缩

作者头像
Fayson
发布2019-05-17 12:19:18
3.3K0
发布2019-05-17 12:19:18
举报
文章被收录于专栏:Hadoop实操Hadoop实操

1环境准备

  • 测试环境:

1.CDH6.2

2.集群已开启Kerberos

3.Redhat7.4

1.准备一张文本表,数据文件约6GB。

create table if not exists hive_table_test (
s1 string,
s2 string,
s3 string,
s4 string,
s5 string,
s6 string,
s7 string,
s8 string,
s9 string,
s10 string,
s11 string
) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY "," 
stored as textfile location '/fayson/hive_table_test';

hadoop fs -put hbase_data.csv /fayson/hive_table_test
select * from hive_table_test limit 1;

2.创建一张Parquet文件表,然后从文本表将数据插入过去。

create table if not exists hive_table_test_parquet (
s1 string,
s2 string,
s3 string,
s4 string,
s5 string,
s6 string,
s7 string,
s8 string,
s9 string,
s10 string,
s11 string
) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY "," 
stored as parquet location '/fayson/hive_table_test_parquet';

insert into hive_table_test_parquet select * from hive_table_test;
select * from hive_table_test_parquet limit 1;

3.创建一张Parquet文件表,并设定压缩为Snappy,然后将数据插入过去。

set parquet.compression=SNAPPY;

create table hive_table_test_parquet_snappy stored as parquet as select * from hive_table_test_parquet;

select * from hive_table_test_parquet_snappy limit 1;

2问题重现

1.使用Hive的desc命令查看Parquet表hive_table_test_parquet的底层文件格式是否被压缩。

hive> desc extended hive_table_test_parquet;

可以看到compressed显示为false,是正确的,因为该表是没有压缩过的单纯的Parquet格式文件。

2.使用Hive的desc命令查看Parquet表hive_table_test_parquet_snappy的底层文件格式是否被压缩。

hive> desc extended hive_table_test_parquet_snappy;

可以看到compressed还是显示为false,是不正确的,应该是true才合理。我们可以观察三个表的HDFS底层文件大小来进一步确定。

可以看到文本表>Parquet表>Parquet+Snappy表。

自此问题重现成功,即通过Hive的命令无法确认Parquet表到底是否被压缩,这是因为通过Hive的命令即desc extended是没办法确认的,命令打印结果是错误的,这是Hive的一个bug,对应jira编号是HIVE-2250,至今还未修复。

3问题解决

CDH5.2以后的版本开始包含了一个叫parquet-tools的工具,可以用来检查Parquet文件的元数据信息,通过该工具可以查看很详细的Parquet文件信息包含是否被压缩。

1.分别从hive_table_test_parquet和hive_table_test_parquet_snappy表中取出一个文件到本地方便后面通过这个命令来校验。

hadoop fs -ls /fayson/hive_table_test_parquet | head -2
hadoop fs -ls /fayson/hive_table_test_parquet_snappy | head -3
hadoop fs -get /fayson/hive_table_test_parquet/000000_0 .
hadoop fs -get /user/hive/warehouse/hive_table_test_parquet_snappy/000001_0 .

2.使用parquet-tools检查hive_table_test_parquet表中的数据。

/opt/cloudera/parcels/CDH/lib/parquet/bin/parquet-tools meta 000000_0

可以看到Parquet文件的元数据信息如字段,也可以看到显示为UNCOMPRESSED,即该Parquet是未压缩的。

3.使用parquet-tools检查hive_table_test_parquet_snappy表中的数据。

/opt/cloudera/parcels/CDH/lib/parquet/bin/parquet-tools meta 000001_0

可以看到该Parquet文件显示为压缩为SNAPPY,显示正常。问题解决。

4问题总结

1.通过Hive的命令无法确认Parquet表到底是否被压缩,这是因为通过Hive的命令即desc extended是没办法确认的,命令打印结果是错误的,无论文件是否被压缩compressed都显示为false。这是Hive的一个bug,对应jira编号是HIVE-2250,至今还未修复。参考:

https://issues.apache.org/jira/browse/HIVE-2250

2.要想确认Parquet文件是否被压缩可以使用CDH提供的工具parquet-tools,它可以查看一个Parquet的详细元数据信息,如字段信息,是否被压缩以及压缩格式等。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
专用宿主机
专用宿主机(CVM Dedicated Host,CDH)提供用户独享的物理服务器资源,满足您资源独享、资源物理隔离、安全、合规需求。专用宿主机搭载了腾讯云虚拟化系统,购买之后,您可在其上灵活创建、管理多个自定义规格的云服务器实例,自主规划物理资源的使用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档