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可有可无。
第一点:就存储数据本身而言,只考虑叶子节点,,我们的叶子节点owner、ownerPhoneNumber、name、phoneNumber
第二点:schema实际上是一个Table
AddressBook |
|||
Owner |
ownerPhoneNumber |
||
第三点:对于Parquet文件而言,数据会被分成RowGroup(里面包含很多Column,每个Column有几个非常重要的特性例如RepatitionLevel,Definition
Level)
第四点: column在parquet中是以page的方式存在的,Page中有RepatitionLevel,Definition
Level等内容。
第五点: RowGroup在Parquet中是数据读写的缓存单元,所以对Rowgroup的设置会极大的影响parQuet的使用速度和效率,所以如果是分析日志的话,我们一般建议把Row
group的缓存大小配置成大于256M很多人的配置都是大于1G,如果想带来最大化的运行效率强烈建议HDFS的Block大小和RowGroup一致。
第六点:在实际存储的把一个树状结构,通过巧妙的编码算法转换成二维码结构:
SparkSQL 将parquet作为内存默认的存储格式,
列式存储每一个列跟其他数据没有关系
查询引擎: Hive, Impala, Pig, Presto, Drill, Tajo, HAWQ, IBM BigSQL
计算框架: MapReduce, Spark, Cascading, Crunch, Scalding,Kite
数据模型: Avro, Thrift, Protocol Buffers, POJOs