1. 程式人生 > >大資料(四)

大資料(四)

MapReduce不擅長什麼         實時計算                 像MySQL一樣,在毫秒級或者秒級內返回結果         流式計算                 MapReduce的輸入資料集是靜態的,不能動態變化                 MapReduce自身的設計特點決定了資料來源必須是靜態的         DAG計算                 多個應用程式存在依賴關係,後一個應用程式的輸入為前一個的輸出 MapReduce程式設計模型         MapReduce將作業job的整個執行過程分為兩個階段:Map階段和Reduce階段         Map階段由一定數量的Map Task
組成                 輸入資料格式解析:InputFormat                 輸入資料處理:Mapper                 資料分組:Partitioner         Reduce階段由一定數量的Reduce Task組成                 資料遠端拷貝                 資料按照key排序                 資料處理:Reducer                 資料輸出格式:OutputFormat InputFormat     檔案分片(InputSplit)方法         處理跨行問題     將分片資料解析成key/value對         預設實現是TextInputFormat     TextInputFormat         Key是行在檔案中的偏移量,value是行內容         若行被截斷,則讀取下一個block的前幾個字元 Split與Block     Block        
HDFS
中最小的資料儲存單位         預設是64MB     Spit         MapReduce中最小的計算單元         預設與Block一一對應     Block與Split         Split與Block是對應關係是任意的,可由使用者控制 Combiner     Combiner可做看local reducer         合併相同的key對應的value(wordcount例子)         通常與Reducer邏輯一樣     好處         減少Map Task輸出資料量(磁碟IO)         減少Reduce-Map網路傳輸資料量(網路IO)     如何正確使用         結果可疊加         Sum(YES!),Average(NO!) Partitioner     Partitioner決定了Map Task輸出的每條資料交給哪個Reduce Task處理     預設實現:hash(key) mod R         R是Reduce Task數目         允許使用者自定義     很多情況需自定義Partitioner         比如“hash(hostname(URL)) mod R”確保相同域名的網頁交給同一個Reduce Task處理 Map和Reduce兩階段
    Map階段         InputFormat(預設TextInputFormat)         Mapper         Combiner(local reducer)         Partitioner     Reduce階段         Reducer         OutputFormat(預設TextOutputFormat)

MapReduce程式設計模型—內部邏輯

MapReduce 2.0架構
Client         與MapReduce 1.0的Client類似,使用者通過Client與YARN互動,提交MapReduce作業,查詢作業執行狀態,管理作業等。 MRAppMaster         功能類似於 1.0中的JobTracker,但不負責資源管理;         功能包括:任務劃分、資源申請並將之二次分配個Map Task和Reduce Task、任務狀態監控和容錯。 MapReduce 2.0容錯性     MRAppMaster容錯性             一旦執行失敗,由YARN的ResourceManager負責重新啟動,最多重啟次數可由使用者設定,預設是2次。一旦超過最高重啟次數,則作業執行失敗。     Map Task/Reduce Task             Task週期性向MRAppMaster彙報心跳;             一旦Task掛掉,則MRAppMaster將為之重新申請資源,並執行之。最多重新執行次數可由使用者設定,預設4次。 資料本地性     什麼是資料本地性(data locality)             如果任務執行在它將處理的資料所在的節點,則稱該任務具有“資料本地性”             本地性可避免跨節點或機架資料傳輸,提高執行效率     資料本地性分類             同節點(node-local)             同機架(rack-local)             其他(off-switch) 推測執行機制     作業完成時間取決於最慢的任務完成時間             一個作業由若干個Map任務和Reduce任務構成             因硬體老化、軟體Bug等,某些任務可能執行非常慢     推測執行機制             發現拖後腿的任務,比如某個任務執行速度遠慢於任務平均速度             為拖後腿任務啟動一個備份任務,同時執行             誰先執行完,則採用誰的結果     不能啟用推測執行機制             任務間存在嚴重的負載傾斜             特殊任務,比如任務向資料庫中寫資料 常見MapReduce應用場景         簡單的資料統計,比如網站pv、uv統計         搜尋引擎建索引 (mapreduce產生的原因)         海量資料查詢         複雜資料分析演算法實現             聚類演算法             分類演算法             推薦演算法             圖演算法