分區(qū)
1. 作用用于將數(shù)據(jù)進(jìn)行分類(lèi)
2一個(gè)分區(qū)要對(duì)應(yīng)一個(gè)ReduceTask揖盘,每一個(gè)ReduceTask都會(huì)產(chǎn)生一個(gè)結(jié)果文件
3. ReduceTask的數(shù)量可以多于分區(qū)的數(shù)量
4自定義分區(qū)匹涮,那么需要寫(xiě)一個(gè)類(lèi)繼承Partitioner炮障,然后重寫(xiě)其中的方法
一、數(shù)據(jù)本地化策略
1. 當(dāng)JobTracker收到提交的MR程序之后伊者,會(huì)訪(fǎng)問(wèn)NameNode
2. NameNode會(huì)將文件的描述信息返回給JobTracker
3. JobTracker會(huì)根據(jù)描述信息對(duì)文件進(jìn)行切片英遭。
4. 根據(jù)切片的數(shù)量計(jì)算MapTask的數(shù)量,然后JobTracker將MapTask分配有到對(duì)應(yīng)的Block的節(jié)點(diǎn)上删壮,這個(gè)過(guò)程稱(chēng)之為數(shù)據(jù)本地化策略
.數(shù)據(jù)本地化策略的目的是為了減少網(wǎng)絡(luò)的傳輸
二贪绘、job執(zhí)行流程
1. 客戶(hù)端提交jar包 - hadoop jar xxx.jar 時(shí),校驗(yàn)通過(guò)會(huì)分配一個(gè)job和一個(gè)HDFS地址央碟,將地址返回給客戶(hù)端
2. 客戶(hù)端將程序提交到相應(yīng)的HDFS地址上
3. 提交job,開(kāi)始執(zhí)行MapReduce程序
4. 將job由JobTracker執(zhí)行均函,然后JobTracker將文件進(jìn)行切片亿虽,并且計(jì)算MapTask以及ReduceTask的數(shù)量
5. JobTracker上有了任務(wù),就要進(jìn)行任務(wù)的分配苞也,在分配/領(lǐng)取任務(wù)的時(shí)候洛勉,MapTask要滿(mǎn)足數(shù)據(jù)的本地化;ReduceTask會(huì)分配到相對(duì)空閑的節(jié)點(diǎn)上
6. TaskTracker將jar包下載到對(duì)應(yīng)的節(jié)點(diǎn)上如迟,開(kāi)始執(zhí)行MapTask或者ReduceTask - 體現(xiàn)了邏輯移動(dòng)而數(shù)據(jù)固定的思想
(計(jì)算向數(shù)據(jù)移動(dòng))
7. TaskTracker會(huì)在當(dāng)前節(jié)點(diǎn)上開(kāi)啟一個(gè)JVM子進(jìn)程執(zhí)行MapTask或者ReduceTask收毫,每執(zhí)行完一個(gè)MapTask或者ReduceTask就會(huì)關(guān)閉這個(gè)JVM子進(jìn)程攻走;如果當(dāng)前節(jié)點(diǎn)有多個(gè)MapTask,那么每執(zhí)行一個(gè)MapTask都會(huì)開(kāi)啟一個(gè)JVM子進(jìn)程