# 1、什麼是MapReduce 1. Hadoop MapReduce 是一個 `分散式計算框架`,用於輕鬆編寫分散式應用程式,這些應用程式以可靠,容錯的方式並行處理大型硬體集群(數千個節點)上的大量數據(多TB數據集) 2. MapReduce 是一種`面向海量數據`處理的一種指導思想,也是一種 ...
1、什麼是MapReduce
- Hadoop MapReduce 是一個
分散式計算框架
,用於輕鬆編寫分散式應用程式,這些應用程式以可靠,容錯的方式並行處理大型硬體集群(數千個節點)上的大量數據(多TB數據集) - MapReduce 是一種
面向海量數據
處理的一種指導思想,也是一種用於對大規模數據進行分散式計算的編程模型。
2、Map Reduce的優缺點
2.1 優點
MapReduce易於編程:
它簡單的實現一些介面,就可以完成一個分散式程式良好的擴展性:
當你的計算資源不能得到滿足的時候,你可以通過簡單的增加機器來擴展它的計算能力。高容錯性:
MapReduce設計的初衷就是使程式能夠部署在廉價的PC機器上,這就要求它具有很高的容錯性。比如其中一臺機器掛了,它可以把上面的計算任務轉移到另外一個節點上運行,不至於這個任務運行失敗,而且這個過程不需要人工參與,而完全是由Hadoop內部完成的。適合PB級以上海量數據的離線處理:
可以實現上千台伺服器集群併發工作,提供數據處理能力。
2.2 缺點
實時計算性能差:
MapReduce 主要應用於離線作業,無法做到秒級或者是亞秒級別的數據響應。不能進行流式計算:
流式計算的輸入數據是動態的,而MapReduce的輸入數據集是靜態的,不能動態變化。這是因為MapReduce自身的設計特點決定了數據源必須是靜態的。不擅長DAG(有向無環圖)計算
多個應用程式存在依賴關係,後一個應用程式的輸入為前一個的輸出。在這種情況下,MapReduce並不是不能做,而是使用後,每個MapReduce作業的輸出結果都會寫入到磁碟,會造成大量的磁碟IO,導致性能非常的低下。
3、 MapReduce進程
一個完整的MapReduce程式在分散式運行時有三類實例進程:
(1)MrAppMaster
:負責整個程式的過程調度及狀態協調。
(2)MapTask
:負責Map階段的整個數據處理流程。
(3)ReduceTask
:負責Reduce階段的整個數據處理流程。
4、MapReduce編程規範
- 用戶編寫的程式代碼分成三個部分: Mapper、Reducer和Driver(客戶端提交作業驅動程式)
- 用戶自定義的Mapper和Reducer都要繼承各自的父類。
Mapper階段
:
- 用戶自定義的Mapper要繼承自己的父類
- Mapper的輸入數據是KV對的形式(KV的類型可自定義)
- Mapper中的業務邏輯寫在map()方法中
- Mapper的輸出數據是KV對的形式(KV的類型可自定義)
- map()方法(MapTask進程)對每一個<K,V>調用一次
Reducer階段
:
- 用戶自定義的Reducer要繼承自己的父類
- Reducer的輸入數據類型對應Mapper的輸出數據類型,也是KV
- Reducer的業務邏輯寫在reduce()方法中
- ReduceTask進程對每一組相同k的<k,v>組調用一次reduce()方法
Driver
: 描述的是提交Job對象需要的各種必要的信息。
MapReduce內置了很多預設屬性,比如: 排序(key的字典序
)、分組(reduce階段key相同的為一組,一組調用一次reduce處理
)等,這些都和數據的K
有關,所以說kv的類型數據確定是及其重要的。
5、常用數據序列化類型
Java類型 | Hadoop Writable類型 |
---|---|
Boolean | BooleanWritable |
Byte | ByteWritable |
Int | IntWritable |
Float | FloatWritable |
Long | LongWritable |
Double | DoubleWritable |
String | Text |
Map | MapWritable |
Array | ArrayWritable |
Null | NullWritable |
本文來自博客園,作者:huan1993,轉載請註明原文鏈接:https://www.cnblogs.com/huan1993/p/17522446.html