對於比線性鏈更加複雜的問題,會有相關的類庫幫助合理地安排工作流。最簡單的是org.apache.hadoop.mapred.jobcontrol包中的JobControl類。
mapReduce中出傳遞的數據都是<key, value>形式的,並且shuffle排序聚集分發都是按照key值進行的。
map的輸入採用hadoop默認的輸入方式:文件一行作爲value,行號爲key。
reduce的輸入爲map輸出聚集後的結果。即<key, value-list>,如<word, {1,1,1…}>。
在wordCount例子中,map過程切分詞,並將其作爲key,reduce階段按key累加value,兩者之間靠的shuffle將map輸出的key合併到一塊,並將其value都添加到value集合中。shuffle過程不需要手動配置,是系統自動完成的。
單表關聯:表變換後自連接
多表關聯:類似單表關聯,通常邏輯更清晰
mapreduce程序的執行包含四個實體:
客戶端:編寫mapreduce代碼,配置作業,提交作業
JobTraker:初始化作業,分配作業,與TaskTraker保持通信,協調整個作業的執行。
TaskTraker: 保持與JobTraker的通信,在分配的數據片上執行Map和Reduce任務,一個集羣中可以包含多個TaskTraker。
HDFS:保存作業的數據、配置信息等,保存作業結果。