【云小课】EI第32课 MRS基础原理之Spark组件介绍
Spark是基于内存的分布式计算框架。在迭代计算的场景下,数据处理过程中的数据可以存储在内存中,提供了比MapReduce高10到100倍的计算能力。Spark可以使用HDFS作为底层存储,使用户能够快速地从MapReduce切换到Spark计算平台上去。Spark提供一站式数据分析能力,包括小批量流式处理、离线批处理、SQL查询、数据挖掘等,用户可以在同一个应用中无缝结合使用这些能力。
Spark结构
Spark的架构如下图所示:
模块 |
说明 |
Cluster Manager |
集群管理器,管理集群中的资源。Spark支持多种集群管理器,Spark自带的Standalone集群管理器、Mesos或YARN。Spark集群默认采用YARN模式。 |
Application |
Spark应用,由一个Driver Program和多个Executor组成。 |
Deploy Mode |
部署模式,分为cluster和client模式。cluster模式下,Driver会在集群内的节点运行;而在client模式下,Driver在客户端运行(集群外)。 |
Driver Program |
是Spark应用程序的主进程,运行Application的main()函数并创建SparkContext。负责应用程序的解析、生成Stage并调度Task到Executor上。通常SparkContext代表Driver Program。 |
Executor |
在Work Node上启动的进程,用来执行Task,管理并处理应用中使用到的数据。一个Spark应用一般包含多个Executor,每个Executor接收Driver的命令,并执行一到多个Task。 |
Worker Node |
集群中负责启动并管理Executor以及资源的节点。 |
Job |
一个Action算子(比如collect算子)对应一个Job,由并行计算的多个Task组成。 |
Stage |
每个Job由多个Stage组成,每个Stage是一个Task集合,由DAG分割而成。 |
Task |
承载业务逻辑的运算单元,是Spark平台中可执行的最小工作单元。一个应用根据执行计划以及计算量分为多个Task。 |
Spark原理
Spark的应用运行架构如下图所示,运行流程如下所示:
- 应用程序(Application)是作为一个进程的集合运行在集群上的,由Driver进行协调。
- 在运行一个应用时,Driver会去连接集群管理器(Standalone、Mesos、YARN)申请运行Executor资源,并启动ExecutorBackend。然后由集群管理器在不同的应用之间调度资源。Driver同时会启动应用程序DAG调度、Stage划分、Task生成。
- 然后Spark会把应用的代码发送到Executor上。
- 所有的Task执行完成后,用户的应用程序运行结束。
Spark采用Master和worker的模式,用户在Spark客户端提交应用程序,调度器将Job分解为多个Task发送到各个Worker中执行,各个Worker将计算的结果上报给Driver(即Master),Driver聚合结果返回给客户端。
在此结构中,有几个说明点:
- 应用之间是独立的。每个应用有自己的executor进程,Executor启动多个线程,并行地执行任务。无论是在调度方面,或者是executor方面。各个Driver独立调度自己的任务;不同的应用任务运行在不同的JVM上,即不同的Executor。
- 不同Spark应用之间是不共享数据的,除非把数据存储在外部的存储系统上(比如HDFS)。
- 因为Driver程序在集群上调度任务,所以Driver程序最好和worker节点比较近,比如在一个相同的局部网络内。
Spark on YARN有两种部署模式:
- YARN-Cluster模式下,Spark的Driver会运行在YARN集群内的ApplicationMaster进程中,ApplicationMaster已经启动之后,提交任务的客户端退出也不会影响任务的运行。
- YRAN-Client模式下,Driver启动在客户端进程内,ApplicationMaster进程只用来向YARN集群申请资源。
运行SparkSubmit作业
在MRS集群中,您可以通过管理控制台、客户端命令等多种方式运行SparkSubmit作业的操作。
MRS集群的创建您可参考创建集群。
通过界面提交作业
在MRS管理控制台,点击集群名称进入到MRS集群详情页面,单击“作业管理”,进入“作业管理”页签。
在作业管理页面,即可新增SparkSubmit作业,作业新增完成后,可对作业进行管理。
通过后台提交作业
- 登录MRS集群的FusionInsight Manager页面(如果没有弹性IP,需提前购买弹性IP),新建一个用户sparktest,绑定用户组hadoop、supergroup,绑定主组Supergroup、绑定角色System_administrator、default。
- 在Manager页面选择“系统 > 用户”,在新增用户的操作列单击“更多 > 下载认证凭据”。
- 将与作业相关的jar包上传到集群中,本示例使用Spark自带的样例jar包,位置在“$SPARK_HOME/examples/jars/”下。
- 上传创建的用户认证凭据到集群的“/opt”目录下,并执行如下命令解压:
tar -xvf sparktest _xxxxxx_keytab.tar
- 登录集群客户端所在的节点,执行以下命令提交作业:
source /opt/client/bigdata_env cd $SPARK_HOME ./bin/spark-submit --master yarn --deploy-mode client --conf spark.yarn.principal=sparktest --conf spark.yarn.keytab=/opt/user.keytab --class org.apache.spark.examples.SparkPi examples/jars/spark-examples_2.11-3.1.1-hw-ei-302002.jar
运行SparkSql作业
在MRS集群中,您可以通过管理控制台、客户端命令等多种方式运行SparkSql作业的操作。
MRS集群的创建您可参考创建集群。
通过界面提交作业
在MRS管理控制台,点击集群名称进入到MRS集群详情页面,单击“作业管理”,进入“作业管理”页签。
在作业管理页面,即可新增SparkSql作业,作业新增完成后,可对作业进行管理。
通过后台提交作业
- 登录MRS集群的FusionInsight Manager页面(如果没有弹性IP,需提前购买弹性IP),新建一个用户sparktest,绑定用户组hadoop、supergroup,绑定主组Supergroup、绑定角色System_administrator、default。
- 在Manager页面选择“系统 > 用户”,在新增用户的操作列单击“更多 > 下载认证凭据”。
- 将与作业相关的jar包上传到集群中,本示例使用Spark自带的样例jar包,位置在“$SPARK_HOME/examples/jars/”下。
- 上传创建的用户认证凭据到集群的“/opt”目录下,并执行如下命令解压:
tar -xvf sparktest _xxxxxx_keytab.tar
- 在对集群操作之前首先需要执行:
source /opt/client/bigdata_env cd $SPARK_HOME
- 打开spark-sql命令行,进入spark-sql命令行后可执行SQL语句,执行命令如下:
./bin/spark-sql --conf spark.yarn.principal=sparktest --conf spark.yarn.keytab=/opt/user.keytab
- 若需要执行SQL文件,需要上传SQL文件(如上传到“/opt/”目录),上传文件后执行命令如下:
./bin/spark-sql --conf spark.yarn.principal=sparktest --conf spark.yarn.keytab=/opt/user.keytab -f /opt/script.sql
关于Spark应用开发及更多相关样例代码介绍,请参考《Spark开发指南》。
好了,本期云小课就介绍到这里,快去体验MapReduce(MRS)更多功能吧!猛戳这里
- 点赞
- 收藏
- 关注作者
评论(0)