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

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

MapReduce編程流程

step1. 首先寫(xiě)map函數(shù)和reduce函數(shù),并使用單元測(cè)試來(lái)確保函數(shù)的運(yùn)行符合預(yù)期兼丰。

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

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

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

用于配置的API

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

使 用 Configuration 類 的 一 般 過(guò) 程 是 : 構(gòu) 造 Configuration 對(duì) 象篡腌, 并 通 過(guò) 類 的addResource() 方法添加需要加載的資源 褐荷;然后就可以使用 get?方法和 set?方法訪問(wèn) / 設(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代表無(wú)法變更米死。final 一般不出現(xiàn)锌历,但在合并資源的時(shí)候,可以防止配置項(xiàng)的值被覆蓋峦筒。

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

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

Configurationconf = new Configuration();

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

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

如果這兩個(gè)配置資源都包含了相同的配置項(xiàng),而且前一個(gè)資源的配置項(xiàng)沒(méi)有標(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接口府蛇,通過(guò)ToolRunner來(lái)運(yùn)行應(yīng)用程序。


補(bǔ)充

參考http://www.reibang.com/p/59d191b4af31

· ToolRunner的主要功能

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

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

· 命令行參數(shù)

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

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

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


用MRUnit來(lái)寫(xiě)單元測(cè)試

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

書(shū)中給出了很多范例掠剑。


補(bǔ)充

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

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

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

2. ReduceDriver澡腾,針對(duì)單獨(dú)的Reduce測(cè)試沸伏。

3. MapReduceDriver ,將Map和Reduce連貫起來(lái)測(cè)試动分。

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


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

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

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

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

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

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

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

· MapReduce的web界面

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

·MapReduce工作流

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

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

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

1. 線性鏈

2. 有向無(wú)環(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è)就是通過(guò)時(shí)間(頻率)和有效數(shù)據(jù)觸發(fā)當(dāng)前的Oozie工作流程

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

用于管理和協(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)系作者
  • 序言:七十年代末娶靡,一起剝皮案震驚了整個(gè)濱河市牧牢,隨后出現(xiàn)的幾起案子看锉,更是在濱河造成了極大的恐慌,老刑警劉巖塔鳍,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伯铣,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡轮纫,警方通過(guò)查閱死者的電腦和手機(jī)腔寡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)掌唾,“玉大人放前,你說(shuō)我怎么就攤上這事∨幢颍” “怎么了凭语?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)撩扒。 經(jīng)常有香客問(wèn)我似扔,道長(zhǎng),這世上最難降的妖魔是什么搓谆? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任炒辉,我火速辦了婚禮,結(jié)果婚禮上泉手,老公的妹妹穿的比我還像新娘黔寇。我一直安慰自己,他們只是感情好斩萌,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開(kāi)白布啡氢。 她就那樣靜靜地躺著,像睡著了一般术裸。 火紅的嫁衣襯著肌膚如雪倘是。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,287評(píng)論 1 301
  • 那天袭艺,我揣著相機(jī)與錄音搀崭,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛瘤睹,可吹牛的內(nèi)容都是我干的升敲。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼轰传,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼驴党!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起获茬,我...
    開(kāi)封第一講書(shū)人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤港庄,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后恕曲,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體鹏氧,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年佩谣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了把还。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡茸俭,死狀恐怖吊履,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情调鬓,我是刑警寧澤艇炎,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站袖迎,受9級(jí)特大地震影響冕臭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜燕锥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一辜贵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧归形,春花似錦托慨、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蔼紧,卻和暖如春婆硬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背奸例。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工彬犯, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留向楼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓谐区,卻偏偏與公主長(zhǎng)得像湖蜕,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子宋列,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

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