关闭

Spark学习——Job的提交和运行

标签: spark环境搭建运行
977人阅读 评论(0) 收藏 举报
分类:

Spark学习——Job的提交和运行

本篇文章主要解决的问题
1.Spark实验环境搭建流程
2.Spark中job生成和运行的具体步骤
3.Spark布置环境中组件构成分成哪几个部分


本文以wordCount为例,详细说明spark创建和运行job的过程,重点是在进程及线程的创建。


**

实验环境搭建

**
在进行后续操作前,确保下列条件已满足。
下载spark binary
安装scala
安装sbt
安装java

启动spark-shell
单机模式运行,即local模式
local模式运行非常简单,只要运行以下命令即可,假设当前目录是$SPARK_HOME


MASTER=local bin/spark-shell

“MASTER=local”就是表明当前运行在单机模式


local cluster方式运行
local cluster模式是一种伪cluster模式,在单机环境下模拟standalone的集群,启动顺序分别如下
1.启动master
2.启动worker
3.启动spark-shell


$SPARK_HOME/sbin/start-master.sh

修改配置
1.进入$SPARK_HOME/conf目录
2.将spark-env.sh.template重命名为spark-env.sh
3.修改spark-env.sh,添加如下内容

export SPARK_MASTER_IP=localhostexport SPARK_LOCAL_IP=localhost

运行worker

bin/spark-class org.apache.spark.deploy.worker.Worker spark://localhost:7077 -i 127.0.0.1  -c 1 -m 512M

worker启动完成,连接到master。打开maser的web ui可以看到连接上来的worker. Master WEb UI的监听地址是http://localhost:8080

启动spark-shell

MASTER=spark://localhost:7077 bin/spark-shell

如果一切顺利,将看到下面的提示信息。
Created spark context..Spark context available as sc.

可以用浏览器打开localhost:4040来查看如下内容
1.stages
2storage
3.environment
4.executors


wordcount

上述环境准备妥当之后,我们在sparkshell中运行一下最简单的例子,在spark-shell中输入如下代码

scala>sc.textFile("README.md").filter(_.contains("Spark")).count

上述代码统计在README.md中含有Spark的行数有多少


**

部署过程详解

**
Spark布置环境中组件构成如下图所示。

这里写图片描述

1.Driver Program 简要来说在spark-shell中输入的wordcount语句对应于上图的Driver Program.
2.Cluster Manager 就是对应于上面提到的master,主要起到deploy management的作用
3.Worker Node 与Master相比,这是slave node。上面运行各个executor,executor可以对应于线程。executor处理两种基本的业务逻辑,一种就是driver programme,另一种就是job在提交之后拆分成各个stage,每个stage可以运行一到多个task

Notes: 在集群(cluster)方式下, Cluster Manager运行在一个jvm进程之中,而worker运行在另一个jvm进程中。在local cluster中,这些jvm进程都在同一台机器中,如果是真正的standalone或Mesos及Yarn集群,worker与master或分布于不同的主机之上。

JOB的生成和运行
job生成的简单流程如下
1.首先应用程序创建SparkContext的实例,如实例为sc
2.利用SparkContext的实例来创建生成RDD
3.经过一连串的transformation操作,原始的RDD转换成为其它类型的RDD
4.当action作用于转换之后RDD时,会调用SparkContext的runJob方法
5.sc.runJob的调用是后面一连串反应的起点,关键性的跃变就发生在此处

调用路径大致如下
1.sc.runJob->dagScheduler.runJob->submitJob
2.DAGScheduler::submitJob会创建JobSummitted的event发送给内嵌类eventProcessActor
3.eventProcessActor在接收到JobSubmmitted之后调用processEvent处理函数
4.job到stage的转换,生成finalStage并提交运行,关键是调用submitStage
5.在submitStage中会计算stage之间的依赖关系,依赖关系分为宽依赖和窄依赖两种
6.如果计算中发现当前的stage没有任何依赖或者所有的依赖都已经准备完毕,则提交task
7.提交task是调用函数submitMissingTasks来完成
8.task真正运行在哪个worker上面是由TaskScheduler来管理,也就是上面的submitMissingTasks会调用TaskScheduler::submitTasks
9.TaskSchedulerImpl中会根据Spark的当前运行模式来创建相应的backend,如果是在单机运行则创建LocalBackend
10.LocalBackend收到TaskSchedulerImpl传递进来的ReceiveOffers事件
11.receiveOffers->executor.launchTask->TaskRunner.run

