思考小問題
統計一個100G大小的文件進行詞頻的解決方法
方法一:如果小文件可以編寫一個小程序,進行遍歷,統計詞頻。
方法二:編寫一個多線程程序,實現併發,比上一個方法更加有效,但是要防止多個線程重複提交(同步互斥問題)。
方法三:程序交給多臺服務器去完成,痛點:需要大量人工參與。
方法四:通過MapReduce框架自動化完成
MapReduce
特點:易於編程(有兩個接口ma--大任務分成小任務,任務分解,reduce---任務彙總),良好的擴展,高容錯性,適合離線處理
是一個編程框架:只需要程序員去設計map,reduce函數
MapReduce語義:相同的key爲一組,調用一次reduce方法,在方法內迭代這一組數據的計算
輸入(key,val)數據集----》map映射成一箇中間結果(k,v)---》reduce(k,v).
先map處理結果作爲reduce的輸入(線性關係),map的輸入的是大數據集的分片split(split窗口機制,大小可以調整,默認split大小近似block大小),默認框架以行爲單位,可以實現分佈式並行運算。
map的數量取決於split的數量 。
reduce的數量取決於程序員的設計partition
MapTask
map的數量一般比reduce多。
框架內部實現機制(分區,排序,寫入磁盤)
map生成<key,value,partition分區>數據,用緩衝區(buffer in memory)暫時存儲,積累一定量後一次性寫入磁盤。
partition的個數決定reduce的個數,reduce連接網絡到各個map中拉取分區。
MapReduce編程模型
Input---->Splitting--->Mapping--->Shuffling--->Reducing--->final result
Mapping:生成鍵值對
shuffing (洗牌):分組、排序、拉取數據
版本區別:
Hadoop 1.x 提現計算向數據移動(移動計算)問題:壓力過大,單點故障
Hadoop 2.x :yarn提供資源管理和調度(RM,AM)
持續更新.......