第63课:Spark SQL下Parquet内幕深度解密

33 篇文章 0 订阅
6 篇文章 0 订阅

内容:

    1.SparkSQL下的Parquet意义再思考
    2.SparkSQL下的Parquet内幕解密

一、SparkSQL下的Parquet意义再思考

    1.如果说HDFS是大数据时代分布式文件系统存储的事实标准的话,Parquet是大数据时代的文件存储格式的事实标准;
    2.速度更快:从使用SparkSQL操作普通文件CSV和Parquet文件的速度对比来看,绝大多数情况下使用Parquet会比CSV等普通文件速度提升10倍左右;(在一些普通文件系统无法在Spark上成功运行的情况下,使用Parquet很多时候都可以成功运行)
    3.Parquet的压缩技术非常稳定出色,在SparkSQL中对压缩技术的处理可能无法正常的完成工作(例如会导致Lost Task,Lost Executor),但是此时如果使用Parquet就可以正常的完成;
    4.极大的减少磁盘IO,通常情况下能够减少75%的存储空间,由此可以极大的减少SparkSQL处理数据的时候的数据输入内容,尤其是在Spark中下推过滤器在一些情况下可以极大的进一步减少磁盘的IO和内存的占用;
    5.Spark+Parquet极大的提升了数据扫描的吞吐量,这极大的提高了数据的查找速度,spark1.6和spark1.5.x提升了大约1倍的速度,在spark1.6.x中操作Parquet的时候CPU的使用也进行了极大的优化,有效提高了CPU的使用;
    6.采用Parquet可以极大的优化Spark的调度和执行,测试表明Spark如果采用Parquet可以有效的减少Stage的执行消耗,同时可以优化执行路径;

二、SparkSQL下的Parquet内幕解密

    1.列式是以什么基本格式存储数据:表现上是树状数据结构,内部有元数据的Table;
    2.在具体的Parquet文件存储的时候有三个核心组成部分:
        a)Storage Format:Parquet定义了具体的数据内部的类型和存储格式;
        b)Object Model Converter:Parquet中负责计算框架中数据对象和Parquet文件中具体数据的映射;
        c)Object Models:在Parquet中具有自己的Object Model定义的存储格式,例如说Avro具有自己的Object Model,但是Parquet在处理相关的格式的数据的时候会使用自己的Object Model来存储;
        映射完成后Parquet会进行自己的Column Encoding,然后存储成为Parquet格式的文件
    3.Modules
        The parquet-format project contains format specifications and Thrift definitions of metadata required to properly read Parquet files.

        The parquet-mr project contains multiple sub-modules, which implement the core components of reading and writing a nested, column-oriented data stream, map this core onto the parquet format, and provide Hadoop Input/Output Formats, Pig loaders, and other Java-based utilities for interacting with Parquet.

        The parquet-cpp project is a C++ library to read-write Parquet files.

        The parquet-rs project is a Rust library to read-write Parquet files.

        The parquet-compatibility project contains compatibility tests that can be used to verify that implementations in different languages can read and write each other’s files.

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一致。

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

Repetiton Level

Definition Level

Value

1

2

18610086859

0

1

“Spark”

0

0

NULL

SparkSQL 将parquet作为内存默认的存储格式,列式存储每一个列跟其他数据没有关系

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值