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

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

时间: 2024-11-10 06:10:38

day63-Spark SQL下Parquet内幕深度解密的相关文章

Spark SQL下的Parquet使用最佳实践和代码实战

一:Spark SQL下的Parquet使用最佳实践 1,过去整个业界对大数据的分析的技术栈的Pipeline一般分为一下两种方式: A)Data Source -> HDFS -> MR/Hive/Spark(相当于ETL) -> HDFS Parquet -> SparkSQL/impala -> Result Service(可以放在DB中,也有可能被通过JDBC/ODBC来作为数据服务使用): B)Data Source -> Real time update

day61-Spark SQL数据加载和保存内幕深度解密实战

Spark SQL加载数据 SparkSQl 数据输入输入输出主要是DataFrame,DataFrame提供了一些通用的load和save操作. 通过load可以创建出DataFrame:通过save可以将DataFrame数据保存到文件中或者说以具体的格式来指明要读取的文件是什么格式或者输出的数据是什么格式:直接读取 文件的指定类型: SQLContext源码: load 和save方法 @deprecated("Use read.load(path). This will be remov

Parquet + Spark SQL

海量数据存储 推荐用 Parquet列式存储 替代 HDFS上的文件 下面两篇文章讲解 用Parquet列式存储来存储数据,主要是提高查询性能.和存储压缩 <Spark SQL下的Parquet使用最佳实践和代码实战>http://blog.csdn.net/sundujing/article/details/51438306<操作技巧:将 Spark 中的文本转换为 Parquet 以提升性能>http://www.ibm.com/developerworks/cn/analyt

Spark SQL之External DataSource外部数据源(二)源代码分析

上周Spark1.2刚公布,周末在家没事,把这个特性给了解一下,顺便分析下源代码,看一看这个特性是怎样设计及实现的. /** Spark SQL源代码分析系列文章*/ (Ps: External DataSource使用篇地址:Spark SQL之External DataSource外部数据源(一)演示样例 http://blog.csdn.net/oopsoom/article/details/42061077) 一.Sources包核心 Spark SQL在Spark1.2中提供了Exte

Spark SQL操作详细讲解

一. Spark SQL和SchemaRDD 关于Spark SQL的前生就不再多说了,我们只关注它的操作.但是,首先要搞明白一个问题,那就是究竟什么是SchemaRDD呢?从Spark的Scala API可以知道org.apache.spark.sql.SchemaRDD和class SchemaRDD extends RDD[Row] with SchemaRDDLike,我们可以看到类SchemaRDD继承自抽象类RDD.官方文档的定义是"An RDD of Row objects tha

Spark SQL之External DataSource外部数据源(二)源码分析

上周Spark1.2刚发布,周末在家没事,把这个特性给了解一下,顺便分析下源码,看一看这个特性是如何设计及实现的. /** Spark SQL源码分析系列文章*/ (Ps: External DataSource使用篇地址:Spark SQL之External DataSource外部数据源(一)示例 http://blog.csdn.net/oopsoom/article/details/42061077) 一.Sources包核心 Spark SQL在Spark1.2中提供了External

Apache Spark 2.2.0 中文文档 - Spark SQL, DataFrames and Datasets Guide | ApacheCN

Spark SQL, DataFrames and Datasets Guide Overview SQL Datasets and DataFrames 开始入门 起始点: SparkSession 创建 DataFrames 无类型的Dataset操作 (aka DataFrame 操作) Running SQL Queries Programmatically 全局临时视图 创建Datasets RDD的互操作性 使用反射推断Schema 以编程的方式指定Schema Aggregatio

第十一篇:Spark SQL 源码分析之 External DataSource外部数据源

上周Spark1.2刚发布,周末在家没事,把这个特性给了解一下,顺便分析下源码,看一看这个特性是如何设计及实现的. /** Spark SQL源码分析系列文章*/ (Ps: External DataSource使用篇地址:Spark SQL之External DataSource外部数据源(一)示例 http://blog.csdn.net/oopsoom/article/details/42061077) 一.Sources包核心 Spark SQL在Spark1.2中提供了External

spark sql 优化心得

本篇文章主要记录最近在使用spark sql 时遇到的问题已经使用心得. 1 spark 2.0.1 中,启动thriftserver 或者是spark-sql时,如果希望spark-sql run on hdfs,那样需要增加参数 "--conf spark.sql.warehouse.dir=hdfs://HOSTNAME:9000/user/hive/warehouse" 例如启动thriftserver: bin/start-thriftserver.sh --master s