前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Impala中使用Parquet表

如何在Impala中使用Parquet表

作者头像
Fayson
发布2018-07-12 15:03:35
3.9K0
发布2018-07-12 15:03:35
举报
文章被收录于专栏:Hadoop实操Hadoop实操Hadoop实操

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

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

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

1.文档编写目的


Parquet是一种列式的二进制文件格式,Impala基于Parquet文件可以高效的处理大型复杂查询。Parquet特别适合扫描表中的特定列的查询,例如查询具有多列的“宽”表,或者对于部分列或者全部列需要做聚合操作(例如SUM()和AVG())。

列式存储,顾名思义就是按照列进行存储数据,把某一列的数据连续的存储,每一行中的不同列的值离散分布。列式存储技术并不新鲜,在关系数据库中都已经在使用,尤其是在针对OLAP场景下的数据存储,由于OLAP场景下的数据大部分情况下都是批量导入,基本上不需要支持单条记录的增删改操作,而查询的时候大多数都是只使用部分列进行过滤、聚合,对少数列进行计算(基本不需要select * from xx之类的查询)。列式存储可以大大提升这类查询的性能,较之于行式存储,列式存储能够带来这些优化:

1.由于每一列中的数据类型相同,所以可以针对不同类型的列使用不同的编码和压缩方式,这样可以大大降低数据存储空间。

2.可以跳过不符合条件的数据,只读取需要的数据,降低IO数据量。

3.只读取需要的列,支持向量运算,能够获取更好的扫描性能。

Parquet仅仅是一种存储格式,它是语言、平台无关的,并且不需要和任何一种数据处理框架绑定,目前能够和Parquet适配的组件包括下面这些,可以看出基本上通常使用的查询引擎和计算框架都已适配,并且可以很方便的将其它序列化工具生成的数据转换成Parquet格式。

1.查询引擎: Hive, Impala, Pig, Presto, Drill, Tajo, HAWQ, IBM Big SQL

2.计算框架: MapReduce, Spark, Cascading, Crunch, Scalding, Kite

3.数据模型: Avro, Thrift, Protocol Buffers, POJOs

Parquet列式存储带来的性能上的提高在业内已经得到了充分的认可,特别是当你们的表非常宽(column非常多)的时候,Parquet无论在资源利用率还是性能上都优势明显。Spark已经将Parquet设为默认的文件存储格式,Cloudera投入了很多工程师到Impala+Parquet相关开发中,Hive/Pig都原生支持Parquet。如果说HDFS是大数据时代文件系统的事实标准的话,Parquet就是大数据时代存储格式的事实标准。

本文主要是介绍如何在Impala中生成Parquet文件,并进行数据分析。

  • 内容概述

1.测试数据准备

2.Impala创建Parquet表

3.验证

  • 测试环境

1.RedHat7.3

2.CM和CDH版本为5.13.1

  • 前置条件

1.已使用hive-testbench生成好Hive的基准测试数据

2.测试数据准备


1.使用hive-testbench生成15GB测试数据,挑选catalog_sales表做为测试表

生成的表数据为text类型

查看catalog_sales表生成的text数据大小

具体的数据如何生成,大家可以参考Fayson前面讲的《如何编译及使用hive-testbench生成Hive基准测试数据》。

2.查看catalog_sales表的数据量大小

测试表的数据量大小为21602679

3.Impala创建Parquet表


1.创建一个SQL脚本内容如下:

set parquet_file_size=512M;
set COMPRESSION_CODEC=snappy;
drop table if exists catalog_sales;
create table default.catalog_sales 
stored as parquet
as select * from tpcds_text_15.catalog_sales;

(可左右滑动)

脚本描述:

  • Impala的当前会话设置Parquet文件的大小为512MB并设置其压缩格式为snappy
  • 在default库下创建一个与tpcds_text_15.catalog_sales表结构一致的Parquet表将tpcds_text_15.catalog_sales表数据插入到default.catalog_sales表中。
  • 统计分析default.catalog_sales表

2.在ImpalaDaemon节点的命令行执行如下脚本,创建Parquet表并导入数据

[root@ip-172-31-21-83 impala-parquet]# impala-shell -f load_parquet.sql 
Starting Impala Shell without Kerberos authentication

(可左右滑动)

命令执行成功,显示如下:

3.查看HDFS上catalog_sales表占用空间大小

[root@ip-172-31-16-68 ~]# hadoop fs -du -h /user/hive/warehouse

(可左右滑动)

查看catalog_sales表生成的parquet文件

4.验证


1.在命令行登录impala-shell

表的数据量大小与原始表tpcds_text_15.catalog_sales表数据量一致。

5.为Impala使用合适大小的Parquet block size


默认情况下,Impala的INSERT...SELECT语句创建的Parquet文件的块大小是256MB。这个是在Impala2.0开始生效的。以前,这个默认的大小为1GB,但Impala还会使用一些压缩,所以导致生成的文件会小于1GB。

被Impala写入的Parquet文件都是一个单独的块,允许整个文件刚好由一台机器处理。在将Parquet文件拷贝到HDFS其他目录或者其他HDFS时,请使用hdfs dfs -pb来保留原始块大小。

如果Parquet表中或者查询访问的某个分区中只有一个或几个数据块,则可能会导致查询性能下降:没有足够的数据来利用Impala查询的分布式能力。每个数据块由其中一台DataNode上的单个CPU核来处理。

在一个由100个节点组成的16核机器中,你可以同时处理数千个数据文件。如果我们希望在“许多小文件”和“单个大文件”之间找到一个高I/O和并行处理能力的平衡点,就可以在执行INSERT...SELECT语句之前设置PARQUET_FILE_SIZE,以控制每个生成的Parquet文件的大小。Impala2.0之前你要指定绝对字节数,2.0以后你可以以m或者g为单位,分别代表MB和GB大小。基于特定的数据量选择不同的file size做一些基准测试,然后找到适合你集群和数据文件的PARQUET_FILE_SIZE大小。

6.备注:如何保留HDFS的block size拷贝数据


HDFS的Block大小设置为

生成parquet文件内容查看

查看parquet文件ee435eda333de93f-921275b700000000_36230343_data.0.parq文件的block数量

hadoop fsck -blocks /user/hive/warehouse/catalog_sales/ee435eda333de93f-921275b700000000_36230343_data.0.parq

(可左右滑动)

从上面的截图可以看到该文件的block数量为1接下来使用HDFS的distcp命令拷贝文件并保留文件原始块大小:

hadoop distcp -pb /user/hive/warehouse/catalog_sales/ee435eda333de93f-921275b700000000_36230343_data.0.parq /fayson/block-test/test.parq

(可左右滑动)

文件拷贝成功后查看文件的block数量

可以看到拷贝后文件的block数量没有随着HDFS设置的128MB而变化,文件的大小与源文件一致。

参考:

http://community.cloudera.com/t5/Interactive-Short-cycle-SQL/Recommended-file-size-for-Impala-Parquet-files/td-p/62480

http://community.cloudera.com/t5/Batch-SQL-Apache-Hive/Parquet-table-snappy-compressed-by-default/m-p/51914#M1822

https://www.cloudera.com/documentation/enterprise/latest/topics/impala_parquet_file_size.html

https://www.cloudera.com/documentation/enterprise/latest/topics/impala_parquet.html

https://www.cloudera.com/documentation/enterprise/latest/topics/impala_perf_cookbook.html#perf_cookbook__perf_cookbook_parquet_block_size

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

为天地立心,为生民立命,为往圣继绝学,为万世开太平。 温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。

原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档