当前位置

首页 > 大数据 > Hadoop > Hadoop工作机制

Hadoop工作机制

编辑: 来源: 时间: 2017-10-12 16:16 阅读:

可以只用一行代码来运行MapReduce作业:JobClient.runJon(conf),Job作业运行时参与的四个实体:


1.JobClient 写代码,配置作业,提交作业。

     

2.JobTracker:初始化作业,分配作业,协调作业运行。这是一个java程序,主类是JobTracker。

     

3.TaskTracker:运行作业划分后的任务,即分配数据分配上执行Map或Reduce任务。

    

4.HDFS:保存作业数据、配置信息等,保存作业结果。


Map/Reduce 作业总体执行流程:


     代码编写 ----> 作业配置  ---->  作业提交 ----> Map任务分配和执行 ----> 处理中间结果 ---->  Reduce任务分配与执行 ---->  输出结果


而对于每个作业的执行,又包含:

     输入准备 ----> 任务执行 ----> 输出结果



作业提交JobClient:


     JobClient的runJob方法产生一个Jobclient实例并调用其submitJob方法,然后runJob开始循环吗,并在循环中调用getTaskCompetionEvents方法,获得TaskCompletionEvent实例,每秒轮询作业进度(后面有介绍进度和状态更新),把进度写到控制台,作业完成后显示作业计数器,若失败,则把错误记录到控制台。

 

submitJob方法作业提交的过程:


1.向JobTracker请求一个新的JobId。

     

2.检查作业相关路径,如果路径不正确就会返回错误。

     

3.计算作业输入分片及其划分信息。

     

4.将作业运行需要的资源(jar文件、配置文件等)复制到Shared HDFS,并

复制多个副本(参数控制,默认值为10)供tasktracker访问,也会将计算的分片复制到HDFS。

     

5.调用JobTracker对象的submitJob()方法来真正提交作业,告诉JobTracker作业准备执行。



作业的初始化JobTracker:


JobTracker收到submitJob方法调用后,会把调用放入到一个内部队列,由作业调度器(Job scheduler)进行调度并对其初始化。Job初始化即创建一个作业对象。


当作业被调度后,JobTracker会创建一个代表这个作业的JobInProgress对象,并将任务和记录信息封装在这个对象中,以便跟踪任务状态和进程。


初始化过程就是JobInProgress对象的initTasks方法进行初始化的。


初始化步骤:


1.从HDFS中读取作业对应的job.split信息,为后面的初始化做好准备。

          

2.创建并初始化map和reduce任务。根据数据分片信息中的个数确定map task的个数,然后为每个map task生成一个TaskInProgress对象来处理数据分片,先将其放入nonRunningMapCache,以便JobTracker分配任务的时候使用。接下来根据JobConf中的mapred.reduce.tasks属性利用setNumReduceTasks()方法设置reduce task的数量,然后同map task创建方式。

          

3.最后就是创建两个初始化task,进行map和reduce的初始化。



任务的分配JobTracker:


消息传递HeartBeat: tasktracker运行一个简单循环定期发送心跳(heartbeat)给JobTracker。由心跳告知JobTracker自己是否存活,同时作为消息通道传递其它信息(请求新task)。作为心跳的一部分,tasktracker会指明自己是否已准备好运行新的任务,如果是,jobtracker会分配它一个任务。


分配任务所属于的作业:在Jobtracker分配任务前需先确定任务所在的作业。后面会介绍到各种作业调度算法,默认是一个FIFO的作业调度。


分配Map和Reduce任务:tasktracker有固定数量的任务槽,一个tasktracker可以同时运行多个Map和Reduce任务,但其准确的数量由tasktracker的核的数量和内存大小决定。默认调度器会先填满Map任务槽,再填Reduce任务槽。jobtracker会选择距离离分片文件最近的tasktracker,最理想情况下,任务是数据本地化(data-local)的,当然也可以是机架本地化(rack-local),如果不是本地化的,那么他们就需要从其他机架上检索数据。Reduce任务分配很简单,jobtracker会简单的从待运行的reduce任务列表中选取下一个来执行,不用考虑数据本地化。



