大数据-存储格式-OrcFile
一、概述二、RCFile(Record Columnar File)2.1. File FormatRCFile 基于 HDFS 架构,存储在一个 HDFS 块中的所有记录被划分为多个行组。
对于一张表,所有行组大小都相同。一个行组包括三个部分。第一部分是行组的头部标识,主要用于分隔 HDFS 块中的两个连续行组;第二部分是行组的元数据头部,用于存储行组单元的信息,包括行组中的记录数、每个列的字节数、列中每个域的字节数;第三部分是数据段,即实际的列存储数据。在该部分中,同一列的所有域顺序存储。
RCFile 由于相同的列都是在一个 HDFS 块上,所以相对列存储而言会节省很多资源。
一种行列存储相结合的存储方式。首先,其将表数据分为几个行组,对每个行组内的数据按列存储,先水平划分,再垂直划分的理念。它结合了行存储和列存储的优点,保证同一行的数据位于同一节点,并且像列存储一样,RCFile 能够利用列维度的数据压缩,跳过不必要的列读取。
RCFile 具备相当于行存储的数据加载速度和负载适应能力;其次,RCFile 的读优化可以在扫描表格时避免不必要的列读取
2.2. 存储空间 ...
大数据-存储格式-Parquet
http://httao.cn/archives/shen-ru-pou-xi-parquet-wen-jian
https://mp.weixin.qq.com/s/NNsdqm2qGTuzagGFjFWgrA
https://blog.csdn.net/weixin_45626756/article/details/127030007
一、概述Apache Parquet 是由 Twitter 和 Cloudera 最先发起并合作开发的列存项目,也是 2010 年 Google 发表的 Dremel 论文中描述的内部列存格式的开源实现。和一些传统的列式存储系统相比,Dremel/Parquet 最大的贡献是支持嵌套格式数据的列式存储。嵌套格式可以很自然的描述互联网和科学计算等领域的数据,Dremel/Parquet 原生的支持嵌套格式数据减少了规则化、重新组合这些大规模数据的代价。
Parquet 的设计与计算框架、数据模型以及编程语言无关,可以与任意项目集成,因此应用广泛。目前已经是 Hadoop 大数据生态圈列式存储的事实标准。
1.1. 列式存储列式存储,按列进行存储数据 ...
Spark-源码系列-SparkCore-Shuffle-Shuffle 管理器-ShuffleReader-ShuffleBlockFetcherIterator
一、概述数据块的迭代器 ShuffleBlockFetcherIterator 可以从本地或远端获取数据块,本地数据块通过 BlockManager 对象进行获取;远端数据块通过数据块传输服务:BlockTransferService 服务来获取。
二、设计2.1. 结构2.1.1. 属性三、初始化ShuffleBlockFetcherIterator 是读取中间结果的关键。初始化 ShuffleBlockFetcherIterator 的时候会调用到 $initialize()$ 方法~
3.1. 划分本地与远程 Block$partitionBlocksByFetchMode()$ 方法用于划分哪些 Block 从本地获取,哪些需要远程拉取。
12val remoteRequests = partitionBlocksByFetchMode( blocksByAddress, localBlocks, hostLocalBlocksByExecutor, pushMergedLocalBlocks)
3.2. 将 FetchRequest 随机排序存入1fetchR ...
Spark-源码系列-SparkCore-Shuffle-ShuffleRead-ShuffleBlockFetcherIterator
一、概述数据块的迭代器 ShuffleBlockFetcherIterator 可以从本地或远端获取数据块,本地数据块通过 BlockManager 对象进行获取;远端数据块通过数据块传输服务:BlockTransferService 服务来获取。
二、设计2.1. 结构2.1.1. 属性三、初始化ShuffleBlockFetcherIterator 是读取中间结果的关键。初始化 ShuffleBlockFetcherIterator 的时候会调用到 $initialize()$ 方法~
3.1. 划分本地与远程 Block$partitionBlocksByFetchMode()$ 方法用于划分哪些 Block 从本地获取,哪些需要远程拉取。
12val remoteRequests = partitionBlocksByFetchMode( blocksByAddress, localBlocks, hostLocalBlocksByExecutor, pushMergedLocalBlocks)
3.2. 将 FetchRequest 随机排序存入1fetchR ...
Spark-源码学习-SparkSQL-架构设计-SQL 引擎-Analyzer 模块-Rule-Resolution-ResolveAggregateFunctions
一、概述表达式一般指的是不需要触发执行引擎而能够直接进行计算的单元,例如加减乘除四则运算、逻辑操作、转换操作、过滤操作等。
二、实现Catalyst 实现了完善的表达式体系,与各种算子(QueryPlan)占据同样的地位。算子执行前通常都会进行”绑定”操作,将表达式与输入的属性对应起来,同时算子也能够调用各种表达式处理相应的逻辑。
在 Expression 类中,主要定义了5个方面的操作,包括基本属性、核心操作、输入输出、字符串表示和等价性判断
核心操作 eval 函数实现了表达式对应的处理逻辑,也是其他模块调用该表达式的主要接口,而 genCode 和 doGenCode 用于生成表达式对应的 Java 代码。字符串表示用于查看该 Expression 的具体内容,如表达式名和输入参数等。
Spark-源码学习-SparkSQL-架构设计-SQL 引擎-Analyzer 模块-Rule-Resolution-ResolveAliases
一、概述表达式一般指的是不需要触发执行引擎而能够直接进行计算的单元,例如加减乘除四则运算、逻辑操作、转换操作、过滤操作等。
二、实现Catalyst 实现了完善的表达式体系,与各种算子(QueryPlan)占据同样的地位。算子执行前通常都会进行”绑定”操作,将表达式与输入的属性对应起来,同时算子也能够调用各种表达式处理相应的逻辑。
在 Expression 类中,主要定义了5个方面的操作,包括基本属性、核心操作、输入输出、字符串表示和等价性判断
核心操作 eval 函数实现了表达式对应的处理逻辑,也是其他模块调用该表达式的主要接口,而 genCode 和 doGenCode 用于生成表达式对应的 Java 代码。字符串表示用于查看该 Expression 的具体内容,如表达式名和输入参数等。
Spark-源码学习-SparkSQL-架构设计-SQL 引擎-Analyzer 模块-Rule-Resolution-ResolveFunctions
一、概述表达式一般指的是不需要触发执行引擎而能够直接进行计算的单元,例如加减乘除四则运算、逻辑操作、转换操作、过滤操作等。
二、实现Catalyst 实现了完善的表达式体系,与各种算子(QueryPlan)占据同样的地位。算子执行前通常都会进行”绑定”操作,将表达式与输入的属性对应起来,同时算子也能够调用各种表达式处理相应的逻辑。
在 Expression 类中,主要定义了5个方面的操作,包括基本属性、核心操作、输入输出、字符串表示和等价性判断
核心操作 eval 函数实现了表达式对应的处理逻辑,也是其他模块调用该表达式的主要接口,而 genCode 和 doGenCode 用于生成表达式对应的 Java 代码。字符串表示用于查看该 Expression 的具体内容,如表达式名和输入参数等。
Spark-源码学习-SparkSQL-架构设计-SQL 引擎-Analyzer 模块-Rule-Resolution-ResolveReferences
一、概述表达式一般指的是不需要触发执行引擎而能够直接进行计算的单元,例如加减乘除四则运算、逻辑操作、转换操作、过滤操作等。
二、实现Catalyst 实现了完善的表达式体系,与各种算子(QueryPlan)占据同样的地位。算子执行前通常都会进行”绑定”操作,将表达式与输入的属性对应起来,同时算子也能够调用各种表达式处理相应的逻辑。
在 Expression 类中,主要定义了5个方面的操作,包括基本属性、核心操作、输入输出、字符串表示和等价性判断
核心操作 eval 函数实现了表达式对应的处理逻辑,也是其他模块调用该表达式的主要接口,而 genCode 和 doGenCode 用于生成表达式对应的 Java 代码。字符串表示用于查看该 Expression 的具体内容,如表达式名和输入参数等。
Spark-源码学习-SparkSQL-架构设计-SQL 引擎-Analyzer 模块-Rule-Resolution-ResolveRelations
一、概述表达式一般指的是不需要触发执行引擎而能够直接进行计算的单元,例如加减乘除四则运算、逻辑操作、转换操作、过滤操作等。
二、实现Catalyst 实现了完善的表达式体系,与各种算子(QueryPlan)占据同样的地位。算子执行前通常都会进行”绑定”操作,将表达式与输入的属性对应起来,同时算子也能够调用各种表达式处理相应的逻辑。
在 Expression 类中,主要定义了5个方面的操作,包括基本属性、核心操作、输入输出、字符串表示和等价性判断
核心操作 eval 函数实现了表达式对应的处理逻辑,也是其他模块调用该表达式的主要接口,而 genCode 和 doGenCode 用于生成表达式对应的 Java 代码。字符串表示用于查看该 Expression 的具体内容,如表达式名和输入参数等。
Spark-源码学习-SparkSQL-架构设计-SQL 引擎-Analyzer 模块-Rule-Resolution-ResolveUpCast
一、概述表达式一般指的是不需要触发执行引擎而能够直接进行计算的单元,例如加减乘除四则运算、逻辑操作、转换操作、过滤操作等。
二、实现Catalyst 实现了完善的表达式体系,与各种算子(QueryPlan)占据同样的地位。算子执行前通常都会进行”绑定”操作,将表达式与输入的属性对应起来,同时算子也能够调用各种表达式处理相应的逻辑。
在 Expression 类中,主要定义了5个方面的操作,包括基本属性、核心操作、输入输出、字符串表示和等价性判断
核心操作 eval 函数实现了表达式对应的处理逻辑,也是其他模块调用该表达式的主要接口,而 genCode 和 doGenCode 用于生成表达式对应的 Java 代码。字符串表示用于查看该 Expression 的具体内容,如表达式名和输入参数等。