1
我讀教程的MapReduce與合 http://www.tutorialspoint.com/map_reduce/map_reduce_combiners.htm如果沒有合成階段的縮減器,減速器的輸入將會是什麼?
減速機接收來自組合下面輸入
<What,1,1,1> <do,1,1> <you,1,1> <mean,1> <by,1> <Object,1>
<know,1> <about,1> <Java,1,1,1>
<is,1> <Virtual,1> <Machine,1>
<How,1> <enabled,1> <High,1> <Performance,1>
我的疑問是,如果我跳過組合,並允許映射到輸出傳遞到 的無需執行任何分組操作(不使用組合器),並允許它通過混洗和分類階段。
減法器在映射階段結束後經過混洗和排序階段後會接收到什麼輸入?
我可以檢查減速機接收到什麼輸入嗎?
我想在上面的示例教程中指出reducer運行兩次,如果我們使用組合器。一次執行分組並再次發出輸出。我在reducer代碼中使用了system.out .println,並在日誌中看到了輸出。最初它執行分組,然後減速器發出。 mapreduce的結果與使用和不使用combiner相同。 –
raj
這是錯誤的'一旦執行分組並再次發出輸出'。組合操作在映射器的輸出上運行,這通常是給定鍵的值的子集,它們沒有被混洗和排序。只有一次減少運行,您才能保證擁有某個鍵的所有鍵/值對。因此,在這種情況下,組合器可以進行一些前期聚合以減少通過網絡發送的數據量,然後減少運行完成作業。 –
我的意思是說減速機起到組合器以及減速機的作用。最初在減速器的for循環中,執行給出組合器輸出的字的求和,然後將該輸出作爲減速器階段的輸入。現在,對於的val.get將給出3,並且同樣由reducer發出作爲最終輸出。 –
raj