MapReduce框架源碼解析

基礎環境

Version: Hadoop v3.1.2
Example: MultiFileWordCount.java

先看一下整體的流程圖,之後分析源碼,加深對這張圖的理解以及瞭解圖中一些細節的實現。
由於整個流程涉及的代碼很多,這篇只會分析1-5a提交任務到YARN部分,5b-11會在之後的YARN源碼解析的文章中詳細介紹。
在這裏插入圖片描述

源碼解析

程序入口,可以看到實例化了MultiFileWordCount對象並調用了ToolRunner的run方法,非常簡單。
在這裏插入圖片描述
MultiFileWordCount,繼承了Configured,爲了使用getConf和setConf等Configuration相關的操作。實現了Tool接口,重寫了Tool.run方法。

public class MultiFileWordCount extends Configured implements Tool {
ToolRunner.run

在這裏插入圖片描述
然後就是調用MultiFileWordCount中重寫的run方法:
在這裏插入圖片描述

MyInputFormat.class

在MyInputFormat中實現了createRecordReader方法,實例化了一個CombineFileRecordReader對象,該類可以根據大小合併多個文件塊到一個map讀。
在這裏插入圖片描述

Text.class

設置了輸出的key的類,Text遵循UTF-8,支持序列化和反序列化,並且提供一些compare、getLength等函數。
這個代碼就不貼了,是Hadoop基礎包中的一些函數,有興趣可以去看下org/apache/hadoop/io/Text.java

IntWritable.class

設置了輸出的value的類,封裝了int,包含了compare、write等方法。
同屬於Hadoop基礎包中的一些函數,可以參看org/apache/hadoop/io/IntWritable.java

MapClass.class

map階段實現很簡單,繼承了框架接口Mapper並重寫了map方法。
在這裏插入圖片描述

IntSumReducer.class

reduce階段也非常簡單,繼承了框架接口Reducer並重寫了reduce方法。
在這裏插入圖片描述

job.waitForCompletion

提交MapReduce任務入口。
在這裏插入圖片描述

Job.submit

生成JobSubmitter對象並將Job提交到YARN
在這裏插入圖片描述

JobSubmitter.submitJobInternal

提交Job,核心方法之一,大致分爲以下幾個步驟:
1、校驗該job的input和output相關信息的正確性。
2、計算舒服輸入的分片/map數量(input splits)。
3、設置更新需要公用的job conf
4、把job conf和相關jar包copy到HDFS之前建的MapReduce目錄下。
5、提交job,監聽job狀態。

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

YARNRunner.submitJob

核心方法是resMgrDelegate.submitApplication(appContext)
在這裏插入圖片描述

YarnClientImpl.submitApplication

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

總結

以上就是MapReduce提交任務到YARN以及監聽任務狀態的主要代碼了,斷斷續續寫了一週,深刻體會到了Hadoop代碼對一些細節的控制真的非常全面、精簡,讓人看似覺得少考慮了一些情況,但細細一想缺找不出漏洞。
在後續的文章中,會對Hive以及YARN的源碼進行分析Hadoop源碼系列文章目錄

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章