day63-Spark SQL下Parquet内幕深度解密

来源:互联网 发布:淘宝网店怎么有生意 编辑:程序博客网 时间:2024/06/05 00:22

DT大数据梦工厂联系方式:

新浪微博:www.weibo.com/ilovepains/
微信公众号:DT_Spark

博客:http://.blog.sina.com.cn/ilovepains

 

一:sparkSQL 下的Parquet意义再思考

存储空间包括:内存和磁盘,计算方面

如果说HDFS是大数据时代分布式文件系统存储的事实标准的话,parquet则是整个大数据时代文件存储格式的事实标准。

1、         速度更快:使用SparkSQL 操作普通文件CSV和ParQuet文件的速度比对上来看,绝大多数情况下使用parQuet会比使用cvs等普通文件块10被左右(在一些普通文件系统无法在Spark上成功运行程序的情况下,使用paquet很多情况下都可以运行成功)

2、Parquet的压缩技术非诚稳定出色,在sparkSql中对压缩技术的处理可能无法正常的完成工作(例如Lost task, Lost Executor),但是此时如果使用parquest就可以正常的完成。

3、极大的减少磁盘IO,通常情况下能减少75%的存储空间,由此可以极大的减少sparkSQL 处理数据的时候的数据出入内容,尤其在spark1.6.x 中推出过滤器,在一些情况下可以极大的进一步减少磁盘的IO和内存的占用。(例如)

4、Spark1.6.x+ Parquet极大的提升了数据扫描的吞吐量,这极大的提高了数据查询速度。

Spark1.6.x 和spark1.5.x相比较而言提升了大约1倍的速度,在spark1.6.x中操作Parquet的时候CPU的使用也进行了极大的优化,有效的降低了CPU的使用。

5、可以极大的优化Spark的调度和执行。测试如果spark采用parquet可以有效的减少Stage的执行消耗,同时可以优化执行路径:

二:SparkSQL 下的parquet内幕

1、         列式存储是以什么基础格式来存储数据的?表现上是树状数据结构,在内部有元数据的Table

2、         在具体的Parquet文件存储的时候有3个核心组成部分:

a)    StorageFormat: Parquest定义了具体的数据内部的类型和存储格式

b)   ObjectModel ConVerters: Parquet中负责计算框架中数据对象和Parquet文件中具体数据类型的映射

c)    ObjectModels: 在parquet中具有自己的Object Model定义的存储格式例如说:Avro具有自己的Object Model,但是

3、          

4、         举例说明

messageAddressBook {

required stringowner;

repeated stringownerPhoneNumbers;

repeated groupcontacts {

 required string name; optional stringphoneNumber; }

}

required(出现1次),optional(出现0次或者1次),repeated(出现0次或者多次)


这个schema中每条记录表示一个人的AddressBook。有且只有一个owner,owner可以有0个或者多个ownerPhoneNumbers,owner可以有0个或者多个contacts。每个contact有且只有一个name,这个contact的phoneNumber可有可无。

第一点:就存储数据本身而言,只考虑叶子节点,,我们的叶子节点ownerownerPhoneNumbernamephoneNumber

第二点:schema实际上是一个Table

AddressBook

Owner

ownerPhoneNumber

 

 

 

 

 

 

第三点:对于Parquet文件而言,数据会被分成RowGroup(里面包含很多Column,每个Column有几个非常重要的特性例如RepatitionLevelDefinition Level

第四点: columnparquet中是以page的方式存在的,Page中有RepatitionLevelDefinition Level等内容。

第五点: RowGroupParquet中是数据读写的缓存单元,所以对Rowgroup的设置会极大的影响parQuet的使用速度和效率,所以如果是分析日志的话,我们一般建议把Row group的缓存大小配置成大于256M很多人的配置都是大于1G,如果想带来最大化的运行效率强烈建议HDFSBlock大小和RowGroup一致。

第六点:在实际存储的把一个树状结构,通过巧妙的编码算法转换成二维码结构:

 

 

 

 

SparkSQL 将parquet作为内存默认的存储格式,

列式存储每一个列跟其他数据没有关系

查询引擎: Hive, Impala, Pig, Presto, Drill, Tajo, HAWQ, IBM BigSQL
计算框架: MapReduce, Spark, Cascading, Crunch, Scalding,Kite
数据模型: Avro, Thrift, Protocol Buffers, POJOs


0 0
原创粉丝点击