對於MapReduce的理解


一、MapReduce的優缺點:

優點:
1.易於編程;
2.良好的擴展性;
3.高容錯性;
4.適合PB級別以上的大數據的分布式離線批處理。

缺點:
1.難以實時計算(MapReduce處理的是存儲在本地磁盤上的離線數據)
2.不能流式計算(MapReduce設計處理的數據源是靜態的)
3.難以DAG計算(有向無環圖計算,由於多個任務存在依賴關系,后一個應用
的輸入是前一個應用的輸出。解決這一問題的方式有Apache的Tez計算框架,
它是基於hadoop Yarn之上的DAG計算框架,它將MapReduce任務分解為多個子任務
同時可以把多個Map/ Reduce任務合並成一個大的DAG任務,這樣當前一個任務完成
之后,直接將結果輸出給下一個任務,不用將結果寫到磁盤之上,減少了Map/Reduce
之間的文件存儲。同時合理的組合其子過程,減少了任務的運行時間。)

二、Map/Reduce的Map階段和Reduce階段:

Map階段由一定數量的Map Task組成:
1.輸入數據的解析格式:InputFormat(默認TextInputFormat)
2.輸入數據的處理:采用自定義的Mapper
【3.Combiner:Local Mini Reducer,運行在Map Task,屬於Map階段,對Map任務輸出的結果進行一次簡單的
Reduce以使得更少的數據被寫入到磁盤和傳遞給Reduce。】
4.數據分區Partitioner:(將Mapper處理的數據寫在本地,並確定Map結果交給哪一個
Reduce來做處理)

Reduce階段由一定數量的Reduce Task組成:
1.遠程拷貝Map階段的輸出結果
2.對數據按照key進行分組排序(shuflle & sort:group values by keys)
3.數據處理:自定義的Reduce
4.輸出數據到HDFS:OutputFormat(默認TextOutputFormat)

 

小結:MapReduce適合離線處理大批量的數據,在Map階段結束之后將數據大量的
寫入磁盤,然后再交給Reduce階段去處理。這樣的話數據的處理效果相對
較慢,並且不利於實時計算、流式計算和DAG計算,但是這樣的一個好處就
是:將數據寫入磁盤,出於系統的容錯考慮,避免了系統出錯帶來的數據的
的丟失。整體來說,MapReduce的處理效果還是不錯的,尤其對於大數據的
分布式、高容錯批處理。並且系統的良好的可擴展性也是有很大的優勢的。


三、JobTracker 和 Tasktracker:
JobTracker:
1.負責資源的管理和作業的調度
2.將作業分解成多個任務Task,指派給TaskTracker
3.負責任務的監控和錯誤日志的處理

TaskTracker:
1.負責運行MapTask 和 ReduceTask
2.與JobTracker進行交互,執行JobTracker下達的命令,
並定期向JobTracker匯報任務狀態。

*** MapTask相當於Mapper的引擎,ReduceTask相當於Reducer的引擎 ***


四、MapReduce的數據本地性:

任務與運行任務所需的數據處在同一個節點上,則稱該任務具有數據本地性。
數據本地性分為三個類別:同節點(node-local)、同機架(rack-local)、
跨機架(off-switch)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM