Hadoop權(quán)威指南-ch5 MapReduce應(yīng)用開發(fā)

注:本文涉及書中5.1~5.7小結(jié)

MapReduce編程流程

step1. 首先寫map函數(shù)和reduce函數(shù),并使用單元測試來確保函數(shù)的運(yùn)行符合預(yù)期。

step2. 寫一個(gè)驅(qū)動(dòng)程序來運(yùn)行作業(yè)。先從本地IDE中用一個(gè)小的數(shù)據(jù)集來運(yùn)行它,從而改進(jìn)mapper和reducer,使其能夠正確處理類似輸入。

step3. 當(dāng)程序能夠預(yù)期通過小型數(shù)據(jù)集,將其部署到集群中運(yùn)行,不斷通過擴(kuò)展測試用例來改進(jìn)mapper和reducer。

step4. 當(dāng)程序正確執(zhí)行后,可以進(jìn)行優(yōu)化調(diào)整。如做標(biāo)準(zhǔn)檢查、任務(wù)剖析(task profiling)、借助鉤子(hook)。

用于配置的API

Hadoop中的組件是通過Hadoop自己的配置API來配置的。一個(gè)Configuration類的實(shí)例代表配置屬性及其取值的一個(gè)集合。Configuration從資源(.xml文件)中讀取其屬性值。

使 用 Configuration 類 的 一 般 過 程 是 : 構(gòu) 造 Configuration 對(duì) 象, 并 通 過 類 的addResource() 方法添加需要加載的資源 ;然后就可以使用 get?方法和 set?方法訪問 / 設(shè)置配置項(xiàng),資源會(huì)在第一次使用的時(shí)候自動(dòng)加載到對(duì)象中。


補(bǔ)充

Hadoop 配置文件的根元素是 configuration,一般只包含子元素 property。每一個(gè)property 元素就是一個(gè)配置項(xiàng),配置文件不支持分層或分級(jí)。每個(gè)配置項(xiàng)一般包括配置屬性的名稱 name、值 value 和一個(gè)關(guān)于配置項(xiàng)的描述 description ;元素 final 和 Java 中的關(guān)鍵字final 類似,意味著這個(gè)配置項(xiàng)是“固定不變的”,為true代表無法變更。final 一般不出現(xiàn),但在合并資源的時(shí)候,可以防止配置項(xiàng)的值被覆蓋。

合并資源指將多個(gè)配置文件合并,產(chǎn)生一個(gè)配置。

如果有兩個(gè)配置文件,也就是兩個(gè)資源,如 本書5.1.1小節(jié)中core-default.xml 和 core-site.xml,通過 Configuration 類的 loadResources() 方法,把它們合并成一個(gè)配置。代碼如下:

Configurationconf = new Configuration();

conf.addResource(“core-default.xml”);

conf.addResource(“core-site.xml”);

如果這兩個(gè)配置資源都包含了相同的配置項(xiàng),而且前一個(gè)資源的配置項(xiàng)沒有標(biāo)記為final,那么,后面的配置將覆蓋前面的配置。上面的例子中,core-site.xml 中的配置將覆蓋core-default.xml 中的同名配置。如果在第一個(gè)資源(core-default.xml)中某配置項(xiàng)被標(biāo)記為final,那么,在加載第二個(gè)資源的時(shí)候,會(huì)有警告提示。


輔助類GenericOptionsParser,Tool和ToolRunner

GenericOptionsParser是hadoop框架中解析命令行參數(shù)的基本類。它能夠辨別一些標(biāo)準(zhǔn)的命令行參數(shù),能夠使應(yīng)用程序輕易地指定namenode,jobtracker,以及其他額外的配置資源。

通常不直接使用GenericOptionsParser,而是實(shí)現(xiàn)Tool接口,通過ToolRunner來運(yùn)行應(yīng)用程序。


補(bǔ)充

參考http://www.itdecent.cn/p/59d191b4af31

· ToolRunner的主要功能

1. 創(chuàng)建(如果傳入的是null),設(shè)置當(dāng)前tool的Configuration

2. 處理命令行參數(shù)。

· 命令行參數(shù)

在tool的執(zhí)行過程中,有兩個(gè)地方可以讀入命令行參數(shù)

1. main中的args:main函數(shù)中的args得到的是原始的明亮行參數(shù),通常我們會(huì)傳入一些跟hadoop運(yùn)行時(shí)有關(guān)的參數(shù),這中參數(shù)和某個(gè)tool的業(yè)務(wù)邏輯沒啥關(guān)系,這是一般會(huì)通過-D key=val的方式傳入。

2. run中的args:ToolRunner解析參數(shù)的作用是將這些參數(shù)提取并存入Configuration中,便于job提取,同時(shí)將剩余的toolargs傳入run方法中。所以run方法得到的就是tool相關(guān)的args。


用MRUnit來寫單元測試

