1.Mapreduce是什麼? Mapreduce是一個分散式運算程式的編程框架,是用戶開發“基於hadoop的數據分析應用”的核心框架; Mapreduce核心功能是將用戶編寫的業務邏輯代碼和自帶預設組件整合成一個完整的分散式運算程式,併發運行在一個hadoop集群上; 2.作用 (1)海量數據在 ...
1.Mapreduce是什麼?
Mapreduce是一個分散式運算程式的編程框架,是用戶開發“基於hadoop的數據分析應用”的核心框架;
Mapreduce核心功能是將用戶編寫的業務邏輯代碼和自帶預設組件整合成一個完整的分散式運算程式,併發運行在一個hadoop集群上;
2.作用
(1)海量數據在單機上處理因為硬體資源限制,無法勝任
(2)而一旦將單機版程式擴展到集群來分散式運行,將極大增加程式的複雜度和開發難度
(3)引入mapreduce框架後,開發人員可以將絕大部分工作集中在業務邏輯的開發上,而將分散式計算中的複雜性交由框架來處理.
3.mapreduce的shuffle機制
mapreduce中,map階段處理的數據如何傳遞給reduce階段,是mapreduce框架中最關鍵的一個流程,這個流程就叫shuffle;
shuffle: 洗牌、發牌——(核心機制:數據分區,排序,緩存);
具體來說:就是將maptask輸出的處理結果數據,分發給reducetask,併在分發的過程中,對數據按key進行了分區和排序;
Shuffle整體來看,分為3個操作:
1、分區partition
2、Sort根據key排序
3、Combiner進行局部value的合併
4.MAPREDUCE中的Combiner
(1)combiner是MR程式中Mapper和Reducer之外的一種組件
(2)combiner組件的父類就是Reducer
(3)combiner和reducer的區別在於運行的位置:
Combiner是在每一個maptask所在的節點運行
Reducer是接收全局所有Mapper的輸出結果;
(4) combiner的意義就是對每一個maptask的輸出進行局部彙總,以減小網路傳輸量
具體實現步驟:
1、 自定義一個combiner繼承Reducer,重寫reduce方法
2、 在job中設置: job.setCombinerClass(CustomCombiner.class)
(5) combiner能夠應用的前提是不能影響最終的業務邏輯
而且,combiner的輸出kv應該跟reducer的輸入kv類型要對應起來
5,集群運行模式
(1)將mapreduce程式提交給yarn集群resourcemanager,分發到很多的節點上併發執行
(2)處理的數據和輸出結果應該位於hdfs文件系統
(3)提交集群的實現步驟:
A、將程式打成JAR包,然後在集群的任意一個節點上用hadoop命令啟動
$ hadoop jar wordcount.jar cn.itcast.bigdata.mrsimple.WordCountDriver inputpath outputpath
B、直接在linux的eclipse中運行main方法
(項目中要帶參數:mapreduce.framework.name=yarn以及yarn的兩個基本配置)
C、如果要在windows的eclipse中提交job給集群,則要修改YarnRunner類
6.編程規範
(1)用戶編寫的程式分成三個部分:Mapper,Reducer,Driver(提交運行mr程式的客戶端)
(2)Mapper的輸入數據是KV對的形式(KV的類型可自定義)
(3)Mapper的輸出數據是KV對的形式(KV的類型可自定義)
(4)Mapper中的業務邏輯寫在map()方法中
(5)map()方法(maptask進程)對每一個<K,V>調用一次
(6)Reducer的輸入數據類型對應Mapper的輸出數據類型,也是KV
(7)Reducer的業務邏輯寫在reduce()方法中
(8)Reducetask進程對每一組相同k的<k,v>組調用一次reduce()方法
(9)用戶自定義的Mapper和Reducer都要繼承各自的父類
(10)整個程式需要一個Drvier來進行提交,提交的是一個描述了各種必要信息的job對象
7.YARN
Yarn是一個資源調度平臺,負責為運算程式提供伺服器運算資源,相當於一個分散式的操作系統平臺,而mapreduce等運算程式則相當於運行於操作系統之上的應用程式
YARN的重要概念
1、 yarn並不清楚用戶提交的程式的運行機制
2、 yarn只提供運算資源的調度(用戶程式向yarn申請資源,yarn就負責分配資源)
3、 yarn中的主管角色叫ResourceManager
4、 yarn中具體提供運算資源的角色叫NodeManager
5、 這樣一來,yarn其實就與運行的用戶程式完全解耦,就意味著yarn上可以運行各種類型的分散式運算程式(mapreduce只是其中的一種),比如mapreduce、storm程式,spark程式,tez ……
6、 所以,spark、storm等運算框架都可以整合在yarn上運行,只要他們各自的框架中有符合yarn規範的資源請求機制即可
7、 Yarn就成為一個通用的資源調度平臺,從此,企業中以前存在的各種運算集群都可以整合在一個物理集群上,提高資源利用率,方便數據共用