首页
学习
活动
专区
圈层
工具
发布
50 篇文章
1
Hadoop面试复习系列——HDFS(一)
2
大数据技术之_04_Hadoop学习_01_HDFS_HDFS概述+HDFS的Shell操作(开发重点)+HDFS客户端操作(开发重点)+HDFS的数据流(面试重点)+NameNode和Seconda
3
大数据技术之_05_Hadoop学习_02_MapReduce_MapReduce框架原理+InputFormat数据输入+MapReduce工作流程(面试重点)+Shuffle机制(面试重点)
4
大数据技术之_05_Hadoop学习_01_MapReduce_MapReduce概述+Hadoop序列化
5
大数据技术之_03_Hadoop学习_01_入门_大数据概论+从Hadoop框架讨论大数据生态+Hadoop运行环境搭建(开发重点)
6
大数据技术之_05_Hadoop学习_04_MapReduce_Hadoop企业优化(重中之重)+HDFS小文件优化方法+MapReduce扩展案例+倒排索引案例(多job串联)+TopN案例+找博客
7
大数据技术之_06_Zookeeper学习_Zookeeper入门+Zookeeper安装+Zookeeper内部原理+Zookeeper实战(开发重点)+企业面试真题
8
大数据技术之_09_Hive学习_复习与总结
9
大数据技术之_07_Hadoop学习_HDFS_HA(高可用)_HA概述+HDFS-HA工作机制+HDFS-HA集群配置+YARN-HA配置+HDFS Federation(联邦) 架构设计
10
大数据技术之_08_Hive学习_01_Hive入门+Hive安装、配置和使用+Hive数据类型
11
大数据技术之_08_Hive学习_04_压缩和存储(Hive高级)+ 企业级调优(Hive优化)
12
大数据技术之_08_Hive学习_05_Hive实战之谷粒影音(ETL+TopN)+常见错误及解决方案
13
大数据技术之_08_Hive学习_02_DDL数据定义(创建/查询/修改/删除数据库+创建表+分区表+修改表+删除表)+DML数据操作(数据导入+数据导出+清除表中数据)
14
大数据技术之_08_Hive学习_03_查询+函数
15
大数据技术之_16_Scala学习_09_函数式编程-高级
16
大数据技术之_09_Flume学习_Flume概述+Flume快速入门+Flume企业开发案例+Flume监控之Ganglia+Flume高级之自定义MySQLSource+Flume企业真实面试题(
17
大数据技术之_13_Azkaban学习_Azkaban(阿兹卡班)介绍 + Azkaban 安装部署 + Azkaban 实战
18
大数据技术之_19_Spark学习_07_Spark 性能调优 + 数据倾斜调优 + 运行资源调优 + 程序开发调优 + Shuffle 调优 + GC 调优 + Spark 企业应用案例
19
大数据技术之_12_Sqoop学习_Sqoop 简介+Sqoop 原理+Sqoop 安装+Sqoop 的简单使用案例+Sqoop 一些常用命令及参数
20
大数据技术之_16_Scala学习_13_Scala语言的数据结构和算法_Scala学习之旅收官之作
21
大数据技术之_19_Spark学习_06_Spark 源码解析 + Spark 通信架构、脚本解析、standalone 模式启动、提交流程 + Spark Shuffle 过程 + Spark 内存
22
大数据技术之_16_Scala学习_04_函数式编程-基础+面向对象编程-基础
23
大数据技术之_14_Oozie学习
24
大数据技术之_26_交通状态预测项目_01
25
大数据技术之_16_Scala学习_02_变量
26
大数据技术之_16_Scala学习_07_数据结构(上)-集合
27
大数据技术之_28_电商推荐系统项目_01
28
大数据技术之_28_电商推荐系统项目_02
29
大数据技术之_18_大数据离线平台_04_数据分析 + Hive 之 hourly 分析 + 常用 Maven 仓库地址
30
大数据技术之_16_Scala学习_01_Scala 语言概述
31
大数据技术之_29_MySQL 高級面试重点串讲_02
32
大数据技术之_18_大数据离线平台_05_离线平台项目模块小结
33
大数据技术之_19_Spark学习_06_Spark 源码解析小结
34
大数据技术之_16_Scala学习_05_面向对象编程-中级
35
大数据技术之_16_Scala学习_08_数据结构(下)-集合操作+模式匹配
36
大数据技术之_24_电影推荐系统项目_05_项目系统设计
37
大数据技术之_19_Spark学习_03_Spark SQL 应用解析小结
38
大数据技术之_19_Spark学习_07_Spark 性能调优小结
39
大数据技术之_19_Spark学习_05_Spark GraphX 应用解析小结
40
大数据技术之_19_Spark学习_02_Spark Core 应用解析小结
41
大数据技术之_24_电影推荐系统项目_08_项目总结及补充
42
大数据技术之_19_Spark学习_01_Spark 基础解析小结(无图片)
43
大数据技术之_18_大数据离线平台_03_数据处理+工具代码导入+业务 ETL 实现+创建数据库表
44
大数据技术之_24_电影推荐系统项目_02_Python 基础语法复习
45
大数据技术之_24_电影推荐系统项目_06_项目体系架构设计 + 工具环境搭建 + 创建项目并初始化业务数据 + 离线推荐服务建设 + 实时推荐服务建设 + 基于内容的推荐服务建设
46
大数据技术之_27_电商平台数据分析项目_01_大数据的框架回顾 + 大数据的企业应用
47
大数据技术之_23_Python核心基础学习_03_函数 + 对象(12.5小时)
48
大数据技术之_32_大数据面试题_01_Hive 基本面试 + Hive 数据分析面试 + Flume + Kafka 面试
49
大数据技术之_23_Python核心基础学习_04_ 异常 + 文件(3.5小时)
50
大数据技术之_16_Scala学习_03_运算符+程序流程控制
清单首页hadoop文章详情

大数据技术之_19_Spark学习_06_Spark 源码解析小结

========== Spark 通信架构 ==========

1、spark 一开始使用 akka 作为网络通信框架,spark 2.X 版本以后完全抛弃 akka,而使用 netty 作为新的网络通信框架。 最主要原因:spark 对 akka 没有维护,需要 akka 更新,spark 的发展受到了 akka 的牵制,akka 版本之间无法通信,即 akka 兼容性问题。 2、RpcEnv:RPC 上下文环境,每个 Rpc 端点运行时依赖的上下文环境称之为 RpcEnv。类似于 SparkContext,默认由 NettyRpcEnv 实现,由 NettyRpcEnvFactory 创建 RpcEnv。 3、RpcEndpoint:RPC 端点,Spark 针对于每个节点(Client/Master/Worker)都称之一个 Rpc 端点且都实现 RpcEndpoint 接口,内部根据不同端点的需求,设计不同的消息和不同的业务处理,如果需要发送(询问)则调用 Dispatcher。代理是 RpcEndpointRef。 4、Dispatcher:消息分发器,针对于 RPC 端点需要发送消息或者从远程 RPC 接收到的消息,分发至对应的指令收件箱/发件箱。 5、Inbox:指令消息收件箱,一个本地端点对应一个收件箱,Dispatcher 在每次向 Inbox 存入消息时,都将对应 EndpointData 加入内部待 Receiver Queue 中。 6、OutBox:指令消息发件箱,一个远程端点对应一个发件箱,当消息放入 Outbox 后,紧接着将消息通过 TransportClient 发送出去。 7、TransportClient:Netty 通信客户端,主要负责将相对应的 OutBox 中的数据发送给远程 TransportServer。 8、TransportServer:Netty 通信服务端,主要用于接收远程 RpcEndpoint 发送过来的消息,并把消息传送给 Dispatcher。

========== Spark 脚本解析 ========== 1、start-slave.sh 用于启动 slave 节点,最终启动的类是 org.apache.spark.deploy.worker.Worker 类。 2、start-master.sh 用于启动 master 节点,最终启动的类是 org.apache.spark.deploy.master.Master 类。 3、spark-submit 和 spark-shell 最终都会调用 spark-class 脚本,通过 spark-class 脚本启动相对应的入口类。

========== Spark standalone 模式启动流程 ==========

1、Master 和 Worker 都继承了 RpcEndpoint 类,成为了具体的消息发送与接收端点,整个应用是利用 Actor 模型实现的异步消息通信架构。 2、Master 节点在启动的时候的主要任务是创建了通信架构中的 RpcEnv,并注册了 Master 成为端点。 3、Worker 节点在启动的时候的主要任务是创建了通信架构中的 RpcEnv,并注册了 Worker 成为端点,并且获取了 Master 端点的代理,通过端点代理向 Master 发送消息。 4、Worker 节点在启动的时候执行 onStar 方法,向 Master 进行了注册。

========== Spark 应用提交流程 ==========

1、Driver 提交流程:用户通过 spark-submit 将 jar 包和相对应的参数提交给 spark 框架,内部实现是通过 ClientEndpoint 向 Master 发送了 RequestSubmitDriver 消息,Master 获取消息之后通过 Worker 进行 Lau nchDriver 操作。 2、Driver 的进程启动:主要通过 Worker 节点的 DriverRunner 来启动整个的 Driver 进程。 3、注册 Application:Driver 进程在启动之后,通过 SparkContext 的初始化操作,创建了对应的 StandaloneSchedulerBackend,实现了向 Master 进行当前应用的注册。 4、启动 Executor 进程:当 Driver 向 Master 进行注册之后,Master 通过 scheduler() 方法来对当前的 App 进行 Executor 的分配,实现上是通过 Worker 的 ExecutorRunner 来进行 Executor 的创建和运行。 5、启动 Task 运行:当 Driver 收到所有的 Executor 资源后,通过 RDD 的 action 操作,触发 SparkContext.runJob 方法,进而调用 Dagscheduler() 方法进行当前 DAG 的运行。通过向 Executor 发送 LaunchTask 消息来启动 Executor 上的任务运行。 6、Task 运行完成:当 Executor 运任务完成之后,会通知 Driver 当前任务的运行状态,然后执行任务 或者退出整个应用。

========== Spark shuffle 过程 ========== MapReduce Shuffle 过程: 1、在 spill(刷写)阶段,数据直接写入到 kvbuffer 数据缓冲器中。会写两种类型的数据。一种是 kvmeta 数据,用于存放分区信息、索引信息;另一种是 (k, v) 对类型的数据,是实际的数据。 2、会以一个起点反向来写,即当遇到 spill 进程启动的时候,写入点会重新进行选择。

Hash Shuffle 过程: 1、未优化版本,每一个 task 任务都会根据 reduce 任务的个数创建对应数量的 bucket,bucket 其实就是写入缓冲区,每一个 bucket 都会存入一个文件,这个文件叫做 blockfile。最大的缺点是:产生的文件过多。 2、在优化版本中,主要通过 consolidation 这个参数进行优化,实现了 ShuffleFileGroup 的概念,不同批次的 task 任务可以复用最终写入的文件,来整体减少文件的数量。

Sort Shuffle 过程: 1、Sort Shuffle 整个过程的实现和 MapReduce Shuffle 过程类似。 2、Bypass 机制:Hash Shuffle 在 reduce 的数量比价少的时候性能要比 Sort Shuffle 要高,所以如果你的 reduce 的数量少于 Bypass 定义的数值的时候,Sort Shuffle 在 task 任务写出的时候会采用 Hash 方式,而不会采用 ApplyOnlyMap 以及排序的方法。

========== Spark 内存管理与分配 ========== 1、内存分配模式:静态分配和统一分配。静态分配就是固定大小分配,统一分配就是存储区和 Shuffle 区可以动态占用。 2、有几种内存配置模式:   (1)other 区,一般占用 20% 的内存区域,主要是用于代码运行以及相关数据的运行。   (2)Execution 区,这个区域一般占用 20% 的内存区域,主要用于 Shuffle 过程的内存消耗,通过 spark.shuffle.memeoryFaction 参数进行控制。   (3)Storage 区,这个区域主要用于 RDD 的缓存,通过 spark.storage.memeoryFaction 参数进行控制。 3、spark 目前支持堆内内存和堆外内存,堆外内存主要用于存储序列化后的二进制数据。

========== Spark 部署模式 ==========

下一篇
举报
领券