先分後合思想,mr程式分為map和ruduce兩個階段,map階段負責將海量資料分類形成kv鍵值對,reduce階段負責將map階段形成的kv鍵值對分組合併。
1、首先待計算的資料在client端生成切片(邏輯上對資料進行劃分) , 生成的切片個數對應著要啟動多少個maptask程式進行map階段的計算.
2、多個maptask程式是並行執行的,互不相干.
3、在每個maptask中對資料的處理要考慮到很多細節, 是否有分割槽, 如何排序, 資料如何寫磁碟等..
4、多個maptask計算完成後,每個maptask都會有輸出的資料
5、會根據分割槽的個數決定啟動多少個reducetask(邏輯上來說), 實際上是 啟動多少個reducetask就會生成多少個分割槽.
6、每個reducetask會到每個maptask中拷貝自己所要處理的資料,說白了就是對應的分割槽的資料.
7、每個reducetask最終也會輸出最後的結果.
**案例詳見:手寫mr程式之wordcount案例
mr核心思想詳見:mapreduce核心思想
/*
2、 setup(): 在maptask開始執行時呼叫1次.
3、 map() : 為輸入資料的每個kv都呼叫一次map方法.大部分的mapreduce程式都需要重寫該方法.
4、 cleanup(): 在maptask結束前呼叫1次
*/public
void
run(context context)
throws ioexception, interruptedexception
}finally}/*
reducer類
1、 所有的mapreduce程式中的自定義reducer類都需要繼承reducer類.
2、 setup():在reducetask開始執行時呼叫1次
3、 reduce(): 為每個key呼叫1次reduce方法,大部分的mapreduce程式都需要重寫該方法.
map寫出的n個kv,其中會有很多相同的k, 在進入到reduce方法前,會按照k進行分組,把相同k的多個kv對 分成乙個組中. 一組的資料會執行一次reduce方法.
4、 cleanup(): 在reducetask結束前呼叫1次
5、 run(): 控制reducer中的 setup reduce cleanup執行的方法
*/public
void
run(context context)
throws ioexception, interruptedexception }}
finally
}
程式設計的核心思想
1.開閉原則 2.迪公尺特法則 3.單一職責原則 4.介面隔離原則 5.黎克特制替換原則 6.依賴倒轉原則 7.聚合復用原則一.建立型模式 生成器模式 builder pattern 工廠模式 factory method pattern 原型模式 prototype pattern 單例模式 si...
MR優化總結
優化前 1.熟知業務要求 2.熟知資料分布狀態 是否傾斜 是否是多個小檔案等 可以使用取樣來了解資料 通用型優化策略 1.檔案儲存格式 使用更加優化的格式的檔案,例如parquet orc,綜合來說,orc最優。2.檔案壓縮 可以在mr各階段啟用壓縮,例如 資料塊可以被壓縮 reduce輸出可以被壓...
openCV程式設計思想總結(1)
最近發現自己寫 最難得就是開頭,而且就算開頭了,寫到一半會發現自己的 思想十分簡單,執行效率低下,然後看別人寫的 就會有種頓悟的感覺,然後自己的 就相形見絀。所以總結寫別人的 中的精妙之處,所謂君子性非異也,善假於物也。mat tsmresp 1,img roi.rows,cv 32fc1,scal...