上犹电脑信息网我们一直在努力
您的位置:上犹电脑信息网 > 文件问题 > 0631-6.2-如何确认一个Parquet文件是否被压缩-bin文件格式

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

作者:上犹日期:

返回目录:文件问题

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;


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


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


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;


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


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


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;


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


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


2.问题重现


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

hive> desc extended hive_table_test_parquet;



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



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

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

hive> desc extended hive_table_test_parquet_snappy;



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



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


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



可以看到文本表>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 .



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



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

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



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



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

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

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



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



可以看到该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的详细元数据信息,如字段信息,是否被压缩以及压缩格式等。

相关阅读

关键词不能为空
极力推荐
  • Oracle 12c中JOB运行失败的简单处理-pdb文件

  • pdb文件,在之前简单分析过一个12c中数据字典的小问题。Oracle 12c数据字典的小问题(r11笔记第49天)最近查看邮件,12c的一个PDB还是存在JOB运行异常的情况,因为是测试环境,不是业务类的

电脑蓝屏_电脑怎么了_win7问题_win10问题_设置问题_文件问题_上犹电脑信息网

关于我们