天天看點

好記性不如爛筆頭---MapReduce1作業運作機制

學習hadoop先從搞懂作業運作機制開始,不看懂運作機制總感覺MapReduce的執行是一件很神秘的事情,現在來解開她的神秘面紗,本想自己看看書就算了,但是記憶力真的是個好東西,然而我卻沒有。。。隻好把看到的内容記下來,也好留下更深的印象。另外,本文内容摘抄自《hadoop權威指南第3版》。

jobtracker接收到對其的submitjob()方法的調用後,會把此調用放入一個内部隊列中,交由作業排程器進行排程,并對

其進行初始化。初始化包括建立一個表示正在運作作業的對象,用于封裝任務和記錄資訊,以便跟蹤任務的狀态和程序。

作業排程器首先從用戶端也就是master節點擷取已經計算好的輸入分片,為每個分片建立一個map任務,reduce任務個數取決于一些設定,任務在此時被指定id。

       除了map任務和reduce任務還會建立兩個任務:作業建立和作業清理。在map任務運作之前運作代碼來建立作業,并在reduce任務完成之後完成清理工作。作業建立為作業建立輸出路徑和臨時工作空間,作業清理清除作業運作過程中的臨時目錄。

       tasktracker被配置設定任務後,就該運作該任務,第一步,從共享檔案系統中複制jar檔案到tasktracker所在的檔案系統,将檔案從分布式緩存中複制到本地磁盤,第二步,tasktracker為任務建立一個本地工作目錄,并把jar檔案解壓到該工作目錄,,第三步,tasktracker建立一個taskrunner執行個體運作該任務。

taskrunner啟動一個新的JVM來運作每個任務,每個任務都能執行搭建和清理動作,它們和任務在一個jvm中執行,清理動作用于送出任務,在基于檔案的作業中意味着它的輸出寫到該任務的最終位置。在Streaming和pipes中,任務執行過程中,Java程序把輸入鍵值對傳給外部程序,外部程序用過使用者定義的map和reduce函數來執行并把輸出的鍵值對傳回給Java程序。從tasktracker的角度看,就像tasktracker的子程序自己處理map和reduce代碼一樣。

繼續閱讀