我想在我的Hadoop map reduce程序中爲我所有的Map函數保留一個通用的全局變量。這個變量在所有map函數內部都被重寫了,我該如何同步執行這個操作?Hadoop中所有節點的公共變量
回答
Hadoop是一種「無共享」體系結構,雖然有解決方法可以在映射器或簡化器之間共享某些數據,但無法保證同步。這就是說,如果你想嘗試,你可以使用工作臺來檢查價值。或者,您可以嘗試更改您的密鑰類型並將縮減器的數量設置爲1.然後,您可以保證所有數據都由單個系統看到,並可以在那裏應用您的計數器。但是,這取決於您的數據有多大。
就像TheCowSaysMoo說的那樣,Hadoop沒有任何共享。您可以使用數據庫(如hbase)來獲取同步計數器。有關更多信息,請參閱increment。 我不知道這是不是對你所做的事情過度殺傷,但這是hbase的用途之一。
用戶定義的計數器是全球性的:Map-reduce框架在所有地圖上聚合 ,並減少在作業結束時產生總計。
創建驅動程序
public class Driver{
enum Count {
TOTAL
}
}
添加計數器下面一行在你的映射器
context.getCounter(Count.TOTAL).increment(1);
然後使用下面的代碼你job.submit後讀計數器的值()
Counters counters = job.getCounters();
long missing = counters.findCounter(
Driver.Count.MISSING).getValue();
這種方式使用計數器,你可以跟蹤你的全球計數器。根據我的理解,這應該服務你的目的。
但是在這種方法中,Count是否同步呢? –
基本上所有的增量細節將由TaskTracker發送給Jobtracker,一旦完成工作,它將合併增量。 –
謝謝,但我的問題是我必須訪問我的映射器中遞增的變量的值! –
- 1. 所有頂點的公共變量
- 2. 如何保留共享節點集羣中所有節點進程的變量?
- 3. 私有/公共變量Javascript
- 4. 跨所有節點的Hadoop版本
- 5. C#中的私有/公共變量
- 6. 類中的公共變量
- 7. Scala中的公共變量?
- 8. asp.net中的公共變量
- 9. 如何順序訪問類中的所有公共變量?
- 10. 獲取SWIG中的所有公共變量和方法
- 11. 所有節點上的密碼索引公共屬性
- 12. 通過參數在Hadoop中初始化公共靜態變量
- 13. 公共/私有變量聲明中它
- 14. QML:公共變量
- 15. 角:公共變量
- 16. 如何在laravel中爲所有用戶保留公共變量
- 17. 使用get_object_vars()更新類的所有公共變量的值
- 18. jQuery - 在前節點 - 沒有公共父節點
- 19. Hadoop集羣中的節點數量
- 20. 在erlang shell中啓動公共節點
- 21. 跨節點模塊共享變量
- 22. 如何展開Eclipse中變量視圖中的所有節點?
- 23. 是否有可能解析JavaScript中的對象的所有公共變量?
- 24. 在CoffeeScript中突變公共變量
- 25. 如何在hadoop中的所有減少作業之間共享變量
- 26. 公共類,但私有成員變量?
- 27. 公共變量沒有正確更改
- 28. 爲什麼java.awt.Dimension具有公共變量?
- 29. SAS沒有公共變量合併
- 30. 實體具有「公共」變量
是謝謝,有1減速機是一種可能的解決方案,謝謝! –
有一個reducer會減慢我的計算速度,如同在一個節點上處理一樣好,因爲地圖輸出必須排隊等待這個reducer? –
是的,它會減慢你的計算速度,這就是爲什麼我說它的潛力作爲替代取決於你的數據集有多大減少。其中的一件事情,你必須決定權衡是否值得。 – TheCowGoesMoo