1.数据转parquet的后效果
(1)insert into table1_parquet partition (dt=20161122) select a,b,c from table1 where dt=20161122; (2)set parquet.compression=snappy; insert into table1_pa;rquet partition (dt=20161123) select a,b,c from table1 where dt=20161122 (3)set parquet.compression=gzip; insert into table1_parquet partition (dt=20161124) select a,b,c from table1 where dt=20161122转换结果:
(1) 416.2 M 1.2 G /table1_parquet/dt=20161122 -hive-e 查询:29s,28s,39s (2) 133.6 M 400.7 M /table1_parquet/dt=20161123 -hive-e "set parquet.compression=snappy" 查询:35s,28s,39s (3) 69.9 M 209.6 M /table1_parquet/dt=20161124 -hive-e "set parquet.compression=gzip" 查询:31s,35s,38s
- 可以跳过不符合条件的数据,只读取需要的数据,降低IO数据量。(谓词下推)
- 压缩编码可以降低磁盘存储空间。由于同一列的数据类型是一样的,可以使用更高效的压缩编码(例如Run Length Encoding和Delta Encoding)进一步节约存储空间。
- 只读取需要的列,支持向量运算,能够获取更好的扫描性能。
注:曾发生转换之后数据量没下来的问题,结果发现为参数设置错误,设置成了impala的参数。
2.转化parquet后引起的OOM问题
问题:将表table1历史数据转成parquet表table_parquet(表按天分区,转换之前每个分区约10m数据,转换之后每个分区约1m数据),对近10天的数据做join操作,发生map side 内存溢出问题。
join操作:
当前时间:20161130 查询一:查询历史全量数据(查询正常) select count(*) from( select a.* from tmp.table1_parquet a left join (select * from tmp.table1_parquet where dt>=20160601) b on a.logtime=b.logtime and a.order_id=b.order_id and where a.dt>=20160601 ) as t; 查询二:查询约近10天的数据(map side OOM) select count(*) from( select a.* from tmp.table1_parquet a left join (select * from tmp.table1_parquet where dt>=20161118) b on a.logtime=b.logtime and a.order_id=b.order_id and where a.dt>=20161118 ) as t; 查询三:查询近5天的数据(查询正常) select count(*) from( select a.* from tmp.table1_parquet a left join (select * from tmp.table1_parquet where dt>=20161128) b on a.logtime=b.logtime and a.order_id=b.order_id and where a.dt>=20161128 ) as t;
查询二的异常信息:
跟踪发现,hive默认小表小于20m会走map side join,结果查询二近十天的数据大小为10m(parquet,gzip压缩),hive默认走map side join,但由于10m数据为parquet gzip压缩格式,解压后大小约为100m,导致map side join溢出。
解决方案:
将参数hive.auto.convert.join.noconditionaltask.size的值由20m调整为5m,问题解决。
其中未找到hive.mapjoin.smalltable.filesize这个参数。
附一:与map side join相关的参数如下:
- hive.auto.convert.join : 是否自动转换为mapjoin
- hive.mapjoin.smalltable.filesize : 小表的最大文件大小,默认为25000000,即25M
- hive.auto.convert.join.noconditionaltask : 是否将多个mapjoin合并为一个
- hive.auto.convert.join.noconditionaltask.size : 多个mapjoin转换为1个时,所有小表的文件大小总和的最大值。
例如,一个大表顺序关联3个小表a(10M), b(8M),c(12M),如果hive.auto.convert.join.noconditionaltask.size的值:
1. 小于18M,则无法合并mapjoin,必须执行3个mapjoin;
2. 大于18M小于30M,则可以合并a和b表的mapjoin,所以只需要执行2个mapjoin;
3. 大于30M,则可以将3个mapjoin都合并为1个。
映射下推[projectoin pushdown]和谓词下推[predicates pushdown]包括一个执行引擎,用来将映射和谓词推送到存储格式中以便于在底层尽可能来优化操作。结果就是提高了时间和空间上的效率,由于与查询无关的列都会被摒弃,并且不需要提供给执行引擎。
接下来我们将看看如果在 Hadoop 管道中使用 Pushdown。
在编码之前,你需要在 Hive 和 Pig 中启动对 Parquet 提供的开箱即用的投影/映射下推。在 MapReduce 程序中,有些手动操作你需要加入到 Driver 代码中来启动下推操作。从下面的高亮部分可以看到具体操作。
相关推荐
1、通过亿级数据量在hive和impala中查询比较text、orc和parquet性能表现(一) 网址:https://blog.csdn.net/chenwewi520feng/article/details/130465139 本文通过在hdfs中三种不同数据格式文件存储相同数量的数据,...
1、通过亿级数据量在hive和impala中查询比较text、orc和parquet性能表现(二) 网址:https://blog.csdn.net/chenwewi520feng/article/details/130465463 本文通过在hdfs中三种不同数据格式文件存储相同数量的数据,...
新增支持读取parquet格式文件,支持写入parquet格式文件,修复读取orc读取数据丢失问题,重新打包后的jar文件。
sqoop导入数据到hive
JSON转换为Parquet 将JSON文件转换为Apache Parquet。 您可能也对 , 或。安装下载预编译的二进制文件您可以从获取最新版本。带货物cargo install json2parquet用法USAGE: json2parquet [FLAGS] [OPTIONS] <JSON> ...
查看parquet文件工具 使用方式:java -jar xxx.jar usage: parquet-tools cat [option...] where option is one of: --debug Enable debug output -h,--help Show this help string -j,--json Show records in ...
使用spark将csv文件转为parquet文件
Json2实木复合地板 该库包装了pyarrow ,提供了一些工具,可以轻松地将JSON数据转换为Parquet格式。 它主要是在Python中。 遍历文件。 它将数据多次复制到内存中。 这并不意味着它是最快的东西。 但是,它对于较小的...
无需ppython查看parquet文件内容。 源码下载地址: https://github.com/apache/parquet-mr 编译: cd parquet-tools && mvn clean package -Plocal 使用方式: (1)查看schema java -jar parquet-tools-1.8.2.jar ...
parquet数据:列式存储结构,由Twitter和Cloudera合作开发,相比于行式存储,其特点是: 可以跳过不符合条件的数据,只读取需要的数据,降低IO数据量;压缩编码可以降低磁盘存储空间,使用更高效的压缩编码节约存储...
项目使用vs2015,使用的git上的三方开源框架,进行了裁剪,基于C++创建,读写parquet文件。
赠送jar包:flink-parquet_2.11-1.10.0.jar; 赠送原API文档:flink-parquet_2.11-1.10.0-javadoc.jar; 赠送源代码:flink-parquet_2.11-1.10.0-sources.jar; 赠送Maven依赖信息文件:flink-parquet_2.11-1.10.0....
赠送jar包:parquet-format-2.3.1.jar; 赠送原API文档:parquet-format-2.3.1-javadoc.jar; 赠送源代码:parquet-format-2.3.1-sources.jar; 赠送Maven依赖信息文件:parquet-format-2.3.1.pom; 包含翻译后的API...
赠送jar包:parquet-common-1.8.2.jar; 赠送原API文档:parquet-common-1.8.2-javadoc.jar; 赠送源代码:parquet-common-1.8.2-sources.jar; 赠送Maven依赖信息文件:parquet-common-1.8.2.pom; 包含翻译后的API...
赠送jar包:parquet-hadoop-1.8.2.jar; 赠送原API文档:parquet-hadoop-1.8.2-javadoc.jar; 赠送源代码:parquet-hadoop-1.8.2-sources.jar; 赠送Maven依赖信息文件:parquet-hadoop-1.8.2.pom; 包含翻译后的API...
赠送jar包:parquet-common-1.10.0.jar; 赠送原API文档:parquet-common-1.10.0-javadoc.jar; 赠送源代码:parquet-common-1.10.0-sources.jar; 赠送Maven依赖信息文件:parquet-common-1.10.0.pom; 包含翻译后...
parquet-tools-1.6.0-SNAPSHOT.jar git project: https://github.com/apache/parquet-mr/tree/master/parquet-tools?spm=5176.doc52798.2.6.H3s2kL 查看结构: java -jar parquet-tools-1.6.0-SNAPSHOT.jar schema -...
java使用Parquet
一个简单而强大的工具,可将您的数据从Redshift迁移到Redshift Spectrum。 免费软件:MIT许可证 文档: : 。 特征 一线客: 将Redshift表导出到S3(CSV) 并行将导出的CSV转换为Parquet文件 在Redshift集群上...
parquet-tools-1.6.0rc3-SNAPSHOT.jar是一个查看parquet数据文件schema的工具,github地址:https://github.com/apache/parquet-mr/tree/master/parquet-tools?spm=5176.doc52798.2.6.H3s2kL 下载后mvn编译。...