MapReduce详解

MapReduce详解:

	1)特点:
		1)开发简单。
		2)可扩展性强,增加节点即可。
		3)容错性强。
		
	2)短板:执行速度慢,因为有大量的中间结果需要对磁盘进行I/O,还得通过网络进行传输。

	3)MapReduce作业运行机制:
		1)客户端:提交MapReduce作业。
		2)jobtracker:协调作业的运行。
		3)tasktracker:运行作业划分后的任务。
		
	4)相关概念:
		
		MapReduce作业(job)是用户提交的最小单位,Map任务、Reduce任务(task)是MapReduce计算的最小单位。
		
		1)作业的提交:
			JobClient的submitJob()方法所实现的作业提交过程:
				1 向jobtracker请求一个新的作业ID(通过调用JobTracker的getNewJobId()方法获取)
				2 检测作业的输出说明。例如:如果没有指定输出目录或输出目录已经存在,作业就不提交,并向MapReduc程序抛出错误
				3 计算作业的输入分片。例如:如果输入路径不存在,则无法计算分片
				4 将运行作业所需要的资源(包括作业jar文件、配置文件和计算所得的输入分片)复制到一个以作业ID命名的目录下jobtracker的文件系统中。
					作业jar的副本较多(由mapred.submit.replication属性控制,默认为10),故在运行作业的任务时,集群中有很多副本可供tasktracker访问。
				5 告知jobtracker作业准备执行(通过调用JobTracker的submitJob()方法实现)
		
		2)作业的初始化:
			当JobTracker接受到对其submitJob()方法的调用后,会把此调用放入一个内部队列中,交由作业调度器(job scheduler)进行调度,并对其进行初始化。
			初始化过程:创建一个表示正在运行作业的对象--封装任务和记录信息,以便跟踪任务的状态和进程。
			
		3)任务的分配:
			tasktracker运行一个简单的循环来定期发送“心跳(heartbeat)”给jobtracker,jobtracker使用心跳的返回值与tasktracker进行通信。
			
			jobtracker给tasktracker分配reduce任务和map任务:
				选择reduce任务:jobtracker简单地从待运行的reduce任务列表中选一个reduce任务,而不用考虑数据的本地化。
				选择map任务:jobtracker会考虑tasktracker的网络位置,并选取一个距离其输入分片文件最近的tasktracker。最理想的情况是任务运行在输入分片所在的节点上。

		4)任务的执行:
			通过从共享文件系统把作业的jar文件复制到tasktracker所在的文件系统,从而实现作业的jar文件本地化,同时,tasktracker将应用程序所需要的全部文件从分布式缓存复制到本地磁盘。
			tasktracker为任务新建一个本地工作目录,并把jar文件中的内容解压到这个文件夹下。
			tasktracker新建一个TaskRunner实例来运行该任务。
				Tasktracker启动一个新的JVM来运行每个任务,以确保用户自定义的map函数和reduce函数中存在的问题不会影响到tasktracker。
		
		5)任务的失败:
			子任务失败:
				1)map或reduce任务中的用户代码抛出运行异常:
					处理策略:子任务JVM进程会在退出之前向其父tasktracker发送错误报告,错误报告最后被记入用户日志。tasttracker会将此次tast attempt标记为failed,并释放一个任务槽运行另外一个任务。
			
				2)子进程JVM突然退出:由于JVM的bug而导致MapReduce用户代码产生一些错误,而导致JVM 退出。
					处理策略:tasktracker会注意到进程已经退出,并将此次tast attempt标记为failed。
				
				3)任务挂起:一旦tasktracker注意到已经有一段时间没有收到进度的更新,便会将任务标记为failed,在此之后,JVM子进程将被自动杀死。
			
			tasktracker失败:tasktracker由于奔溃或运行过于缓慢而失败,并停止向jobtracker发送心跳。
		
			jobtracker失败:jobtracker失败是一个单点故障,故作业注定会失败。
		

		

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值