spark快速入门(三)-------spark部署及运行模式
spark支持多种部署方案,包括spark自带的standalone资源调度模式(StandAlone);运行在hadoop的yarn资源调度框架中(SparkOnYARN);local本地模式;可以运行在Mesos资源调度框架上;还可以运行在k8s(Kubernetes)上。今天对前三个(standalone、sparkonyarn、local进行阐述)local模式1)运行在本地,利用本地资源
spark支持多种部署方案,包括spark自带的standalone资源调度模式(StandAlone);运行在hadoop的yarn资源调度框架中(SparkOnYARN);local本地模式;可以运行在Mesos资源调度框架上;还可以运行在k8s(Kubernetes)上。今天对前三个(standalone、sparkonyarn、local进行阐述)
local模式
1)运行在本地,利用本地资源进行计算
2)一般进行测试时会使用本地模式
3)使用方式
I:使用idea 代码中设置master为locak[*]
II:集群中提交任务时 不添加参数 --master 即为本地模式
StandAlone模式
StandAlone模式,又分为client模式和集群模式
1)client模式:特点:Driver是在SparkSubmit进程中
2)cluster模式:特点:Driver运行在集群当中,不在SparkSubmit进程当中,需要将jar包上传到hdfs中,此模式细节和sparkonyarn的集群模式差不多,在sparkonyarn中阐述。
Spark On YARN模式
1)经常使用,以后开发中经常用到的。
2)也分为client模式和cluster模式。
3)主要角色:
- ResourceManger(RM)全局的资源管理器,负责整个系统的资源管理和分配,由调度器(ResourceScheduler)和应用管理器(Applications Manger,ASM)组成。调度器:调度器根据容量,队列等限制条件,将系统中的资源分配给各个正在运行的应用程序.调度器不参与任何应用程序的具体工作,仅根据应用程序的资源需求进行资源分配.调度器是个可拔插的组件,用户可根据自己的需要设计新的调度器;应用程序管理器:负责整个系统中所有应用程序,包括应用程序的提交,与调度器协商资源以启动ApplicationMaster(AM),监控AM运行状态并在失败时重启它
- ApplicationMaster(AM) 用户提交的每一个应用程序均包含一个AM :I.与RM调度器协商以获取资源 II.将得到的资源进一步分配给内部的任务III.与NodeManager(NM)通信,以启动\停止任务 IV.监控所有任务运行状态,并在任务运行失败时重新为任务申请资源以重启任务
- NodeManager(NM) NM是每个节点上的资源和任务管理器.一方面,它会定时的向RM汇报本节点上的资源使用情况和各个Container的运行状态;另一方面,它接收并处理来自AM的Container启动\停止等请求Container
4)经常用到的是spark on yarn 中的cluster集群模式 是为重点******
运行流程:
流程解析:
(1)启动sparksubmit进程
(2)解析参数 比如 在集群中设置的--master 等
(3)解析后经过一系列反射、调用方法等创建rmClient(就是跟ResourceManager进行通信的代理对象)
(4)client向resourcemanager申请资源,rm返回给client一个application id
(5)client向hdfs上 上传spark jars下面的jar包、自己写的程序jar、和配置
(6)resourcemanager随机找一个资源充足的nodemanager
(7)然后通过rpc通信,让nodemanager从hdfs上下载jar包和配置,启动ApplicationMaster
(8)ApplicationMaster向resourcemanager申请资源
(9)resourcemanager中的resourceschedule找到符合条件的nodemanager,将nodemanager的信息返回给ApplicationMaster
(10)ApplicationMaster跟返回的NodeManger进行通信
(11)NodeManager从hdfs上下载依赖和jar包
(12)nodemanager启动executor
(13)executor启动之后向ApplicationMaster(Driver)反向注册
(14)Driver端的代码经过一系列transfomation,遇到action形成一个DAG,DAGschedule按照依赖关系 切分stage,生成task,最后调度到executor中的线程池进行执行。
5)spark on yarn client模式
- 客户端提交一个Application,在客户端启动一个Driver进程。
- Driver进程会向ResourceManager发送请求,启动ApplicationMaster的资源。
- ResourceManager收到请求,随机选择一台NodeManager,然后该NodeManager到HDFS下载jar包和配置,接着启动ApplicationMaster【ExecutorLuacher】。这里的NodeManager相当于Standalone中的Worker节点。
- ApplicationMaster启动后,会向ResourceManager请求一批container资源,用于启动Executor.
- ResourceManager会找到一批符合条件NodeManager返回给ApplicationMaster,用于启动Executor。
- ApplicationMaster会向NodeManager发送请求,NodeManager到HDFS下载jar包和配置,然后启动Executor。
- Executor启动后,会反向注册给Driver,Driver发送task到Executor,执行情况和结果返回给Driver端
spark on yarn 配置及提交任务
配置hadoop
需要在/etc/profile中配置HADOOP_CONF_DIR的目录,目的是为了让Spark找到core-site.xml、hdfs-site.xml和yarn-site.xml【让spark知道NameNode、ResourceManager】
关闭内存资源检测
修改yarn-site.xml
修改capacity-scheduler.xml
配置一个yarn的container可以使用多个vcores,因为capacity schedule使用的是DefaultResourceCalculator,那么DefaultResourceCalculator它在加载Container时其实仅仅只会考虑内存而不考虑vcores,默认vcore就是1。yarn 默认情况下,只根据内存调度资源,所以 spark on yarn 运行的时候,即使通过--executor-cores 指定 core 个数为 N,但是在 yarn 的资源管理页面上看到使用的 vcore 个数还是 1
将配置文件进行分发
打包wordcount程序并上传到linux01上
在集群上提交程序
./spark-submit --master yarn --deploy-mode cluster --executor-memory 1g --executor-cores 2 --num-executors 3 --class cn._doit19.demo01.WordCount /root/wordcount.jar hdfs://linux01:8020/word/ hdfs://linux01:8020/out20210102
--deploy-mode cluster 必须要指定,否则为client模式
最终输出结果:
更多学习、面试资料尽在微信公众号:Hadoop大数据开发
更多推荐
所有评论(0)