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