内容:
1、Hadoop Yarn的工作流程解密;
2、Spark on Yarn两种运行模式实战;
3、Spark on Yarn工作流程解密;
4、Spark on Yarn工作内幕解密;
5、Spark on Yarn最佳实践;
资源管理框架Yarn
Mesos是分布式集群的资源管理框架,和大数据没关系,但是可以管理大数据的资源
==========Hadoop Yarn解析============
1、Yarn是Hadoop推出的资源管理器,是负责分布式(大数据)集群计算的资源管理的,负责资源的管理和分配,基于Yarn我们可以在同一个大数据集群上同时运行多个计算框架,例如Spark、MapReduce、Storm等;
2、Yarn基本工作流程如下图所示:
Resource Manager管理整个集群的资源(主要内存、CPU,有可能包括磁盘IO和网络IO);
每台机器Node Manager管理每个几点资源,并向Resource Manager汇报当前机器的资源情况;
由于每台都会汇报,所以Resource Manager知道如何管理。
当客户端提交程序给Resource Manager的时候,Resource Manager会根据自己对集群资源状况掌握的情况,在具体机器上启动一个进程来运行客户端提交的程序,此时Resource Manager就是整个集群的Master。
Resource Manager不会到具体机器上启动进程,它只会命令Node Manager来启动相应的进程。
App Mstr就是当前提交程序的Driver,它启动的时候,就会跟Resource Manager申请资源,Resource Manager会根据资源情况给App Mstr返回资源情况。
Container是封装资源的容器。向NodeManager汇报资源信息,想App Mstr汇报计算信息。
=====>总结:
3、客户端向Resource Manager提交程序,Resource Manager接受应用程序,并根据集群资源的状况决定在具体某个node上来启动当前提交的应用程序的任务调度器driver(App Mstr),决定后会命令具体的某个node上的资源管理器(Node Manager)来启动一个新的JVM进程,运行程序的Drvier部分,当App Mstr启动的时候(会首先向Resource Manager 注册说明自己负责当前程序的运行),会下载当前App相关的jar等各种资源并基于此决定具体向Resource Manager申请资源的具体内容,Resource Manager接收到App Mastr的资源分配的请求之后会最大化的满足资源分配的请求,并把资源的元数据信息发送给App Mastr,App Mastr收到资源的元数据信息后,会根据元数据信息发指令给具体机器上的Node Manager,让Node Manager来启动具体的Container,Container在启动后必须向App Mastr注册,当App Mstr获得了用于计算的Containers后,开始进行任务的调度和计算,直到作业执行完成。需要补充说明的是,如果Resource Manager 第一次没有能够完全完成请求的资源分配,后续Resource Manager发现集群中有新的可用时,会主动向App Mastr发送新的可用资源的元数据信息以提供更多的资源用于当前程序的运行;
补充说明:
1)Container如果是Hadoop的MapReduce的计算的话,Container不可以复用,如果是Spark On Yarn,Container可以复用;
2)Container具体的销毁,是由Application Master来决定的;
==========Spark on Yarn两种运行模式实战 ============
启动yarn,start-yarn
master:8088 看yarn的控制台
启动hadoop的历史信息
mr-jobhistory-daemon.sh start historyserver --config $HADOOP_CONF_DIR
master:19888 看控制台
此时不需要启动Spark集群,只需要启动Yarn即可,Yarn的Resource Manager,就相当于Spark Standalone模式下Master!
1、Spark on Yarn两种运行模式,唯一的决定因素是,当前Applicatio的任务调度器Drvier运行在什么地方:
1)Cluster:Driver运行在Yarn集群下的某台机器上的JVM进程中;
2)Client:Driver运行在当前提交程序的客户机器上;
需要说明的是:无论什么模式,只要当前机器运行了Spark代码,就必须安装Spark!
2、运行Pi
1)client模式:方便在命令终端直接看到运行的过程信息,尤其方便做测试使用;
./spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode client ../lib/spark-examples-1.6.0-hadoop2.6.0.jar 50000
如果没启动yarn
会报尝试连接yarn,说明根本不用启动Spark集群,Spark集群本身启动的就是Master和Worker,其实它本身就是资源管理框架,而yarn就是替代了它的作用。
16/02/13 21:04:07 INFO ipc.Client: Retrying connect to server: Master/192.168.145.131:8032. Already tried 0 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)
16/02/13 21:04:08 INFO ipc.Client: Retrying connect to server: Master/192.168.145.131:8032. Already tried 1 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)
16/02/13 21:04:09 INFO ipc.Client: Retrying connect to server: Master/192.168.145.131:8032. Already tried 2 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)
16/02/13 21:04:10 INFO ipc.Client: Retrying connect to server: Master/192.168.145.131:8032. Already tried 3 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)
16/02/13 21:04:11 INFO ipc.Client: Retrying connect to server: Master/192.168.145.131:8032. Already tried 4 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)
16/02/13 21:04:12 INFO ipc.Client: Retrying connect to server: Master/192.168.145.131:8032. Already tried 5 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)
16/02/13 21:04:13 INFO ipc.Client: Retrying connect to server: Master/192.168.145.131:8032. Already tried 6 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)
天机解密:Standalone模式下,启动Spark集群也就是启动Master和Worker,其实启动的是资源管理器。真正作业计算的时候和集群资源管理器没有任何关系。所以Spark的Job不是真正执行作业的时候不是运行在你启动的Spark集群中的,而是运行在一个个JVM中的,只要你在JVM所在的机器上安装配置了Spark即可!!!
2)cluster模式:方便在命令终端直接看到运行的过程信息,尤其方便做测试使用;
./spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode cluster../lib/spark-examples-1.6.0-hadoop2.6.0.jar 50000
3、Spark on Yarn模式下Driver和Application Master的关系:
1)Cluster:Drvier位于Appliation Master进程中,我们需要通过Hadoop默认指定的8088端口来通过Web控制台查看当前的Spark程序运行的信息;
2)Client:Drvier位于提交代码的机器上,此时Application Master依旧位于集群中,且只负责资源的申请,和launch executor,此时启动后的Executor并不会向Application Master注册,只是向Drvier注册!!!
==========Spark on Yarn最佳实践 ============
1、在Spark on Yarn模式下,Hadoop Yarn的配置yarn.nodemanager.local-dir会覆盖Spark的spark.local.dir!!!
2、在实际上产环境下,一般都是采用Cluster模式,我们会通过historyServer来获取最终全部的运行信息;
3、如果想直接看运行的日志信息,可以使用以下命令:
yarn logs -applicationID <app ID>
王家林老师名片:
中国Spark第一人
新浪微博:http://weibo.com/ilovepains
微信公众号:DT_Spark
博客:http://blog.sina.com.cn/ilovepains
手机:18610086859
QQ:1740415547
邮箱:[email protected]