我知道,對於迭代算法,Hadoop mapreduce執行效果不佳,因爲它爲每次迭代都執行完整的磁盤讀/寫操作。但爲什麼呢?這是爲了系統的健壯性嗎?爲什麼Hadoop MapReduce在迭代算法的每次迭代中都執行磁盤讀/寫?
回答
你的問題有點寬泛,但仍然會嘗試回答它。
Hadoop對任何算法都執行磁盤讀/寫操作,這是因爲Hadoop執行了面向磁盤的處理,並且是基於此原則構建的。這也是spark開發的原因之一,將計算從磁盤移動到內存,以便減少面向磁盤計算的延遲開銷。
現在,每次MapReduce迭代的從/到磁盤的讀/寫操作都有助於系統的健壯性和可靠性。考慮一個最簡單的例子,工作節點有2個容器,這意味着兩個單獨的JVM將運行在同一臺機器上他們將訪問該節點上可用的相同數據源。因此,如果Hadoop不會在每次更改時在磁盤上讀/寫數據,那麼第二個容器在訪問數據時可能會因更改而未更新,並且可能導致損壞和噪聲輸出。 這是Hadoop爲每個迭代映射縮減算法讀取和寫入磁盤的原因之一。
希望這個答案您的查詢。
嗯,你提到Hadoop是否面向磁盤處理,爲什麼開發人員用這種方式設計?只是爲了更好的魯棒性? –
健壯性是成本效益,靈活性等諸多因素之一。此外,hadoop被設計用於在大型數據集上進行處理,並且爲了實現Doug像大桌面這樣的想法,其中分佈式計算被用於面向磁盤的計算以處理非常大的數據集,並且他們決定採用大表格,因爲這樣他們能夠處理非常大量的數據,而這在以前是不可能的,並且一開始這就是目標。一旦開發人員能夠做到這一點,那麼他們就決定用內存計算來加快速度。 –
所以,除了健壯性,Hadoop MapReduce是這樣做的,因爲那時某些應用程序在面向磁盤的計算的幫助下進行分佈式計算?我的觀點是爲什麼基於內存的處理框架(如Spark)是在面向磁盤的Hadoop MapReduce之後創建的?那是因爲Hadoop當時主要解決分佈式存儲問題,而Spark如果沒有適當的分佈式文件系統就無法顯示其優勢? –
- 1. Hadoop:迭代MapReduce性能
- 2. 如何在Hadoop中迭代MapReduce? (lang:python)
- 3. 在rapidminer的X_validation運算符中迭代每次迭代?
- 4. 每次迭代,延遲執行
- 5. 每次迭代
- 6. rails每個迭代器迭代兩次
- 7. 基於mapreduce和hadoop的迭代kmeans
- 8. C#每次迭代
- 9. 行值@每次迭代
- 10. 每次X迭代都跳過代碼的有效方法?
- 11. doT.js做點什麼每3次迭代
- 12. IF-ELSE迭代:String.contains()每次都失敗
- 13. 第一次迭代時Hadoop迭代器跳過方法調用
- 14. 爲什麼Ruby的每個迭代器在執行中首先執行?
- 15. 的ArrayList在每次迭代
- 16. 在每次迭代中運行查詢
- 17. 如何在UIView的每次迭代中執行操作animateWithDuration
- 18. 功能在每次迭代
- 19. 將迭代計算轉換爲迭代器 - 這叫做什麼?
- 20. System.Timers.Timer在每次迭代
- 21. 迭代文件但每次迭代需要5行
- 22. 謂詞中的計算是否在每次迭代中運行?
- 23. 在每次循環迭代
- 24. 在每次迭代完成後再次迭代函數
- 25. 算法的迭代
- 26. 算法的第一次迭代慢但後續的迭代運行良好
- 27. python中的迭代算法
- 28. fsolve每次迭代的FunEvals
- 29. Async.foreach迭代停止forcely直到第一次迭代執行
- 30. 爲什麼這個迭代div兩次?
你有什麼例子嗎? –