溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Hadoop源代碼分析(*IDs類和*Context類)

發(fā)布時(shí)間:2020-04-05 06:24:21 來源:網(wǎng)絡(luò) 閱讀:308 作者:超人學(xué)院66 欄目:大數(shù)據(jù)
我們開始來分析Hadoop MapReduce的內(nèi)部的運(yùn)行機(jī)制。用戶向Hadoop提交Job(作業(yè)),作業(yè)在JobTracker對象的控制下執(zhí)行。Job被分解成為Task(任務(wù)),分發(fā)到集群中,在TaskTracker的控制下運(yùn)行。Task包括MapTask和ReduceTask,是MapReduce的Map操作和Reduce操作執(zhí)行的地方。這中任務(wù)分布的方法比較類似于HDFS中NameNode和DataNode的分工,NameNode對應(yīng)的是JobTracker,DataNode對應(yīng)的是TaskTracker。JobTracker,TaskTracker和MapReduce的客戶端通過RPC通信,具體可以參考HDFS部分的分析。
我們先來分析一些輔助類,首先是和ID有關(guān)的類,ID的繼承樹如下:

Hadoop源代碼分析(*IDs類和*Context類) 

這張圖可以看出現(xiàn)在Hadoop的org.apache.hadoop.mapred向org.apache.hadoop.mapreduce遷移帶來的一些問題,其中灰色是標(biāo)注為@Deprecated的。ID攜帶一個(gè)整型,實(shí)現(xiàn)了WritableComparable接口,這表明它可以比較,而且可以被Hadoop的io機(jī)制串行化/解串行化(必須實(shí)現(xiàn)compareTo/readFields/write方法)。JobID是系統(tǒng)分配給作業(yè)的唯一標(biāo)識(shí)符,它的toString結(jié)果是job_<jobtrackerID>_<jobNumber>。例子:job_200707121733_0003表明這是jobtracker200707121733(利用jobtracker的開始時(shí)間作為ID)的第3號(hào)作業(yè)。
作業(yè)分成任務(wù)執(zhí)行,任務(wù)號(hào)TaskID包含了它所屬的作業(yè)ID,同時(shí)也有任務(wù)ID,同時(shí)還保持了這是否是一個(gè)Map任務(wù)(成員變量isMap)。任務(wù)號(hào)的字符串表示為task_<jobtrackerID>_<jobNumber>_[m|r]_<taskNumber>,如task_200707121733_0003_m_000005表示作業(yè)200707121733_0003的000005號(hào)任務(wù),改任務(wù)是一個(gè)Map任務(wù)。
一個(gè)任務(wù)有可能有多個(gè)執(zhí)行(錯(cuò)誤恢復(fù)/消除Stragglers等),所以必須區(qū)分任務(wù)的多個(gè)執(zhí)行,這是通過類TaskAttemptID來完成,它在任務(wù)號(hào)的基礎(chǔ)上添加了嘗試號(hào)。一個(gè)任務(wù)嘗試號(hào)的例子是attempt_200707121733_0003_m_000005_0,它是任務(wù)task_200707121733_0003_m_000005的第0號(hào)嘗試。
JVMId用于管理任務(wù)執(zhí)行過程中的Java虛擬機(jī),我們后面再討論。
為了使Job和Task工作,Hadoop提供了一系列的上下文,這些上下文保存了Job和Task工作的信息。

Hadoop源代碼分析(*IDs類和*Context類) 

處于繼承樹的最上方是org.apache.hadoop.mapreduce.JobContext,前面我們已經(jīng)介紹過了,它提供了Job的一些只讀屬性,兩個(gè)成員變量,一個(gè)保存了JobID,另一個(gè)類型為JobConf,JobContext中除了JobID外,其它的信息都保持在JobConf中。它定義了如下配置項(xiàng):

l          mapreduce.inputformat.class:InputFormat的實(shí)現(xiàn)

l          mapreduce.map.class:Mapper的實(shí)現(xiàn)

l          mapreduce.combine.class: Reducer的實(shí)現(xiàn)

l          mapreduce.reduce.class:Reducer的實(shí)現(xiàn)

l          mapreduce.outputformat.class: OutputFormat的實(shí)現(xiàn)

l          mapreduce.partitioner.class: Partitioner的實(shí)現(xiàn)

同時(shí),它提供方法,使得通過類名,利用Java反射提供的Class.forName方法,獲得類對應(yīng)的Class。org.apache.hadoop.mapred的JobContext對象比org.apache.hadoop.mapreduce.JobContext多了成員變量progress,用于獲取進(jìn)度信息,它類型為JobConf成員job指向mapreduce.JobContext對應(yīng)的成員,沒有添加任何新功能。
JobConf繼承自Configuration,保持了MapReduce執(zhí)行需要的一些配置信息,它管理著46個(gè)配置參數(shù),包括上面mapreduce配置項(xiàng)對應(yīng)的老版本形式,如mapreduce.map.class 對應(yīng)mapred.mapper.class。這些配置項(xiàng)我們在使用到它們的時(shí)候再介紹。
org.apache.hadoop.mapreduce.JobContext的子類Job前面也已經(jīng)介紹了,后面在討論系統(tǒng)的動(dòng)態(tài)行為時(shí),再回來看它。

TaskAttemptContext用于任務(wù)的執(zhí)行,它引入了標(biāo)識(shí)任務(wù)執(zhí)行的TaskAttemptID和任務(wù)狀態(tài)status,并提供新的訪問接口。org.apache.hadoop.mapred的TaskAttemptContext繼承自mapreduce的對應(yīng)版本,只是增加了記錄進(jìn)度的progress。

更多精彩內(nèi)容請關(guān)注:http://bbs.superwu.cn 

關(guān)注超人學(xué)院微信二維碼:Hadoop源代碼分析(*IDs類和*Context類)


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI