Spark架构及运行机制(3) - 应用初始化

将每一个应用程序提交到Spark环境中运行时,都需要先完成一个应用初始化过程,其主要工作是进行配置加载和作业初始化,最终创建出SparkContext实例。触发Spark应用初始化有2中情况:

(1)使用spark-shell执行Spark程序

在spark-shell交互式环境启动时,就会自动为用户完成Spark的配置工作,并自动创建SparkContext来连接Spark集群,在我们看见spark-shell的命令行出入窗口时,即已经完成应用初始化过程。

(2)使用spark-submit提交Spark程序的方式。

用户可以将应用程序打包成JAR包,然后通过配置好的spark-submit脚本将应用程序提交给Spark集群处理。下面是一个运行在YARN集群上的一个spark-submit脚本的示例:
./bin/spark-submit --master yarn-cluster --class wordcount --deploy-mode client \
--name wordcount --executor-memory 1g --executor-cores 1 \
...\     #其他参数
/home/wordcount.jar \    #程序jar包地址
/user/input/Readme.txt \    #程序参数
/user/output \

以上脚本的主要参数如下:
1.master:指明集群中的master节点;
2.class:用户的应用程序大多使用Scala或Java语言编写,在一个应用程序的Jar包中包含多个类文件,class指明了应用程序的入口;
3.deploy-mode:指明Driver节点运行的地点,可以选择在用户的客户端电脑上运行Driver节点,也可以将Driver节点运行在集群中的一个节点上;
4.name:指定应用程序的名称
5.executor-memory:指明需要配置Executor的内存大小,Spark对于RDD的操作都是基于内存的,因此Executor的内存大小设置直接影响到性能;
6.executor-cores:指定Executor使用的服务器的CPU内核数目,在YARN模式下,通过executor-cores指定Executor使用的内核数,在Mesos模式下,使用total-executor-cores指定所有Executor使用的内核总数;

    spark-submit脚本可以设置的参数还有很多,通过spark-submit脚本,用户将应用程序提交给了Spark集群,Spark集群会根据spark-submit脚本中的deploy-mode设定选取一台主机运行Driver程序。Driver程序根据class设定的程序入口进入应用程序。
    每个应用程序入口类的主函数内都会包含一个SparkContext实例,SparkContext是整个应用程序连接集群的接口,它主要负责的工作有:

1)接受SparkConf参数
    在SparkContext初始化时,Spark运行环境会将SparkConf相关的配置参数传递给SparkContext,用于配置应用运行时的属性,例如:要连接的master节点,应用程序的名称,sparkHome,环境变量等。
    需要注意的是,SparkConf和spark-submit中的参数都可以设置应用运行时参数,但是SparkConf的优先级要高于spark-submit。

2)创建SparkEnv运行环境
    Spark的运行离不开一些重要的管理模块,像BlockManager、CacheManager等,SparkEnv根据之前设置的集群参数创建这些管理模块;

3)资源申请
    整个应用程序通过SparkContext与集群连接,并向Spark集群资源管理器(Cluster Manager)申请运行Executor资源,一旦资源申请成功,每个应用程序就会获得分布在不同节点上的Executor资源,SparkContext将应用程序发送给各个Executor,由Executor实际完成应用程序的计算任务;

4)创建SparkUI
    Spark为每个应用程序都提供一个单独的web UI管理界面。

5)创建TaskSchedule
    TaskSchedule的初始化会根据Spark运行模式的不同而不同。初始化启动后,TaskSchedule负责每个任务的实际物理调度;

6)创建DAGSchedule
    DAGSchedule根据创建的TaskSchedule进行创建,DAGSchedule负责接受提交的计算任务,同时负责任务的逻辑调度;

7)提供函数方法
    SparkContext提供了多个重要的函数方法以操作数据,例如前面用到的textFile方法;


一旦SparkContext创建成功,即完成了Spark应用的初始化,此时,就可以通过访问Driver节点的4040端口查看该应用程序的状态。

猜你喜欢

转载自margaret0071.iteye.com/blog/2387087