首先當我在hdfs上存入一個很大的10g文件的時候,首先10g文件會按照128分成80個block,假設我有10個節(jié)點,其中一個節(jié)點是namenode,那么還有9個節(jié)點是datanode,9個節(jié)點共同組成了hdfs,80個block放入hdfs時候是隨機放入到9個節(jié)點的(不太確定,能告訴我嗎?),然后按照規(guī)則產(chǎn)生副本(這個不說了,網(wǎng)上資料很多)。
mapReduce過程:用戶編寫的MapReduce程序通過Client提交到JobTracker端 ,JobTracker端獲取資源并進行分配,首先會為80個block生成80個map,并且map任務會均勻的分布在各個節(jié)點中(這個也不確定,瞎猜的,哈哈),執(zhí)行map任務時,map會提取想要的block(提取的時候會有相應的原則,如本地化優(yōu)勢,map會優(yōu)先提取本節(jié)點上的數(shù)據(jù),如果map所在的節(jié)點沒有數(shù)據(jù)會提取其他節(jié)點上的,會有網(wǎng)絡傳輸),然后執(zhí)行map任務,map處理完進行輸出,輸出到緩沖區(qū),JobTracker再創(chuàng)建reduce(這個task,好像創(chuàng)建map的時候就創(chuàng)建了,不理解為什么這樣,不應該是map之后才reduce嗎,為什么map task和reduce task一起都創(chuàng)建了,這樣不是浪費資源嗎,執(zhí)行maptask的時候 , reduce task 所在的節(jié)點不就閑置了嗎?有大神解讀嗎?? ?還有創(chuàng)建reduce的個數(shù)是怎么定的),各個節(jié)點上的reduce,會按key的hash值后對Reduce task的數(shù)量取模,模相同的放到一個reduce(會有網(wǎng)絡傳輸問題),然后輸出到hdfs上
優(yōu)化方面,1.既然reduce會把相同的key都提取,為什么在切分的時候不把相同的key切分到一個map里,只有在reduce的時候,就不需要網(wǎng)絡傳輸了
? ? ? ? ? ? ? ? 2.為什么在shuffle的過程中,進行各種排序,這個不是浪費時間嗎,有什么實際的意義嗎
求大神指點