摘要:NO: Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of
阅读全文
摘要:NO: Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of
阅读全文
摘要:一、Spark优化 ### 编码优化: ~~~ ① RDD复用 ~~~ ② RDD持久化 ~~~ ③ 巧用 filter ~~~ ④ 选择高性能算子 ~~~ ⑤ 设置合并的并行度 ~~~ ⑥ 广播大变量 ~~~ ⑦ Kryo序列化 ~~~ ⑧ 多使用Spark SQL ~~~ ⑨ 优化数据结构 ~~
阅读全文
摘要:一、BlockManager ### BlockManager ~~~ BlockManager是一个嵌入在 Spark 中的 key-value型分布式存储系统,也是 Master-Slave 结构的, ~~~ RDD-cache、shuffle-output、broadcast 等的实现都是基于
阅读全文
摘要:一、数据倾斜 ### 基本概念 ~~~ 这是我们期望的处理模式: ### 什么是数据倾斜 ~~~ Task之间数据分配的非常不均匀 ~~~ key.hashCode % reduce个数 = 分区号 ### 数据倾斜有哪些现象 ~~~ Executor lost、OOM、Shuffle过程出错、程序
阅读全文
摘要:一、数据倾斜处理 ### 做好数据预处理: ~~~ 过滤key中的空值 ~~~ 消除数据源带来的数据倾斜(文件采用可切分的压缩方式) ~~~ 数据倾斜产生的主要原因:Shuffle + key分布不均 ### 处理数据倾斜的基本思路: ~~~ 消除shuffle ~~~ 减少shuffle过程中传输
阅读全文
摘要:一、执行内存管理 ### 执行内存管理 ~~~ 执行内存主要用来存储任务在执行 Shuffle 时占用的内存, ~~~ Shuffle 是按照一定规则对 RDD 数据重新分区的过程, ~~~ Shuffle 的 Write 和 Read 两阶段对执行内存的使用: ### Shuffle Write
阅读全文
摘要:一、存储内存管理 ### 存储内存管理 ~~~ 堆内内存:系统保留(300M)、Other、存储内存、执行内存 ~~~ 堆外内存:存储内存、执行内存 ~~~ 存储内存:RDD缓存的数据 & 共享变量 ~~~ RDD的持久化 ~~~ RDD缓存的过程 ~~~ 淘汰与落盘 二、RDD 持久化机制 ###
阅读全文
摘要:一、内存管理 ### 内存管理 ~~~ 在执行 Spark 的应用程序时,Spark 集群会启动 Driver 和 Executor 两种 JVM 进程: ~~~ Driver为主控进程,负责创建 Spark 上下文,提交 Spark 作业,将作业转化为 Task, ~~~ 并在各个 Executo
阅读全文
摘要:一、静态内存管理 ### 静态内存管理 ### 静态内存架构 ~~~ Spark 2.0 以前版本采用静态内存管理机制。存储内存、 ~~~ 执行内存和其他内存的大小在 Spark 应用程序运行期间均为固定的, ~~~ 但用户可以应用程序启动前进行配置,堆内内存的分配如下图所示: ### 静态内存管理
阅读全文
摘要:NO: Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of
阅读全文
摘要:一、Shuffle Writer ### Shuffle Writer:ShuffleWriter(抽象类),有3个具体的实现: ~~~ SortShuffleWriter。sortShulleWriter 需要在 Map 排序 ~~~ UnsafeShuffleWriter。使用 Java Uns
阅读全文
摘要:一、Hadoop Shuffle 与 Spark Shuffle 的区别 ### 共同点: ~~~ 二者从功能上看是相似的;从High Level来看,没有本质区别,实现(细节)上有区别 ### 实现上的区别: ~~~ Hadoop中有一个Map完成,Reduce便可以去fetch数据了,不必等到所
阅读全文
摘要:一、Sort Shuffle V1 ### Sort Shuffle V1 ~~~ 为了更好地解决上面的问题,Spark 参考了 MapReduce 中 Shuffle 的处理方式, ~~~ 引入基于排序的 Shuffle 写操作机制。 ~~~ 每个 Task 不会为后续的每个 Task 创建单独的
阅读全文
摘要:一、Shuffle详解 ### shuffle详解 ~~~ 在 Spark 或 MapReduce 分布式计算框架中,数据被分成一块一块的分区, ~~~ 分布在集群中各节点上,每个计算任务一次处理一个分区, ~~~ 当需要对具有某种共同特征的一类数据进行计算时,就需要将集群中的这类数据汇聚到同一节点
阅读全文
摘要:一、Hash Shuffle V1 ### Hash Shuffle V1 ~~~ 相对于传统的 MapReduce, ~~~ Spark 假定大多数情况下 Shuffle 的数据不需要排序,强制排序反而会降低性能。 ~~~ 因此不在 Shuffle Read 时做 Merge Sort,如果需要合
阅读全文
摘要:一、本地化调度 ### 本地化调度 ~~~ DAGScheduler切割Job,划分Stage。 ~~~ 调用submitStage来提交一个Stage对应的tasks,submitStage会调用submitMissingTasks, ~~~ submitMissingTasks 确定每个需要计算
阅读全文
摘要:一、Task调度 ### Task调度 ### TaskSetManager 结构如下图所示: ~~~ Task 的调度是由 TaskScheduler 来完成(底层调度)。 ~~~ DAGScheduler 将 Stage 打包到 TaskSet 交给TaskScheduler, ~~~ Task
阅读全文
摘要:一、作业执行原理 ### 调度策略 ~~~ TaskScheduler会先把 DAGScheduler 给过来的 TaskSet 封装成 TaskSetManager 扔到任务队列里, ~~~ 然后再从任务队列里按照一定规则把它们取出来,由 SchedulerBackend 发送给Executor运
阅读全文
摘要:一、Stage划分 ### 提交 Task ~~~ 得到RDD中需要计算的partition ~~~ 对于Shuffle类型的stage,需要判断stage中是否缓存了该结果; ~~~ 对于Result类型的Final Stage,则判断计算Job中该partition是否已经计算完成。 ~~~ 这
阅读全文