:分布式代码执行分析

Posted 黑马程序员官方

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了:分布式代码执行分析相关的知识,希望对你有一定的参考价值。

Spark是大数据体系的明星产品,是一款高性能的分布式内存迭代计算框架,可以处理海量规模的数据。下面就带大家来学习今天的内容!

  往期内容:


一、Spark集群角色回顾(YARN)

当Spark Application运行在集群上时,主要有四个部分组成,如下示意图:

1)、 Master(ResourceManager): 集群大管家, 整个 集群的资源管理和分配;

2)、 Worker(NodeManager): 单个机器的管家,负责 在单个服务器上提供运行容器,管理当前机器的资源;

3)、 Driver: 单个Spark任务的管理者,管理Executor 的任务执行和任务分解分配, 类似YARN的 ApplicationMaster;

4)、 Executor: 具体干活的进程, Spark的工作任务 (Task)都由Executor来负责执行;

二、分布式代码执行分析

Spark Application应用程序运行时,无论client还是cluster部署模式DeployMode,当Driver Program和Executors 启动完成以后,就要开始执行应用程序中MAIN函数的代码,以词频统计WordCount程序为例剖析讲解。

第一、构建SparkContex对象和关闭SparkContext资源,都是在Driver Program中执行,上图中①和③都是,如 下图所示:

第二、上图中②的加载数据【A】、处理数据【B】和输出数据【C】代码,都在Executors上执行,从WEB UI监控 页面可以看到此Job ( RDD#action触发一个Job)对应DAG图,如下所示:

所以对于刚刚的WordCount代码,简单分析后得知:

  • SparkContext对象的构建 以及 Spark程序的退出, 由 Driver 负责执行
  • 具体的数据处理步骤, 由Executor在执行.

其实简单来说就是:

  • 非数据处理的部分由Driver工作
  • 数据处理的部分(干活)由Executor工作

要知道: Executor不仅仅是一个, 视集群规模,Executor的数量可以是很多的。那么在这里一定要有一个概念: 代码中的数据处理部分,是由非常多的服务器(Executor)执行的,这也是分布式代码执行的概念。

三、Python On Spark 执行原理

PySpark宗旨是在不破坏Spark已有的运行时架构,在Spark架构外层包装一层Python API,借助Py4j实现Python和 Java的交互,进而实现通过Python编写Spark应用程序,其运行时架构如下图所示。

[扩展阅读]Python的OS模块

os模块的用途很多,主要有2种用途

1. 获取系统的各种环境变量

2. 在代码中临时指定环境变量, 如

import os

os.environ[‘JAVA_HOME’] = /xxx/xxx/xxx

既可以在当前Python代码中临时修改环境变量

以上是关于:分布式代码执行分析的主要内容,如果未能解决你的问题,请参考以下文章

结对编程队友代码分析

js代码嵌套问题,为啥外层定义的变量内层不能使用

某元素基态原子的最外层电子排布式为 ns2

CVE-2021-25646Apache Druid 远程代码执行漏洞复现

从系统的角度分析影响程序执行性能的因素

Android 插件化VirtualApp 源码分析 ( 目前的 API 现状 | 安装应用源码分析 | 安装按钮执行的操作 | 返回到 HomeActivity 执行的操作 )(代码片段