Hadoop執行路徑深入剖析
本節和大家一起學習一下Hadoop的相關知識,主要包括Hadoop概念介紹和Hadoop執行路徑兩部分內容,歡迎大家一起來學習Hadoop。下面是具體介紹。
Hadoop簡介
一個分布式系統基礎架構,由Apache基金會開發。用戶可以在不了解分布式底層細節的情況下,開發分布式程序。充分利用集群的威力高速運算和存儲。
簡單地說來,Hadoop是一個可以更容易開發和運行處理大規模數據的軟件平臺。
Hadoop實現了一個分布式文件系統(HadoopDistributedFileSystem),簡稱HDFS。HDFS有著高容錯性(fault-tolerent)的特點,并且設計用來部署在低廉的(low-cost)硬件上。而且它提供高傳輸率(highthroughput)來訪問應用程序的數據,適合那些有著超大數據集(largedataset)的應用程序。HDFS放寬了(relax)POSIX的要求(requirements)這樣可以流的形式訪問(streamingaccess)文件系統中的數據。
Hadoop執行路徑。
通常我們在自己編寫的Job代碼中會調用JobClient.runJob(job)方法來啟動任務的真正執行,我們的介紹就從這個命令開始(在調用這個api之前,我們已經設計并且在程序中指定好自己的mapper函數和reducer函數了)
1,JobClient.runJob(job)靜態方法會實例化一個JobClient實例,然后用該實例的submitJob(job)方法向master提交作業,此方法返回一個RunningJob對象,用來跟蹤作業的狀態,作業提交完畢,JobClient會輪訓作業的進度
2,submitJob內部是通過JobSubmitter的submitJobInternal(job)完成實質性的作業提交。submitJobInternal會先向haodoop文件系統上傳3個文件:job.jar,job.split,job.xml這三個文件位置由mapreduce系統路徑mapred.system.dir屬性決定,寫完這三個文件之后,此方法使用RPC調用master節點的JobTracker.submitJob(job)方法。
3,JobTracker收到JobClient提交的作業后,即在JobTracker.submitJob()方法中,首先生成一個JobInProgress對象,此對象代表一個作業,它的作用是維護這道作業的所有信息,包括作業剖析JobProfile和JobStatus,并登記所有Task進任務表中。隨后JobTracker會將此JobInProgress對象通過listener.jobAdd(job)方法加入作業調度隊列,并用一個成員Jobs來表示所有的作業
4,Hadoop默認的調度器是FIFO的JobQueueTaskScheduler。它有2個成員變量JobQueueJobInProgressListener和eagerTaskInitializationListener。后者負責任務初始化。作法為:listerner初始化時,開啟JobInitThread線程,當作業通過JobAdd(job)加入初始化隊列jobInitQueue時,根據作業優先級排序,之后該線程調用JobInProgress的initTasks()來初始化所有的任務。
5,initTasks()過程比較復雜,在這里面會根據原先對輸入任務的分解,來創建對應數目的Map執行管理對象TaskInProgress。
之后即是TaskTracker請求任務的過程,請看下節Hadoop介紹。
【編輯推薦】