從頭學習大數據培訓課程 hadoop 分散式計算框架(四) mapreducer編程 counter、combiner、壓縮、任務配置
1. counter使用
mapper里設置count
reducer里設置count
在控制台查看count結果
也可以在任務運行之後取得count計數器並輸出
counter默認120可以通過在mapred-site.xml里設置counter最大上限,counter的數量會影響appmaster的性能
2. combiner的使用
設置一個combiner與reducer基本類似,只是去掉了reducer專用的計數器
設置combiner專用的類
debug查看reducer中combiner是否生效
原始輸入數據
reducer中buluo這個key
buluo這個key對應的值從兩個1,變成了2,說明使用combiner在map端已經進行了一次匯總
3. 啟用壓縮
通過api設置
查看輸出文件是否被壓縮
map輸出開啟snappy壓縮,通過conf.set參數設置
4. 命令行參數傳遞
使用命令行設置,包括個性化配置參數傳遞
在map中取出傳遞的自定義配置參數,並根據自定義配置參數設置一個簡單的功能
5. 開發環境使用配置文件
還可以使用map-site.xml配置文件設置,放到resource裡面
會自動放到classs,編譯目錄裡面
6. MR JOB配置文件的載入機制
(1)ToolRunner的run方法中先new Configuration對象,這時這個對象只知道core-default.xml和core-site.xml文件,內部使用的是list(defaultResources)保存已知文件列表。
通過查看內部的properties成員變數發現這時並沒有載入配置信息(最終的配置信息都會被放個成員變數中)
(2)解析-D參數並載入core-default.xml和core-site.xml裡面已有的配置
自定義的-D參數被放到overlay成員變數中這時的properties已經被載入了配置信息,裡面的信息包括core-default.xml和core-site.xml裡面的配置和自定義的-D參數。
通過以上流程發現Configuration載入配置文件使用的是懶載入機制,也就是只有使用的時候才會被載入
(3)Job.getInstance會生成新的job對象,這時新成生的Configuration對象就知道了 mapred-default.xml、 mapred-site.xml、 yarn-default.xml、yarn-site.xml文件,原理就是把這些文件名載入到名為defaultResources的list中
(4)新生成的Configuration對象複製了原來Configuration對象的overlay屬性,但並沒有複製原來對象的properties屬性。因為在使用的時候會重新載入。複製overlay屬性是為了保留-D參數配置
(5)當使用Configuration的get方法時就啟動了載入機制。
(6)讀取XML文件並載入,載入文件的順序是先core-default.xml、core-site.xml、mapred-default.xml、 mapred-site.xml、 yarn-default.xml、yarn-site.xml,後載入的參數會覆蓋默認的參數。如果有-D參數與配置文件里的參數相同會使用自定義的-D參數取代配置文件的參數
獲取配置文件地址的方法是使用classLoader.getResource(name)獲取配置文件的絕對地址(7)通過job api設置的參數也會出發conf.set但最終的配置信息會被放到updatingResource中,最終會被合併到properties中
(8)最終生成job.xml文件,這個文件是任務運行中使用的所有配置,這個文件會在整個mapreducer運行之後被刪除。
job.xml 中描述了配置信息並註明了相關配置的來源
總結:ToolRunner運行job載入配置文件的順序
(1)先載入默認並解析合併命令行(-D)參數(2)生成job使用新的配置對象但會保留命令行(-D)參數(3)解析各site文件併合並命令行(-D)參數
(4)保留job api設置的參數(5)根據各配置參數生成最終的job.xml文件使用的類包括
ToolRunner、Job、ConfigUtil、Configuration推薦閱讀:
※從頭學習大數據培訓課程 hadoop 分散式計算框架(八) semijoin,distributedcache 使用,排序,
※數據之路(Hadoop)我該如何打好基礎?
※什麼是自助式BI?和傳統BI(商業智能)相比有何優劣勢?
※下載prebuilt版的Spark後,必須運行sbt/sbt assembly 後才能使用嗎?
※如何進入大數據領域,學習路線是什麼?