说了这么一大通,也就是讲最终的逻辑处理切切实实是发生在TaskRunner这么一个executor之内。
运算结果是包装成为MapStatus然后通过一系列的内部消息传递,反馈到DAGScheduler,这一个消息传递路径不是过于复杂

0
0
查看评论

Spark如何在一个SparkContext中提交多个任务

在使用spark处理数据的时候,大多数都是提交一个job执行,然后job内部会根据具体的任务,生成task任务,运行在多个进程中,比如读取的HDFS文件的数据,spark会加载所有的数据,然后根据block个数生成task数目,多个task运行中不同的进程中,是并行的,如果在同一个进程中一个JVM里...
  • u010454030
  • u010454030
  • 2017-07-04 19:23
  • 2309

spark job提交过程

Driver的任务提交过程 1、Driver程序的代码运行到action操作,触发了SparkContext的runJob方法。 2、SparkContext调用DAGScheduler的runJob函数。 3、DAGScheduler把Job划分stage,然后把stage转化为相应的Tas...
  • liu812769634
  • liu812769634
  • 2016-11-09 17:28
  • 2033

Spark源码分析之一:Job提交运行总流程概述

我们知道,spark是一个基于内存的分布式计算框架。运行在其上的应用程序,按照action划分为一个个job,而job提交运行的总流程,概括起来如下:         1、Stage划分与TaskSet生成:job按照rdd之间的依赖关系是否为宽依赖,由DAG...
  • lipeng_bigdata
  • lipeng_bigdata
  • 2016-02-14 22:28
  • 3686

Spark的job触发流程原理与stage划分算法分析

Spark的application中有多个action操作,每个action操作都会触发RDD的runJob操作,每个job以action操作为界限,而RDD的runJob则在SparkContext的runJob中调用,SparkContext的runJob底层会调用dagScheduler的ru...
  • kongshuchen
  • kongshuchen
  • 2016-07-26 15:28
  • 1895

Spark基本概念与执行流程

Spark的基本概念与执行流程
  • u011317245
  • u011317245
  • 2016-09-03 15:41
  • 1885

spark的任务执行流程解析

当我们没有运行任何程序,Master是管理资源,主要是内存和CPU,还有就是接收客户端发送的程序,并注册。 worker节点只有worker进程,负责当前节点的内存和cpu的使用,spark是主从结构式架构。 运行作业的方式有很多,最I简单的是就是spark-shell ,程序的ID是向master...
  • LongHai_Zheng
  • LongHai_Zheng
  • 2016-08-18 10:21
  • 3526

Spark job 的执行流程简介

Spark 应用程序在提交执行后,控制台会打印很多日志信息,这些信息看起来是杂乱无章的,但是却在一定程度上体现了一个被提交的 Spark job 在集群中是如何被调度执行的,这里将会向大家介绍一个典型的 Spark job 是如何被调度执行的。 我们先来了解以下几个概念: DAG: 即 Dire...
  • haohaixingyun
  • haohaixingyun
  • 2016-10-10 12:39
  • 309

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

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

spark源码学习(三):job的提交以及runJob函数的分析

spark源码学习:sparkContext的初始化分析(三)        上一篇仅仅谈及了taskScheduler和schedulerBackend相关的代码。这篇blog记录一下和DAGScheduled相关的代码。DAGScheduled是底层...
  • liyaohhh
  • liyaohhh
  • 2016-02-25 20:43
  • 1534

spark学习二 job是怎么提交的

实验环境搭建 在进行后续操作前,确保下列条件已满足。 下载spark binary 0.9.1安装scala安装sbt安装java 启动spark-shell 单机模式运行,即local模式 local模式运行非常简单,只要运行以下命令即可,假设当前目录是$SPARK_...
  • hao707822882
  • hao707822882
  • 2014-07-22 11:06
  • 1036
    个人资料
    • 访问:163112次
    • 积分:3160
    • 等级:
    • 排名:第12927名
    • 原创:144篇
    • 转载:9篇
    • 译文:0篇
    • 评论:16条
    博客专栏
    Spark

    文章:16篇

    阅读:33846