溫馨提示×

溫馨提示×

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

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

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

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

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

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

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

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

l          mapreduce.inputformat.class:InputFormat的實現

l          mapreduce.map.class:Mapper的實現

l          mapreduce.combine.class: Reducer的實現

l          mapreduce.reduce.class:Reducer的實現

l          mapreduce.outputformat.class: OutputFormat的實現

l          mapreduce.partitioner.class: Partitioner的實現

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

TaskAttemptContext用于任務的執行,它引入了標識任務執行的TaskAttemptID和任務狀態status,并提供新的訪問接口。org.apache.hadoop.mapred的TaskAttemptContext繼承自mapreduce的對應版本,只是增加了記錄進度的progress。

更多精彩內容請關注:http://bbs.superwu.cn 

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


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女