1.Hadoop1.x版本
- 运行架构是一个主从架构。主节点是JobTracker,从节点是TaskTracker
- 主要流程:
客户端运行一个应用程序,然后JobTracker会向NameNode发送请求,请求这个应用程序需要的数据在哪个DataNode上。然后JobTracker会向有数据的TaskTracker发消息,让它分配一些资源出来,我要发布任务去执行。 - JobTracker的作用:
资源调度主节点和任务调度主节点。所以JobTracker的压力很大,容易挂掉。 - 因为JobTracker和TaskTracker是MapReduce自带的,与MapReduce耦合度太高,如果还有一个spark的应用程序也要执行,由于两者之间没有通信,就会造成资源隔离以及抢夺问题。
2.Hadoop2.x版本
采用yarn资源调度器。也是主从架构,主节点是ResourceManager,并且还有一个备用的ResourceManager,从节点是NodeManager。流程如下:
- 客户端拿到应用程序计算的文件的路径找NameNode获取每一个block的位置,并生成一个报表。
- 客户端找ResourceManager为ApplicationMaster申请资源。
- ResourceManager接收客户端的申请,然后查看哪一个节点上资源充足,如果大部分节点的资源充足,那就随机找一台节点启动container容器.
- 在第三步选择的节点中规划出一个container以后,NodeManager会在这个容器中启动一个ApplicationMaster(主要负责任务调度)。
- 客户端会将生成的报表交给ApplicationMaster。
- ApplicationMaster拿到报表后,会根据报表去找ResourceMaster申请资源。如果一个block块的三个存储位置都没有资源,那么就会在与block存储位置同机架上选择一个节点。如果同机架上的节点也都没有资源,那么就随机找一台节点。然后在选中的节点中规划出一个container,在容器中启动一个yarn-child.
- ApplicationMaster发布map task到各个yarn-child中执行。
- yarn的引入使得多个计算框架可运行在一个集群中。只要每个应用程序实现一个ApplicationMaster。
3.yarn集群的搭建
步骤:
- 集群规划
2.配置mapred-site.xml文件。
一开始在Hadoop的配置文件中没有mapred-site.xml文件,只有mapred-site.xml文件,需要把mapred-site.xml文件复制一份,并重命名为mapred-site.xml,然后在做配置。配置信息如下:
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
3.配置yarn-site.xml文件
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>cluster1</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>node03</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>node04</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>node02:2181,node03:2181,node04:2181</value>
</property>
4.每个节点都这样配置完成后,然后就可以启动yarn集群。命令是:start-yarn.sh