分区
1. 作用用于将数据进行分类
2一个分区要对应一个ReduceTask,每一个ReduceTask都会产生一个结果文件
3. ReduceTask的数量可以多于分区的数量
4自定义分区,那么需要写一个类继承Partitioner,然后重写其中的方法
一、数据本地化策略
1. 当JobTracker收到提交的MR程序之后,会访问NameNode
2. NameNode会将文件的描述信息返回给JobTracker
3. JobTracker会根据描述信息对文件进行切片。
4. 根据切片的数量计算MapTask的数量,然后JobTracker将MapTask分配有到对应的Block的节点上,这个过程称之为数据本地化策略
.数据本地化策略的目的是为了减少网络的传输
二、job执行流程
1. 客户端提交jar包 - hadoop jar xxx.jar 时,校验通过会分配一个job和一个HDFS地址,将地址返回给客户端
2. 客户端将程序提交到相应的HDFS地址上
3. 提交job,开始执行MapReduce程序
4. 将job由JobTracker执行,然后JobTracker将文件进行切片,并且计算MapTask以及ReduceTask的数量
5. JobTracker上有了任务,就要进行任务的分配,在分配/领取任务的时候,MapTask要满足数据的本地化;ReduceTask会分配到相对空闲的节点上
6. TaskTracker将jar包下载到对应的节点上,开始执行MapTask或者ReduceTask - 体现了逻辑移动而数据固定的思想
(计算向数据移动)
7. TaskTracker会在当前节点上开启一个JVM子进程执行MapTask或者ReduceTask,每执行完一个MapTask或者ReduceTask就会关闭这个JVM子进程;如果当前节点有多个MapTask,那么每执行一个MapTask都会开启一个JVM子进程
网友评论