Spark-源码学习-SparkCore-SparkEnv-MapOutputTracker
每个 Map 任务或者 Reduce 任务都会有其唯一的标识,分别为 mapId 和 reduceId。每个 Reduce 任务的输入可能是多个 Map 任务的输出,Reduce 会到各个 Map 任务的所在节点上拉取 Block,这一过程叫做 Shufle。每个 Shuffle 过程都有唯一的表示 shuffleld.MapOutputTracker 有两个子类: MapOutputTrackerMaster(for driver) 和 MapOutputTrackerWorker (for executors) 因为它们使用了不同的 HashMap 来存储元数据。
在 MapOutputTracker 初始化中,可以看到针对当前实例是 Driver 还是 Executor,创建其方式有所不同。
如果当前应用程序是 Driver,则创建 MapOutputTrackerMaster,然后创建 MapOutputTrackerMasterEndpoint 并且注册到 Dispatcher 中,注册名为 MapOutputTracker
如果当前应用程序是 Executor,则创建 ...
Spark-源码学习-架构设计-DataSource 体系-保存数据
一、概述1234567891011df.write.format("hudi") .option(HoodieWriteConfig.TBL_NAME.key, tableName) .option(TABLE_TYPE.key, COW_TABLE_TYPE_OPT_VAL) .option(RECORDKEY_FIELD.key, "id") .option(PRECOMBINE_FIELD.key, "ts") .option(PARTITIONPATH_FIELD.key, "") .option(KEYGENERATOR_CLASS_NAME.key, classOf[NonpartitionedKeyGenerator].getName) .option(HoodieWriteConfig.INSERT_PARALLELISM_VALUE.key, "1") .option(HoodieWriteConfig.UPSERT_PARALLELISM_VALU ...
Spark-源码学习-SparkSQL-架构设计-DataSource 体系
一、概述Spark Datasource API 是一套连接外部数据源和 Spark 引擎的框架,提供一种快速读取外界数据的能力,它可以方便地把不同的数据格式通过 DataSource API 注册成 Spark 的表,然后通过 Spark SQL 直接读取。它可以充分利用 Spark 分布式的优点进行并发读取,通过 SparkSQL Catayst 优化引擎,能够加快任务的执行。
Spark Datasource API 同时提供了一套优化机制,如将列剪枝和过滤操作下推至数据源侧,减少数据读取数量,提高数据处理效率。
二、设计DataSource API 是 Apache Spark 中非常流行的功能。许多开发人员广泛使用它来将第三方应用程序连接到 Apache Spark。Spark DataSource API 目前有 V1 和 V2 两个版本,V1 在 2.3.x 之前就已经存在了,V2 API 在 Spark 2.3.0 中引入,并在 2.4.0 中进行了修改。在 3.0.0 中,Spark 对 V2 API 进行了重大更改,但是为了向后兼容,V1 被保留不变。
2. ...
Spark-源码学习-架构设计-DataSource-V2-2.x
一、概述DataSource API 是 Apache Spark 中非常流行的功能。许多开发人员广泛使用它来将第三方应用程序连接到 Apache Spark。Spark DataSource API 目前有 V1 和 V2 两个版本,V1 在 2.3.x 之前就已经存在了,V2 API 在 Spark 2.3.0 中引入,并在 2.4.0 中进行了修改。在 3.0.0 中,Spark 对 V2 API 进行了重大更改,但是为了向后兼容,V1 被保留不变。
二、设计
Spark-源码学习-架构设计-DataSource-V2-3.x
一、概述DataSource API 是 Apache Spark 中非常流行的功能。许多开发人员广泛使用它来将第三方应用程序连接到 Apache Spark。Spark DataSource API 目前有 V1 和 V2 两个版本,V1 在 2.3.x 之前就已经存在了,V2 API 在 Spark 2.3.0 中引入,并在 2.4.0 中进行了修改。在 3.0.0 中,Spark 对 V2 API 进行了重大更改,但是为了向后兼容,V1 被保留不变。
二、设计
2.1. TableProviderTableProvider 是一个用于解析表和获取相应元数据的接口。实现此接口将允许用户在 SQL 中使用 Spark 读取自定义数据源。在 Spark 2.4.X 中,数据源 API 中的主要接口是DatasourceV2,所有自定义数据源都需要实现它或其中一个专业化接口,如 ReadSupport 或 WriteSupport。在 3.0.X 中,此接口被删除。引入了一个新的 TableProvider 接口。它是所有不需要支持 DDL 的自定义数据源的基本接口。
2.2. ...
Flink-源码学习-FlinkCore-TaskManager-任务运行服务
一、概述二、TaskManagerServices 架构TaskManagerServices 中包含多种多样的内部组件,以实现不同的功能。
2.1. 公共基础服务
安全服务 SecurityManager
通信服务 RpcEnv
序列化服务 SerializerManager
度量系统
Flink 作为优秀的开源系统,在监控方面也有自己的一整套体系,Flink 基于 Metrics 实现了自己的度量系统。
2.2. 运行时服务
存储服务
Flink 提供的存储服务包括内存管理服务和文件管理服务,TaskManager 启动时也会初始化 I/O 管理组件 IOManager 负责将数据溢出到磁盘并将其读取回来以及内存管理组件 MemoryManager 负责协调内存使用。
引用本站文章
Flink 源码学习-存储服务-架构设计
Joker
...
Flink-源码学习-FlinkCore-公共基础服务
Fink 集群启动时组件会执行 initializeServices() 方法初始化一些基础服务,比如说 JobManager 启动时会初始化一些 RPC 通信服务、高可用服务以及监控服务等。
RPC 通信服务
Flink 集群内部通信框架的最底层依赖于 Akka,定义了不同类型的消息,并且设计了通用的 RPC 通信组件,Flink 的所有提供 RPC 请求的集群组件(如 JobMaster、 TaskManager、 ResourceManager、 Dispatcher 等)都使用了这些 RPC 通信基础组件來提供对外的 RPC 接口。JobManager RPC 服务如图所示:
引用本站文章
Flink-源码学习-FlinkCore-通信服务-公共基础服务-Flink RPC 设计
Joker
高可用服务
向集群组件提供高可用支持,集群 ...
Spark-源码学习-SparkSession-SparkContext-SparkEnv
正如曹操在《建学令》中所言,优秀人才的培育离不开国家政策这个大环境。在人类生活中,总是会依赖于外部的各种环境。一个人学习成绩的好坏,很大的因素取决于他所处的教育环境;一个人健康与否,依赖于他所处的医疗卫生环境;一个人的沟通能力,与自己的家庭环境有很重要的关系。如果某一天你发现自己联系不到亲人、朋友,甚至周围的环境都是陌生的,那么你立刻会处于崩溃的边缘。
一、概述就像学习一门编程语言一样, 无论是 Java 程序还是 Scala 程序,都需要运行在其所依托的环境下。Spark 对任务的计算都依托于 Executor 的能力,所有的 Executor 都有自己的 Spark 执行环境 SparkEnv。Executor 有了 SparkEnv, 就可以将数据存储在 SparkEnv 提供的存储体系中; 就能利用计算引擎对计算任务进行处理,就可以在节点间进行通信等…
二、SparkEnv 架构SparkEnv 还提供了多种多样的内部组件,实现不同的功能。
2.1. 公共基础服务组件
安全服务 SecurityManager
SecurityManager 主要对账号、权限及身份认证进 ...
Spark 理论笔记系列
正在总结中,等我😭~~~
Spark-源码学习-DPP 设计
一、概述1.1. 分区裁剪分区剪裁是谓词下推的一种特例,它指的是在分区表中下推谓词,谓词是分区目录。分区表分不同的目录存储数,如果过滤谓词中包含分区键,Spark SQL 对分区表做扫描的时候,是完全可以跳过不满足谓词条件的分区目录,这就是分区剪裁。
1.2. 动态分区裁剪 DPP(Dynamic Partition Pruning)1.2.1. 什么是 DPP?动态分区裁剪就是基于运行时推断出来的信息来进一步进行分区裁剪。从而减少事实表中数据的扫描量降低 I/O开销,提升执行性能。DPP(Dynamic Partition Pruning,动态分区剪裁)指的是在大表 Join 小表的场景中,可以充分利用过滤之后的小表,在运行时动态的来大幅削减大表的数据扫描量,从整体上提升关联计算的执行性能。
在数仓情景下 Spark SQL 利用维度表提供的过滤信息,减少事实表中数据的扫描量、提升执行性能。
https://blog.csdn.net/Shyllin/article/details/129202728
https://zhuanlan.zhihu.com/p/5487573 ...