MRUnit是一個(gè)測試庫,用于將已知的輸入傳遞給mapper或者檢查reducer的輸出是否符合預(yù)期。

書中給出了很多范例。


補(bǔ)充

參考https://blog.csdn.net/xiaocaidexuexibiji/article/details/12053643

根據(jù)不同的測試對(duì)象要采用不同的測試模塊來進(jìn)行,MRUnit針對(duì)不同測試對(duì)象分別使用一下幾種Driver:

1. MapDriver ,針對(duì)單獨(dú)的Map測試

2. ReduceDriver,針對(duì)單獨(dú)的Reduce測試。

3. MapReduceDriver ,將Map和Reduce連貫起來測試。

4. PipelineMapReduceDriver,將多個(gè)Map-Reduce pair貫穿測試。


· 在本地作業(yè)運(yùn)行器上運(yùn)行作業(yè)

1. 通過Tool接口就可以寫MapReduce作業(yè)的驅(qū)動(dòng)程序。

2. Hadoop有本地作業(yè)運(yùn)行器(job runner),它是在MapReduce執(zhí)行引擎運(yùn)行單個(gè)JVM上的MapReduce作業(yè)的簡化版本。

在本地測試驅(qū)動(dòng)程度的方法

法1. 使用本地作業(yè)運(yùn)行器,在本地文件系統(tǒng)的測試文件上運(yùn)行作業(yè)。

法2. 使用一個(gè)mini集群來運(yùn)行。

· 在集群上運(yùn)行作業(yè)

· MapReduce的web界面

Hadoop的web界面用來瀏覽作業(yè)信息,對(duì)于跟蹤作業(yè)運(yùn)行進(jìn)度、查找作業(yè)完成后的統(tǒng)計(jì)信息和日志非常有用。

·MapReduce工作流

復(fù)雜處理過程的解決方法:增加更多的作業(yè),而非增加作業(yè)的復(fù)雜度。

個(gè)人理解:就是利用多個(gè)mapper和reduer將任務(wù)拆分,后一個(gè)mapper的輸入為前一個(gè)mapper的輸出。

1.?MapReduce的工作流(JobControl)有兩種方式:

1. 線性鏈

2. 有向無環(huán)圖(directed acyclic graph, DAG)

2. Apache Oozie


補(bǔ)充

什么是Oozie?

Oozie是一個(gè)管理Hdoop作業(yè)(job)的工作流程調(diào)度管理系統(tǒng)。

Oozie的工作流是一系列動(dòng)作的直接周期圖。

Oozie協(xié)調(diào)作業(yè)就是通過時(shí)間(頻率)和有效數(shù)據(jù)觸發(fā)當(dāng)前的Oozie工作流程

Oozie是Yahoo針對(duì)Apache Hadoop開發(fā)的一個(gè)開源工作流引擎。

用于管理和協(xié)調(diào)運(yùn)行在Hadoop平臺(tái)上(包括:HDFS、Pig和MapReduce)的Jobs。Oozie是專為雅虎的全球大規(guī)模復(fù)雜工作流程和數(shù)據(jù)管道而設(shè)計(jì)。

Oozie圍繞著兩個(gè)核心進(jìn)行:工作流(Workflow)和協(xié)調(diào)器(Coordinator),前者定義任務(wù)拓?fù)浜蛨?zhí)行邏輯,后者負(fù)責(zé)工作流的依賴和觸發(fā)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、系統(tǒng)參數(shù)配置優(yōu)化 1、系統(tǒng)內(nèi)核參數(shù)優(yōu)化配置 修改文件/etc/sysctl.conf,添加如下配置,然后執(zhí)行s...
    張偉科閱讀 3,923評(píng)論 0 14
  • Zookeeper用于集群主備切換。 YARN讓集群具備更好的擴(kuò)展性。 Spark沒有存儲(chǔ)能力。 Spark的Ma...
    Yobhel閱讀 7,602評(píng)論 0 34
  • 大家好,我是第一期《觀自在》學(xué)員的熊晨妤,非常感謝《觀自在》這個(gè)課程讓我有了重生,重新選擇新生活的信念和勇氣...
    顏滿媛閱讀 794評(píng)論 0 0
  • 其實(shí),換個(gè)角度,還可以有第三種說法。 《春游曲》這首詩是長孫皇后于上苑游玩途中,見到一位貌美如花的嬪妃也在此游玩,...
    芃芃其麥遇青禾閱讀 551評(píng)論 0 0
  • 當(dāng)你聽到悅耳的蟬鳴聲,風(fēng)吹過樹葉時(shí)的沙沙聲時(shí),當(dāng)你吃到冰涼多汁的西瓜,舔著冰棍時(shí),當(dāng)你稍微一運(yùn)動(dòng),就揮汗如雨時(shí),當(dāng)...
    故事點(diǎn)讀機(jī)閱讀 1,271評(píng)論 0 0

友情鏈接更多精彩內(nèi)容