自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

專家剖析 Hadoop源代碼中的Task類用法

開發(fā) 架構 Hadoop
Hadoop源代碼相信大家應該有所了解,這里就向大家介紹一下Hadoop源代碼中的類Task,歡迎大家一起來學習,相信通過本文的介紹大家對Hadoop源代碼中的類有一定的了解。

本節(jié)和大家一起學習一下Hadoop源代碼中的Task類,Task是一個虛基類,它有兩個子類:MapTask,ReduceTask,分別對應著Map和Reduce。下面就來看一下本節(jié)的具體介紹吧。

Hadoop源代碼中的類Task

Task是一個虛基類,它有兩個子類:MapTask,ReduceTask,分別對應著Map和Reduce。先從成員變量開始:

首先是和作業(yè)任務相關的信息,包括jobFile,作業(yè)的配置文件;taskId,任務ID,從中可以獲取作業(yè)ID;partition,Job內ID;taskStatus,任務狀態(tài)。jobCleanup,jobSetup和taskCleanup是三個標志位。

接下來是一組和錯誤回復的變量。我們知道,如果在Task執(zhí)行過程中出錯,很有可能是因為輸入有問題,一個常用的策略是在下一次回復性執(zhí)行過程中,忽略這部分輸入,skipRanges,skipping和writeSkipRecs就是用來控制這個行為的。
currentRecStartIndex和currentRecIndexIterator配合,可以得到當前的任務輸入。
conf保存了當前任務的配置(JobConf形式),MapOutputFile上一部分已經介紹了,用于管理臨時文件,跟它配合的是lDirAlloc,類型為LocalDirAllocator,是本地文件分配器。jobContext和taskContext保持了Job和Task的上下文。committer定制了和Task生命周期相關的一些特殊處理(也可以看出是上下文)。

最后一部分應該是輸出outputFormat。
和統(tǒng)計/狀態(tài)監(jiān)視的成員變量分散在類的各處,如spilledRecordsCounter,taskProgress,counters等,我們就不再介紹了。


下面我們開始來進行分析一下Hadoop源代碼中類Task的成員函數,首先是虛方法,Task包含了下面3個虛方法:
publicabstractvoidrun(JobConfjob,TaskUmbilicalProtocolumbilical)
throwsIOException,ClassNotFoundException,InterruptedException;

執(zhí)行Task;
publicabstractTaskRunnercreateRunner(TaskTrackertracker,TaskTracker.TaskInProgresstip)throwsIOException;

創(chuàng)建一個TaskRunner;
publicabstractbooleanisMapTask();
是否是一個Map任務。上面這3個方法自然是和MapTask,ReduceTask相關,也需要它們實現(xiàn)。
Hadoop源代碼中的構造函數很簡單,主要是初始化一些成員函數。initialize也用于初始化成員,它被Task的子類調用,用于子類傳入一些子類中構造的對象。構造函數后面是一系列的setter和getter,還有實現(xiàn)Writable的write和readFields。
localizeConfiguration函數用于將一些和Task相關的信息存放到JobConf里,這也是HadoopMapReduce中重要的參數傳遞方式。
接下來分析的是一系列和Task生命周期相關的函數。


publicvoiddone(TaskUmbilicalProtocolumbilical,TaskReporterreporter)
done被多個方法調用(下圖),用于做結束任務的一些清理工作,步驟如下:
l更新計數器updateCounters();
l如果任務需要提交,設置Taks狀態(tài)為COMMIT_PENDING,并利用TaskUmbilicalProtocol,匯報Task完成,等待提交;然后調用commit提交任務(下面分析)
l設置任務結束標志位;結束Reporter通信線程;
l發(fā)送最后一次統(tǒng)計報告(通過sendLastUpdate方法,很簡單);
l利用TaskUmbilicalProtocol報告結束狀態(tài)(通過sendDone方法,很簡單)。


commit方法被done方法調用,用于等待TaskTracker的可提交信號。通過這種機制,Task可以等待TaskTracker上需要的一些后續(xù)處理,比方說,把Task的結果取走,需要TaskTracker的協(xié)調和確認。commit還會調用org.apache.hadoop.mapreduce.OutputCommitter的commitTask方法,執(zhí)行一些子類需要的commit事件處理。
runJobCleanupTask,runJobSetupTask和runTaskCleanupTask應用在Maptask和ReduceTask的run方法中,用于做一些準備和可能的清除任務。
runJobSetupTask:為建立Job做準備,執(zhí)行狀態(tài)設置,然后調用org.apache.hadoop.mapreduce.OutputCommitter的setupJob,最后通過done,通知TaskTracker任務完成。
runJobCleanupTask:清理Job,包括步驟狀態(tài)設置,更新狀態(tài)到TaskTracker,調用org.apache.hadoop.mapreduce.OutputCommitter的相關方法,通過done,通知TaskTracker任務完成。
runTaskCleanupTask:清理Task任務,和runJobCleanupTask類似。
應該說,這些方法只是提供了一個通用的框架,具體需要的執(zhí)行,在于org.apache.hadoop.mapreduce.OutputCommitter的具體實現(xiàn)。本節(jié)關于Hadoop源代碼中的類Task相關內容介紹完畢。

【編輯推薦】

  1. 學習筆記 Hadoop集群如何搭建
  2. Hadoop0.20.2集群配置入門指導手冊
  3. Hadoop文件系統(tǒng)如何快速安裝?
  4. Hadoop集群搭建過程中相關環(huán)境配置詳解
  5. Hadoop完全分布模式安裝實現(xiàn)詳解

 

責任編輯:佚名 來源: javaeye.com
相關推薦

2010-06-07 11:12:52

Hadoop-0.20

2010-03-12 14:28:45

Python if語句

2010-03-16 14:48:02

云計算

2009-06-12 19:03:41

Hadoop源代碼Yahoo

2010-02-05 18:00:18

Android源代碼

2010-06-03 18:32:51

Hadoop

2011-08-01 16:42:24

ibmdwNFS文件系統(tǒng)

2010-02-26 10:24:43

Python源代碼

2010-09-17 09:28:19

Java API

2010-06-02 10:26:06

SVN源代碼管理

2023-07-13 09:28:29

設計模式.NET

2010-01-11 16:59:50

C++源代碼

2015-03-24 15:08:21

mapreducehadoop

2010-09-02 15:54:54

CSS邊界疊加

2010-08-24 16:17:27

CSS簡寫

2010-06-03 13:08:51

2010-02-04 13:45:36

C++類模板

2010-06-03 10:22:17

Hadoop入門

2009-07-17 16:49:18

lookandfeelSwing

2010-08-16 13:03:37

IP路由選擇
點贊
收藏

51CTO技術棧公眾號