从零开始学习Hadoop--第7章 Hadoop MapReduce的运行机制

原创
2017/01/17 09:14
阅读数 15

    这一章不会有源代码,主要是分析Hadoop的运行机制。


1.一个Hadoop集群,有5种节点。

1.1NameNode,有且仅有一个,负责管理HDFS文件系统。

1.2DataNode,至少有一个,通常有很多个。具体地说,每台负责做集群计算的的计算机都是一个DataNode

1.3SecondaryNameNode,有且仅有一个,只辅助处理NameNode,不做其他任务。

1.4JobTracker,有且仅有一个,负责Hadoop的作业管理,所有的MapReduce的执行由它处理。

1.5TaskTracker,至少有一个,通常有很多个。具体地说,每台负责做集群计算的的计算机都是一个TaskTracker


2.伪分布式Hadoop集群,这个集群只有一台计算机,这台计算机上5种节点都有,启动Hadoop之后,用”jps”命令可以看到这5个节点进程。


3.分布式Hadoop集群,如果集群内计算机足够多,会有一台机器做NameNode,一台机器做SecondaryNameNode,一台机器做JobTracker。其他机器负责做集群计算,这些机器每台上面各有一个DataNodeTaskNode进程。


4.Hadoop配置好之后,第一个命令是执行”./bin/hadoopnamenode -format”。这个命令会对NameNode进行格式化,然后再关闭NameNode


5.执行完第4步之后,用”./bin/start-all.sh”启动Hadoop集群。


6.前处理

6.1MapReduce代码,编译,将代码打成tar包。

6.2Linux命令终端,运行HDFS的命令,将待处理的数据文件放到HDFS上。这时候,NameNode节点会负责将文件分割成块,分散存储在各个DataNode节点上。

6.3Hadoop集群运行的时候,每隔一定时间,SecondaryNameNode会将NameNode上的数据进行合并处理。


7.在一个Linux终端执行Hadoop命令,如"./bin/hadoopjar hadoop-examples-1.2.1.jar wordcount readme.txtoutput"。在Hadoop运行这个命令的时候,这个Linux终端就是一个”客户端”,它发的这个命令就是在“提交MapReduce作业”。


8.客户端在做什么

8.1客户端向JobTracker节点申请一个作业ID

8.2检查作业的输出目录。如果目录没指定或者已存在,客户端会打印错误信息,然后退出。

8.3根据InputFormat,将输入的数据格式进行分割,也就是分割成若干个InputSplit。如果出错会退出。

8.4Mapreduce程序的jar包,配置文件,InputSplit信息都复制到HDFS的一个目录,这个目录名是作业ID

8.5通知JobTracker执行作业。至此,提交作业完毕。

8.6客户端提交了作业之后,每秒会查询一次作业执行到了什么状态,如果有变化,就在冲端上打印出来,以便大家看到进度。


9.JobTracker在做什么

9.1客户端告诉JobTracker去执行作业。

9.2JobTracker将作业放到一个队列。

9.3作业调度器对作业进行初始化,它取出InputSplit信息,为每个InputSplit创建一个Map任务,根据map.reduce.reduce参数创建若干个Reduce任务。

9.4Hadoop集群启动后,JobTracker从始至终一直接收所有TaskTracker发送过来的心跳。如果某个心跳附带的信息说这个TaskTracker是空闲的,就发一个新任务给这个TaskTracker去做。

9.5JobTracker根据心跳,将作业和各种任务的执行进度计算出来。如果客户端查询,就将这些信息返回给它。

9.6JobTracker根据心跳,处理各种执行失败问题。


10.TaskTracker在做什么

10.1Hadoop集群启动后,TaskTracker定期向JobTracker发送“心跳”。心跳附带的信息会告诉JobTracer,现在TaskTracker的状态是什么,是否可以运行新任务,是否在忙碌状态。

10.2如果TaskTracker可以运行新任务,那么,JobTracer会在心跳的返回值里给TaskTracker分配一个新任务。

10.3TaskTracker接到新任务,将这个任务所在的作业的jar文件以及所有需要处理的数据文件从JobTrackerHDFS复制到本地磁盘上。

10.4TaskTracker创建一个TasckRunner实例运行这个任务。每隔一段是时间,将任务执行的进度通过心跳发送给JobTracker

10.5任务运行的时候,处理各种失败问题。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部