任务的执行TaskTracker:


TaskTracker收到新任务后,就要在本地运行任务了,运行任务的第一步就是通过localizedJob将任务本地化所需要的注入配置、数据、程序等信息进行本地化。


1.本地化数据:从共享文件系统将job.split 、job.jar (在分布式缓存中)复制本地,将job配置信息写入job.xml。

     

2.新建本地工作目录:tasktracker会加压job.jar文件到本工作目录。

     

3.调用launchTaskForJob方法发布任务(其中会新建TaskRunner实例运行任务),如果是Map任务就启用MapTaskRunner,对于Reduce就是ReduceTaskRunner。

   

在这之后,TaskRunner会启用一个新的JVM来运行每个Map/Reduce任务,防止程序原因而导致tasktracker崩溃,但不同任务间重用JVM还是可以的,后续会讲到任务JVM重用。


对于单个Map,任务执行的简单流程是:


1.分配任务执行参数

     

2.在Child临时文件中添加map任务信息(Child是运行Map和Reduce任务的主进程)

     

3.配置log文件夹,配置map任务的通信和输出参数

     

4.读取input split,生成RecordReader读取数据

     

5.为Map生成MapRunnable,依次从RecordReader中接收数据,并调用Map函数进行处理。

     

6.最后将map函数的输出调用collect收集到MapOutputBuffer(参数控制其大小)中。



Streaming和Pipes:

     

Streaming和Pipes都运行特殊的Map和Reduce任务,目的是运行用户提供的可执行程序并与之通信。


Streaming:使用标准输入输出Streaming与进程进行通信。


Pipes:用来监听套接字,会发送一个端口号给C++程序,两者便可建立链接。

     


进度和状态更新:


一个作业和它的任务都有状态(status),其中包括:运行成功失败状态、Map/Reduce进度、作业计数器值、状态消息。


状态消息与客户端的通信:


1.对于Map任务Progress的追踪:progress是已经处理完的输入所占的比例。

     

2.对于Reduce:稍复杂,reduce任务分三个阶段(每个阶段占1/3),复制、排序和Reduce处理,若reduce已执行一半的输入的话,那么任务进度便是1/3+1/3+1/6=5/6。

     

3.任务计数器:任务有一组计数器,负责对任务运行各个事件进行计数。

     

4.任务进度报告:如果任务报告了进度,便会设置一个标记以表明状态将被发送到tasktracker。有一个独立线程每隔三秒检查一次此标记,如果已设置,则告知tasktracker当前状态。

     

5.tasktracker进度报告:tasktracker会每隔5秒(这个心跳是由集群大小决定,集群越大时间会越长)发送heartbeat到jobtracker,并且tasktracker运行的所有状态都会在调用中被发送到jobtracker。

     

6.jobtracker合并各任务报告:产生一个表明所有运行作业机器所含任务状态的全局视图。

     

前面提到的JobClient就是通过每秒查询JobTracker来接收最新状态,而且客户端JobClient的getJob方法可以得到一个RunningJob的实例,其包含了作业的所以状态信息。

     


作业的完成:


当jobtracker收到作业最后一个任务已完成的通知后,便把作业状态设置成成功。JobClient查询状态时,便知道任务已成功完成,于是JobClient打印一条消息告知用户,然后从runJob方法返回。


如果jobtracker有相应设置,也会发送一个Http作业通知给客户端,希望收到回调指令的客户端可以通过job.


大数据培训、人工智能培训、Python培训、大数据培训机构、大数据培训班、数据分析培训、大数据可视化培训,就选光环大数据!光环大数据,聘请专业的大数据领域知名讲师,确保教学的整体质量与教学水准。讲师团及时掌握时代潮流技术,将前沿技能融入教学中,确保学生所学知识顺应时代所需。通过深入浅出、通俗易懂的教学方式,指导学生更快的掌握技能知识,成就上万个高薪就业学子。 更多问题咨询,欢迎点击------>>>>在线客服

你可能也喜欢这些

在线客服咨询

领取资料

X
立即免费领取

请准确填写您的信息

点击领取
#第三方统计代码(模版变量) '); })();
'); })();