Shell 流程控制
547
2025-04-01
1. MapReduce 概述
1.1 MapReduce 定義
MapReduce 是一個分布式運算程序的編程框架,是用戶開發“基于 Hadoop 的數據分析
應用”的核心框架。
MapReduce 核心功能是將用戶編寫的業務邏輯代碼和自帶默認組件整合成一個完整的
分布式運算程序,并發運行在一個 Hadoop 集群上。
1.2 MapReduce 優缺點
1.2.1 優點
1)MapReduce 易于編程
它簡單的實現一些接口,就可以完成一個分布式程序,這個分布式程序可以分布到大量
廉價的 PC 機器上運行。也就是說你寫一個分布式程序,跟寫一個簡單的串行程序是一模一
樣的。就是因為這個特點使得 MapReduce 編程變得非常流行。
2)良好的擴展性
當你的計算資源不能得到滿足的時候,你可以通過簡單的增加機器來擴展它的計算能力。
3)高容錯性
MapReduce 設計的初衷就是使程序能夠部署在廉價的 PC 機器上,這就要求它具有很高
的容錯性。比如其中一臺機器掛了,它可以把上面的計算任務轉移到另外一個節點上運行,
不至于這個任務運行失敗,而且這個過程不需要人工參與,而完全是由 Hadoop 內部完成的。
4)適合 PB 級以上海量數據的離線處理
可以實現上千臺服務器集群并發工作,提供數據處理能力。
1.2.2 缺點
1)不擅長實時計算
MapReduce 無法像 MySQL 一樣,在毫秒或者秒級內返回結果。
2)不擅長流式計算
流式計算的輸入數據是動態的,而 MapReduce 的輸入數據集是靜態的,不能動態變化。
這是因為 MapReduce 自身的設計特點決定了數據源必須是靜態的。
3)不擅長 DAG(有向無環圖)計算
多個應用程序存在依賴關系,后一個應用程序的輸入為前一個的輸出。在這種情況下,
MapReduce 并不是不能做,而是使用后,每個 MapReduce 作業的輸出結果都會寫入到磁盤,
會造成大量的磁盤 IO,導致性能非常的低下。
1.3 MapReduce 核心思想
(1)分布式的運算程序往往需要分成至少 2 個階段。
(2)第一個階段的 MapTask 并發實例,完全并行運行,互不相干。
(3)第二個階段的 ReduceTask 并發實例互不相干,但是他們的數據依賴于上一個階段
的所有 MapTask 并發實例的輸出。
(4)MapReduce 編程模型只能包含一個 Map 階段和一個 Reduce 階段,如果用戶的業
務邏輯非常復雜,那就只能多個 MapReduce 程序,串行運行。
總結:分析 WordCount 數據流走向深入理解 MapReduce 核心思想。
1.4 MapReduce 進程
一個完整的 MapReduce 程序在分布式運行時有三類實例進程:
(1)MrAppMaster:負責整個程序的過程調度及狀態協調。
(2)MapTask:負責 Map 階段的整個數據處理流程。
(3)ReduceTask:負責 Reduce 階段的整個數據處理流程。
1.5 官方 WordCount 源碼
采用反編譯工具反編譯源碼,發現 WordCount 案例有 Map 類、Reduce 類和驅動類。且
數據的類型是 Hadoop 自身封裝的序列化類型。
1.6 常用數據序列化類型
除了 Text 類型的其他類型都是在Java類型的后面加了 Writable
1.7 MapReduce 編程規范
用戶編寫的程序分成三個部分:Mapper、Reducer 和 Driver。
1. Mapper 階段
( 1 ) 用戶自定義的Mapper要繼承自己的父類
( 2 ) Mapper的輸入數據是KV對(K:偏移量,V:對應的內容)的形式(KV的類型可自定義)
( 3 ) Mapper中的業務邏輯寫在map()方法中
( 4 ) Mapper的輸出數據是KV對的形式(KV的類型可自定義)
( 5 ) map() 方法(MapTask進程)對每一個
2. Reducer 階段
( 1 ) 用戶自定義的Reducer要繼承自己的父類
( 2 ) Reducer的輸入數據類型對應Mapper的輸出數據類型,也是KV
( 3 ) Reducer的業務邏輯寫在reduce()方法中
( 4 ) ReduceTask進程對每一組相同k的
3. Driver 階段
相當于YARN集群的客戶端,用于提交我們整個程序到YARN集群,提交的是封裝了MapReduce程序相關運行參數的job對象
Hadoop MapReduce
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。