Yarn 框架相对于老的 MapReduce 框架什么优势呢?我们可以看到:
1、这个设计大大减小了 JobTracker(也就是现在的 ResourceManager)的资源消耗,并且让监测每一个 Job 子任务 (tasks) 状态的程序分布式化了,更安全、更优美。
2、在新的 Yarn 中,ApplicationMaster 是一个可变更的部分,用户可以对不同的编程模型写自己的 AppMst,让更多类型的编程模型能够跑在 Hadoop 集群中,可以参考 hadoop Yarn 官方配置模板中的 mapred-site.xml 配置。
3、对于资源的表示以内存为单位 ( 在目前版本的 Yarn 中,没有考虑 cpu 的占用 ),比之前以剩余 slot 数目更合理。
4、老的框架中,JobTracker 一个很大的负担就是监控 job 下的 tasks 的运行状况,现在,这个部分就扔给 ApplicationMaster 做了,而 ResourceManager 中有一个模块叫做 ApplicationsMasters( 注意不是 ApplicationMaster),它是监测 ApplicationMaster 的运行状况,如果出问题,会将其在其他机器上重启。
5、Container 是 Yarn 为了将来作资源隔离而提出的一个框架。这一点应该借鉴了 Mesos 的工作,目前是一个框架,仅仅提供 java 虚拟机内存的隔离 ,hadoop 团队的设计思路应该后续能支持更多的资源调度和控制 , 既然资源表示成内存量,那就没有了之前的 map slot/reduce slot 分开造成集群资源闲置的尴尬情况。
接下来开始修改配置文件。
[hadoop@master hadoop]$ cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
修改etc/hadoop/mapred-site.xml,增加property
<property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
修改etc/hadoop/yarn-site.xml,增加property
<property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property>
启动YARN
[hadoop@master hadoop]$ start-yarn.sh
starting yarn daemons
starting resourcemanager, logging to /usr/local/hadoop/logs/yarn-hadoop-resourcemanager-master.out
localhost: starting nodemanager, logging to /usr/local/hadoop/logs/yarn-hadoop-nodemanager-master.out
[hadoop@master hadoop]$ jps
51616 NameNode
51771 DataNode
51995 SecondaryNameNode
3421 ResourceManager
3550 NodeManager
3919 Jps
可以发现,比之前多了两个进程 NodeManager, ResourceManager。启动 YARN 之后,运行实例的方法还是一样的,仅仅是资源管理方式、任务调度不同。有兴趣的读者可以观察日志对比变化。
注意在单机上启动YARN可能会发现测试实例的运行速度变慢了(可以看出单机伪分布式并不适合使用YARN),这时候如果要关闭YARN直接启动伪分布式平台则需要将mapred-site.xml删掉,保留原来的mapred-site.xml.template 即可。停止YARN命令如下
[hadoop@master hadoop]$ stop-yarn.sh
stopping yarn daemons
stopping resourcemanager
localhost: stopping nodemanager
no proxyserver to stop
[hadoop@master hadoop]$ jps
51616 NameNode
7236 Jps
51771 DataNode
51995 SecondaryNameNode
如果要关闭hadoop伪分布式平台,则先停止YARN,再停止NameNode