数据湖-Iceberg-源码学习-Kernel-Table-事务
一、概述传统数据湖在数据写入时的事务性支持不够好,随着越来越多的业务关键处理流程移至数据湖,需要一种机制来原子地发布一批数据,即仅保存有效数据,部分失败必须回滚而不会损坏已有数据集。同时查询的结果必须是可重复的,查询端看不到任何部分提取的数据,任何提交的数据都必须可靠地写入。Hudi 提供了强大的 ACID 能力。高效的回滚机制能够保证数据一致性和避免“孤儿文件”或中间状态数据文件残留和产生。
原子性: 事务整体是一个工作单元,对数据的修改操作,要么全部执行,要么完全不执行,没有第三种状态。
一致性: 在一个事务执行之前和执行之后数据库都必须处于逻辑上的一致性状态,数据在不同的事务中是相同的。
隔离性: 并发执行的事务之间是相互隔离的,一个事务内部的状态,对其他事务是不可见的。
持久性: 当系统发生故障时,持久性确保已提交事务的更新不会丢失,也就是说一旦一个事务提交,保证数据的改变是永久性的。
ACID 四属性的关系可大概表述为:原子性是要求,一致性是目标,隔离性是手段,持久性是结果。如何做到原子性的隔离是实现事务的重中之重。在宏观上,实现事务特性是通过并发控制。在微观上,实现 ...
Spark-源码学习-SparkSQL-聚合体系-执行-HashAggregateExec
一、概述聚合执行本质上是将 RDD 的每个 Partition 中的数据进行处理。对于每个 Partition 中的输入数据即 Input(通过 InputIterator 进行读取),经过聚合执行计算之后,得到相应的结果数据即 Result(通过 AggregationIterator 来访问)。
二、执行框架 AggregationIterator聚合执行框架指的是聚合过程中抽象出来的通用功能,包括聚合函数的初始化、聚合缓冲区更新合并函数和聚合结果生成函数等。这些功能都在聚合迭代器(Aggregationlterator)中得到了实现。
三、SortAggregateExecSortAggregateExec 是一种基于排序的聚合实现,在进行聚合之前,会根据 grouping key 进行分区并在分区内排序,将具有相同grouping key 的记录分布在同一个 partition 内且前后相邻。聚合时只需要顺序遍历整个分区内的数据,即可得到聚合结果。
四、HashAggregateExecHashAggregateExec 构建一个 Map 类型的数据结构,以分组的属性作为 ...
Spark-源码学习-SparkSQL-聚合体系-执行-ObjectHashAggregateExec
一、概述聚合执行本质上是将 RDD 的每个 Partition 中的数据进行处理。对于每个 Partition 中的输入数据即 Input(通过 InputIterator 进行读取),经过聚合执行计算之后,得到相应的结果数据即 Result(通过 AggregationIterator 来访问)。
二、执行框架 AggregationIterator聚合执行框架指的是聚合过程中抽象出来的通用功能,包括聚合函数的初始化、聚合缓冲区更新合并函数和聚合结果生成函数等。这些功能都在聚合迭代器(Aggregationlterator)中得到了实现。
三、SortAggregateExecSortAggregateExec 是一种基于排序的聚合实现,在进行聚合之前,会根据 grouping key 进行分区并在分区内排序,将具有相同grouping key 的记录分布在同一个 partition 内且前后相邻。聚合时只需要顺序遍历整个分区内的数据,即可得到聚合结果。
四、HashAggregateExecHashAggregateExec 构建一个 Map 类型的数据结构,以分组的属性作为 ...
Spark-源码学习-SparkSQL-聚合体系-执行-SortAggregateExec
一、概述聚合执行本质上是将 RDD 的每个 Partition 中的数据进行处理。对于每个 Partition 中的输入数据即 Input(通过 InputIterator 进行读取),经过聚合执行计算之后,得到相应的结果数据即 Result(通过 AggregationIterator 来访问)。
二、执行框架 AggregationIterator聚合执行框架指的是聚合过程中抽象出来的通用功能,包括聚合函数的初始化、聚合缓冲区更新合并函数和聚合结果生成函数等。这些功能都在聚合迭代器(Aggregationlterator)中得到了实现。
三、SortAggregateExecSortAggregateExec 是一种基于排序的聚合实现,在进行聚合之前,会根据 grouping key 进行分区并在分区内排序,将具有相同grouping key 的记录分布在同一个 partition 内且前后相邻。聚合时只需要顺序遍历整个分区内的数据,即可得到聚合结果。
四、HashAggregateExecHashAggregateExec 构建一个 Map 类型的数据结构,以分组的属性作为 ...
Spark-源码学习-SparkSQL-聚合体系-执行
一、概述聚合执行本质上是将 RDD 的每个 Partition 中的数据进行处理。对于每个 Partition 中的输入数据即 Input(通过 InputIterator 进行读取),经过聚合执行计算之后,得到相应的结果数据即 Result(通过 AggregationIterator 来访问)。
二、执行框架 AggregationIterator聚合执行框架指的是聚合过程中抽象出来的通用功能,包括聚合函数的初始化、聚合缓冲区更新合并函数和聚合结果生成函数等。这些功能都在聚合迭代器(Aggregationlterator)中得到了实现。
三、SortAggregateExecSortAggregateExec 是一种基于排序的聚合实现,在进行聚合之前,会根据 grouping key 进行分区并在分区内排序,将具有相同grouping key 的记录分布在同一个 partition 内且前后相邻。聚合时只需要顺序遍历整个分区内的数据,即可得到聚合结果。
四、HashAggregateExecHashAggregateExec 构建一个 Map 类型的数据结构,以分组的属性作为 ...
Spark-源码学习-SparkSQL-聚合体系
一、概述聚合操作(Aggregation)指的是在原始数据的基础上按照一定的逻辑进行整合,从而得到新的数据,一般通过聚合函数(如 count、 max 和 sum 等)汇总多行的信息。聚合查询一直以来都是数据分析应用中必不可少的部分,在各种 SQL 算子中占据着重要地位。
在 Catalyst 的 SqlBase.g4 文法文件中,聚合语句 aggregation 定义如下:在常见的聚合查询 中,通常包括分组语句(group by)和聚合函数( aggregate function );聚合函数出现在 Select 语 句中的情形较多,定义在 functionCall 标签的 prim缸yExpression 表达式文法中, qualifiedName 对 应函数名,括号内部是该函数的参数列表。
二、普通聚合2.1. 聚合缓冲区与聚合模式(AggregateMode)聚合查询在计算聚合值的过程中,通常都需要保存相关的中间计算结果,例如 $max$ 函数需要保存当前最大值,$count$ 函数需要保存当前的数据总数,求平均值的 $avg$ 函数需要同时保存 count 和 sum 的 ...
Spark-理论笔记-本地化执行引擎-Gluten-Backend-Arrow
一、概述1.1. 什么是 Arrow?Apache Arrow 是 Apache 基金会近几年最活跃的项目之一,它基于内存列式格式彷生出了完善的内存计算生态,是当前内存列式数据格式事实上的标准。Arrow 的内存模型可以帮助编译器自动地实现向量化,且在传输时没有序列化/反序列化成本,实现了 CPU 和 IO 的效率提升。
在 Arrow 之前,任何应用程序或库之间交换数据的标准方式是以一种或另一种方式将其存储到磁盘。
如果 NET Core 库想要将数据传递给 Python 进行数据分析,很可能有人会将数据写入文件(例如 csv、json、Parquet 等),然后用 Python 再次读取它。写入(序列化)和读取(反序列化)这两个步骡都是昂贵且缓慢的,数据集越大,完成每个步骤所需的时间就越长。
是否存在一种通过握手和零复制直接交换数据的方式呢?🤔️
举个栗子: NET 将开始与 Python 聊天,指向内存中的一堆数据,然后就像:嘿,伙计,这堆东西现在是你的了。然后Python 就可以直接访问这个数据,而不用把宅从二个地方拖到另一个地方(例如先写入再读出)。那岂不是很棒 ...
Spark-源码学习-集群启动-standalone-worker
一、概述Worker 在 Local/Standalone 部署模式中对工作节点的资源和 Executor 进行管理。Worker 一方面向 Master 汇报自身所管理的资源信息,一方面接收 Master 的命令运行 Driver 或者为 Application 运行 Executor。
二、实现2.1. 属性
cores: 内核数
memory: 内存大小
masterRpcAddresses: Master 的 RpcEnv 地址(即 RpcAddress)的数组。
由于一个集群为了可靠性和容错,需要多个 Master 节点,因此用数组来存储它们的 RpcEnv 地址
workDirPath: Worker 工作目录
host/port: Worker 的 RpcEnv 的 host/端口
forwordMessageScheduler: 用于发送消息的调度执行器(ScheduledThreadPool-Executor)
forwordMessageScheduler 只能调度执行一个线程,执行的线程以 worker-forward-message-schedu ...
Spark-源码学习-SparkCore-存储服务-架构设计
一、概述Spark 的存储体系在整个 Spark 架构中与大地在生态圈中的作用非常类似。Spark 的存储体系贯穿了集群中的每个实例。从单个节点来看,Spark 的存储体系隶属于 SparkEnv。Spark 存储系统用于存储 3 个方面的数据,分别是 RDD 缓存、Shuffle 中间文件、广播变量。
RDD 缓存
RDD 缓存指的是将 RDD 以缓存的形式物化到内存或磁盘的过程。对于一些计算成本和访问频率都比较高的 RDD 来说,缓存有两个好处:
降低失败重试的计算开销
通过对缓存内容的访问,可以有效减少从头计算的次数,从整体上提升作业端到端的执行性能。
Shuffle 中间文件
Shuffle 中间文件指的是 Shuffle Map 阶段的输出结果,这些结果以文件的形式暂存于本地磁盘。在Shuffle Reduce 阶段通过网络拉取中间文件用于聚合计算,如求和、计数等。在集群范围内,Reducer 想要拉取属于自己的那部分中间数据,就必须要知道这些数据都存储在哪些节点,以及什么位置。而这些关键的元信息,也是由 Spark 存储系统保存并维护的。
广播变量
广播变量往 ...












































