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. 计算总数(COUNT(*)):这类操作主要测试数据扫描的效率,列式存储的ORCFile和ParquetFile由于只读取所需列,所以通常比TextFile快。 2. 按名称(name)查询:这涉及到数据过滤,列式存储的优势在于可以快速定位...
本文通过亿级数据量在Hive和Impala中对比了text、orc和parquet这三种不同的文件格式,以分析它们的性能表现。 首先,让我们深入了解每种文件格式的特点: 1. **Parquet**: - 优点:Parquet采用了高效的压缩和...
在此次更新中,DataX引入了对Parquet和ORC这两种列式存储格式的支持,这对于大数据处理领域具有重要意义。 首先,让我们深入理解Parquet格式。Parquet是由Twitter和Cloudera共同开发的一种列式存储格式,它被设计...
Parquet是一种列式存储格式,适用于大规模数据分析,它支持高效的数据压缩和查询性能。本教程将详细介绍如何使用Python的PySpark库将CSV文件转换为Parquet文件。 首先,确保已经安装了PySpark。如果没有,可以使用...
Parquet 是一种列式存储格式,被广泛用于大数据处理和分析场景,如 Apache Hadoop、Spark、Impala 等。它支持高效的读写操作,尤其适用于大规模数据处理,因为它的设计允许对数据进行快速的随机访问和压缩。C++ 是一...
Parquet是一种列式存储格式,广泛应用于大数据处理和分析领域,如Hadoop、Spark、Impala等。Parquet的优势在于它的高效性和对复杂数据结构的支持,能够优化数据读取速度和存储空间。 在"parquet_tools-0.2.5.tar.gz...
2. Parquet如何表示嵌套数据结构:通过将嵌套数据结构扁平化为列式格式,Parquet能够有效地存储复杂的嵌套数据。 3. Parquet的效率:Parquet通过特定的模型,将嵌套数据表示为一系列列,这不仅便于存储,而且还能...
JSON转换为Parquet 将JSON文件转换为Apache Parquet。 您可能也对 , 或。安装下载预编译的二进制文件您可以从获取最新版本。带货物cargo install json2parquet用法USAGE: json2parquet [FLAGS] [OPTIONS] <JSON> ...
Parquet是一种列式存储格式,广泛应用于大数据处理和分析领域,尤其在Apache Hadoop生态系统中。它被设计为高效、跨平台且与处理语言无关,能够支持多种数据处理框架,如Pig、Hive、Impala和Spark。本文将深入探讨...
sqoop导入数据到hive
在本文档中,我们将重点介绍Kylin新支持的Parquet存储格式,以及其基于Spark引擎的Cube构建。 ### 知识点 #### Kylin与Parquet存储格式 Kylin原本主要使用HBase作为其后端存储,但HBase作为键值存储并不适合所有...
这个库专门用于将JSON数据转换为Parquet文件格式,这是一种高效、列式存储的数据格式,常用于大数据分析和处理。 首先,让我们了解JSON(JavaScript Object Notation)。JSON是一种轻量级的数据交换格式,易于人...
synthetic_text_to_sql 数据转换,训练集 + 测试集,python 转换程序
Parquet 的工作原理是将数据存储在列式存储中,每个列都可以单独压缩和存储。这使得 Parquet 能够快速地查询和处理大规模数据。例如,在一个大规模数据集上执行查询时,Parquet 可以快速地返回结果,而不需要扫描...
要使用 parquet CLI 查看 parquet 文件的元数据,我们执行: parquet-cli meta <path-to-parquet-file> 此输出将首先显示一个包含文件信息的标头: File path: 128_row_group.parquet Created by: parquet-mr ...
Json2实木复合地板 该库包装了pyarrow ,提供了一些工具,可以轻松地将JSON数据转换为Parquet格式。 它主要是在Python中。 遍历文件。 它将数据多次复制到内存中。 这并不意味着它是最快的东西。 但是,它对于较小的...
钻石示例数据,经典的机器学习示例数据,parquet格式、csv格式,方便用户下载学习。学习dbt资料,可参考系列博客:https://blog.csdn.net/neweastsun/category_12786252.html
Parquet是一种列式存储格式,被广泛应用于大数据处理领域,因为它具备高效、跨平台和多语言支持的特性。 Parquet格式的主要优点在于其优化的存储效率和查询性能。在大数据分析中,列式存储相比于行式存储有显著优势...
查看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 ...
1. **列式存储**:Parquet将数据按列存储,这极大地减少了磁盘I/O,因为在分析查询中通常只需要访问部分列。 2. **压缩与编码**:数据在存储时会被压缩,如使用Snappy或Gzip等算法,以减少存储空间。同时,还支持...