Spark修炼之道(进阶篇)——Spark入门到精通:第七节 Spark运行原理

原创 2015年09月22日 19:54:01

作者:周志湖
网名:摇摆少年梦
微信号:zhouzhihubeyond

本节主要内容

  1. Spark运行方式
  2. Spark运行原理解析

本节内容及部分图片来自:
http://blog.csdn.net/book_mmicky/article/details/25714419
http://blog.csdn.net/yirenboy/article/details/47441465
这两篇文件对Spark的运行架构原理进行了比较深入的讲解,写得非常好,建议大家认真看一下,在此向作者致敬!

1. Spark运行方式

用户编写完Spark应用程序之后,需要将应用程序提交到集群中运行,提交时使用脚本spark-submit进行,spark-submit可以带多种参数,参数选项可以通过下列命令查看

root@sparkmaster:/hadoopLearning/spark-1.5.0-bin-hadoop2.4/bin# ./spark-submit --help

这里写图片描述

可以看到,spark-submit提交参数如下:

./bin/spark-submit \
  --class <main-class>
  --master <master-url> \
  --deploy-mode <deploy-mode> \
  --conf <key>=<value> \
  ... # other options
  <application-jar> \
  [application-arguments]

下面介绍几种常用Spark应用程序提交方式:

(1)本地运行方式 –master local

//--master local,本地运行方式。读取文件可以采用本地文件系统也可采用HDFS,这里给出的例子是采用本地文件系统
//从本地文件系统读取文件file:/hadoopLearning/spark-1.5.0-bin-hadoop2.4/README.md
//生成的结果也保存到本地文件系统:file:/SparkWordCountResult
root@sparkmaster:/hadoopLearning/spark-1.5.0-bin-hadoop2.4/bin# ./spark-submit --master local 
--class SparkWordCount --executor-memory 1g 
/root/IdeaProjects/SparkWordCount/out/artifacts/SparkWordCount_jar/SparkWordCount.jar 
file:/hadoopLearning/spark-1.5.0-bin-hadoop2.4/README.md 
file:/SparkWordCountResult

这里写图片描述

(2)Standalone运行方式 –master spark://sparkmaster:7077

采用Spark自带的资源管理器进行集群资源管理

//standalone运行,指定--master spark://sparkmaster:7077
//采用本地文件系统,也可采用HDFS
//没有指定deploy-mode,默认为client deploy mode
root@sparkmaster:/hadoopLearning/spark-1.5.0-bin-hadoop2.4/bin# 
./spark-submit --master spark://sparkmaster:7077 
--class SparkWordCount --executor-memory 1g 
/root/IdeaProjects/SparkWordCount/out/artifacts/SparkWordCount_jar/SparkWordCount.jar 
file:/hadoopLearning/spark-1.5.0-bin-hadoop2.4/README.md 
file:/SparkWordCountResult2

这里写图片描述
图片来源:http://blog.csdn.net/book_mmicky/article/details/25714419

在执行过程中,可以通过http://192.168.1.103:4040查看任务状态,192.168.1.103为sparkmaster IP地址:
这里写图片描述

也可以指定为cluster deploy mode,例如:

root@sparkmaster:/hadoopLearning/spark-1.5.0-bin-hadoop2.4/bin# ./spark-submit 
--master spark://sparkmaster:7077 
--deploy-mode cluster
--supervise --class SparkWordCount --executor-memory 1g 
/root/IdeaProjects/SparkWordCount/out/artifacts/SparkWordCount_jar/SparkWordCount.jar 
 file:/hadoopLearning/spark-1.5.0-bin-hadoop2.4/README.md 
 file:/SparkWordCountResult3

与 clinet deploy mode不同的是 cluster deploy mode中的SparkContext在集群内部创建。

(3)Yarn运行方式

采用Yarn作为底层资源管理器

//Yarn Cluster
root@sparkmaster:/hadoopLearning/spark-1.5.0-bin-hadoop2.4/bin# 
./spark-submit --master yarn-cluster 
--class org.apache.spark.examples.SparkPi 
--executor-memory 1g 
/root/IdeaProjects/SparkWordCount/out/artifacts/SparkWordCount_jar/SparkWordCount.jar

这里写图片描述
图片来源:http://blog.csdn.net/yirenboy/article/details/47441465

//Yarn Client
root@sparkmaster:/hadoopLearning/spark-1.5.0-bin-hadoop2.4/bin# 
./spark-submit --master yarn-client  
--class org.apache.spark.examples.SparkPi 
--executor-memory 1g 
/root/IdeaProjects/SparkWordCount/out/artifacts/SparkWordCount_jar/SparkWordCount.jar

这里写图片描述
图片来源:http://blog.csdn.net/yirenboy/article/details/47441465

//Yarn Client运行效果图
这里写图片描述

2. Spark运行原理解析

(1)窄依赖与宽依赖

在前面讲的Spark编程模型当中,我们对RDD中的常用transformation与action 函数进行了讲解,我们提到RDD经过transformation操作后会生成新的RDD,前一个RDD与tranformation操作后的RDD构成了lineage关系,也即后一个RDD与前一个RDD存在一定的依赖关系,根据tranformation操作后RDD与父RDD中的分区对应关系,可以将依赖分为两种:宽依赖(wide dependency)和窄依赖(narrow dependency),如下图所示:

这里写图片描述

图中的实线空心矩形代表一个RDD,实线空心矩形中的带阴影的小矩形表示分区(partition)。从上图中可以看到, map,filter、union等transformation操作后的RDD仅依赖于父RDD的固定分区,它们是窄依赖的;而groupByKey后的RDD的分区与父RDD所有的分区都有依赖关系,此时它们就是宽依赖的。join操作存在两种情况,如果分区仅仅依赖于父RDD的某一分区,则是窄依赖的,否则就是宽依赖。

