Impala表使用Parquet文件格式 2017年05月23日

news/2024/8/26 15:50:57

准备了一个 427144792 行的 textfile 格式表 t_item

[impale-host:21000] > select count(1) from t_item;
Query: select count(1) from t_item  
+-----------+
| count(1)  |
+-----------+
| 427144792 |
+-----------+
Fetched 1 row(s) in 191.67s  

该表在 hdfs 存储的大小:

$ sudo -u hdfs hadoop fs -du -s -h /user/hive/warehouse/t_item
44.5 G  133.6 G  /user/hive/warehouse/t_item  

现在我们使用默认的 snappy 压缩方式创建一个 parquet_snappy_t_item 表:

[impale-host:21000] > create table parquet_snappy_t_item like t_item stored as parquet;
Query: create table parquet_snappy_t_item like t_item stored as parquet

Fetched 0 row(s) in 0.36s  
[impala-host:21000] > set COMPRESSION_CODEC=snappy;
COMPRESSION_CODEC set to snappy  
[impala-host:21000] > insert into parquet_snappy_t_item select * from t_item;
Query: insert into parquet_snappy_t_item select * from t_item  
Inserted 427144792 row(s) in 421.85s  

先看下数据的压缩情况:

$ sudo -u hdfs hadoop fs -du -s -h /user/hive/warehouse/parquet_snappy_t_item
7.3 G  14.5 G  /user/hive/warehouse/parquet_snappy_t_item  

已经压缩到了原先的 1/6 左右,符合我们对 snappy 压缩算法的预期。

那么对数据查询有没有什么影响:

先跑下 count 看看:

[impala-host:21000] > select count(1) from parquet_snappy_t_item;
Query: select count(1) from parquet_snappy_t_item  
+-----------+
| count(1)  |
+-----------+
| 427144792 |
+-----------+
Fetched 1 row(s) in 2.60s  

2.60s vs 191.67s 好惊人的优化。

不过经同事提醒,可能是 Parquet 将行数预先存储在元数据里面了。

那再跑一下 group by :

[impala-host:21000] > select count(item_id), item_id from parquet_snappy_t_item group by 2 order by 1 desc limit 10;
... 省略输出 ...
Fetched 10 row(s) in 11.62s  

而相对于原先 textfile 格式的表:

[impala-host:21000] > select count(item_id), item_id from t_item group by 2 order by 1 desc limit 10;
... 省略输出 ...
Fetched 10 row(s) in 189.42s  

11.62s vs 189.42s 优势依然明显。

再来比较下 gz 和 snappy 压缩:

gz 的优势在于进一步将数据压缩到了 1/10,但是用时也多了一倍,但是在查询中的 CPU 和内存比较 snappy,相差并不大。

以上。

既压缩了数据还能优化了查询速度,这么逆天的黑科技,还不赶紧用起来?

转载:https://zhengheng.me/2017/05/23/impala-parquet/


http://www.niftyadmin.cn/n/3537928.html

相关文章

近来关于openTSDB/HBase的一些杂七杂八的调优

背景 过年前,寂寞哥给我三台机器,说搞个新的openTSDB集群。机器硬件是8核16G内存、3个146G磁盘做数据盘。 我说这太抠了,寂寞哥说之前的TSDB集群运行了两年,4台同样配置的机器,目前hdfs才用了40%,所以前期先…

Spark DataFrame写入HBase的常用方式

Spark是目前最流行的分布式计算框架,而HBase则是在HDFS之上的列式分布式存储引擎,基于Spark做离线或者实时计算,数据结果保存在HBase中是目前很流行的做法。例如用户画像、单品画像、推荐系统等都可以用HBase作为存储媒介,供客户端…

java http返回的xml格式转成json格式

package Yishikeji.Hbase.Admin.Hbase; import java.io.InputStream; import java.net.URL; import java.net.URLConnection;public class HdfsClusterTest {public static void json() throws Exception{//参数url化 // String city java.net.URLEncoder.encode("…

hadoop集群监控总结

1、取自ResourceManager REST API’s指标&#xff1b; https://hadoop.apache.org/docs/r2.8.4/hadoop-yarn/hadoop-yarn-site/ResourceManagerRest.html http://<rm http address:port>/ws/v1/cluster/metrics http://**.**.***.208:8088/ws/v1/cluster/metrics 集群…

CDH5.15.0安装spark2.3

简介&#xff1a; 在我的CDH5.15.0集群中&#xff0c;默认安装的spark是1.6版本&#xff0c;这里需要将其升级为spark2.x版本。经查阅官方文档&#xff0c;发现spark1.6和2.x是可以并行安装的&#xff0c;也就是说可以不用删除默认的1.6版本&#xff0c;可以直接安装2.x版本&a…

java sqoop api 导mysql数据到hdfs

package com.example.demo.controller;import org.apache.hadoop.conf.Configuration; import org.apache.sqoop.Sqoop; import org.apache.sqoop.tool.SqoopTool; import org.apache.commons.lang3.StringUtils; /*** 创建人 **** 创建时间 2018/12/20*/ public class sqoopte…

centos安装mysql 在线安装

yum install mysql-server -y service mysqld start chkconfig mysqld on chkconfig --list mysqld mysql 进入mysql命令行接口 mysql -u root; use mysql; select user, host, password from user; CREATE USER yishikeji% IDENTIFIED BY yishikeji; GRANT ALL PRIVILEGES ON…

Java几种常用JSON库性能比较

SON不管是在Web开发还是服务器开发中是相当常见的数据传输格式&#xff0c;一般情况我们对于JSON解析构造的性能并不需要过于关心&#xff0c;除非是在性能要求比较高的系统。 目前对于Java开源的JSON类库有很多种&#xff0c;下面我们取4个常用的JSON库进行性能测试对比&…