(2)Spark job运行原理

spark-submit提交Spark应用程序后,其执行流程如下:
1 创建SparkContext对象,然后SparkContext会向Clutser Manager(集群资源管理器),例如Yarn、Standalone、Mesos等申请资源
2 资源管理器在worker node上创建executor并分配资源(CPU、内存等),后期excutor会定时向资源管理器发送心跳信息
3 SparkContext启动DAGScheduler,将提交的作业(job)转换成若干Stage,各Stage构成DAG(Directed Acyclic Graph有向无环图),各个Stage包含若干相task,这些task的集合被称为TaskSet
4 TaskSet发送给TaskSet Scheduler,TaskSet Scheduler将Task发送给对应的Executor,同时SparkContext将应用程序代码发送到Executor,从而启动任务的执行
5 Executor执行Task,完成后释放相应的资源。

下图给出了DAGScheduler的工作原理:

这里写图片描述

当RDDG触发相应的action操作(如collect)后,DAGScheduler会根据程序中的transformation类型构造相应的DAG并生成相应的stage,所有窄依赖构成一个stage,而单个宽依赖会生成相应的stage。上图中的黑色矩形表示这些RDD被缓存过,因此上图中的只需要计算stage2、 stage3即可

前面我们提到各Stage由若干个task组成,这些task构建taskset,最终交给Task Scheduler进行调度,最终将task发送到executor上执行,如下图所示 。

这里写图片描述

(3)spark-Shell jobs调度演示

在spark-master上,启动spark-shell

root@sparkmaster:/hadoopLearning/spark-1.5.0-bin-hadoop2.4/bin# 
./spark-shell --master spark://sparkmaster:7077 
--executor-memory 1g

打开浏览器,输入: http://sparkmaster:4040/,并点击executors,可以查看集群中所有的executor,如下图所示
这里写图片描述
从图中可以看到sparkmaster除了是一个executor之外,它还是一个driver即(standalone clinet模式)

val rdd1= sc.textFile("/README.md")
.flatMap(line => line.split(" "))
.map(word => (word, 1))
.groupByKey().reduceByKey((a,b)=>a+b)

这里写图片描述

点击stage 1 对应的的map,查看该stage中对应的task信息及在对应的executor上的执行情况:
这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。

Spark(一): 基本架构及原理

Apache Spark是一个围绕速度、易用性和复杂分析构建的大数据处理框架,最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项目之一,与Hadoop和St...
  • swing2008
  • swing2008
  • 2017年03月08日 11:26
  • 8598

Spark运行原理和RDD解密

1.实战解析Spark运行原理 交互式查询(shell,sql) 批处理(机器学习,图计算) 首先,spark是基于内存的分布式高效计算框架,采用一栈式管理机制,同时支持流处理,实时交互式出,批...
  • sundujing
  • sundujing
  • 2016年05月06日 11:22
  • 2241

Spark 的运行流程原理

## Spark Worker工作机制 ## 一、worker 进程的启动 1、Driver 与Executor 的启动过程 二、Worker 启动Driver 1、Cluster 中...
  • LongHai_Zheng
  • LongHai_Zheng
  • 2016年08月21日 15:30
  • 1029

spark原理介绍

1、spark是一个基于内存计算的开源的集群计算系统,目的是让数据分析更加快速。因此运行spark的机器应该尽量的大内存,如96G以上。 2、spark所有操作均基于RDD,操作主要分成2大类:tr...
  • jediael_lu
  • jediael_lu
  • 2015年04月28日 12:33
  • 14701

Spark 学习: spark 原理简述与 shuffle 过程介绍

Spark学习: 简述总结 Spark 是使用 scala 实现的基于内存计算的大数据开源集群计算环境.提供了 java,scala, python,R 等语言的调用接口. Spark学习 简述总...
  • databatman
  • databatman
  • 2016年11月03日 17:55
  • 13336

Spark的基本概念及工作原理

Spark作业: -Application:用户自定义的Spark程序,用户提交后,Spark为App分配资源将程序转换并执行。 -Driver Program:运行Application的main(...
  • u013063153
  • u013063153
  • 2016年11月11日 10:35
  • 585

Spark on Yarn的运行原理

一、YARN是集群的资源管理系统 1、ResourceManager:负责整个集群的资源管理和分配。 2、ApplicationMaster:YARN中每个Application对应一个AM进程,负责...
  • u013573813
  • u013573813
  • 2017年04月09日 17:52
  • 1429

2.1 Spark基本原理以及核心概念

2.1 Spark基本原理以及核心概念 2.1.1 Spark基本工作原理 1. Client客户端:我们在本地编写了spark程序,打成jar包,或python脚本,通过spark su...
  • ap0810217
  • ap0810217
  • 2017年02月15日 14:33
  • 2636

Spark集群Job,Task 的具体运行原理

一:Spark集群部署 二:Job提交解密 三:Job生成和接受 四:Task的运行 五:再论shuffle1,从spark Runtime 的角度讲来讲有5大核心对象:Master , Wo...
  • erfucun
  • erfucun
  • 2016年07月14日 21:54
  • 1171

Spark 工作原理及核心RDD 详解

一、Spark 是什么   Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用分布式并行计算框架。Spark拥有Hadoop MapReduce所具有的...
  • u010330043
  • u010330043
  • 2016年08月23日 20:43
  • 9439
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spark修炼之道(进阶篇)——Spark入门到精通:第七节 Spark运行原理
举报原因:
原因补充:

(最多只允许输入30个字)