2013-03-18 39 views
0

我的用例涉及找出有缺陷的物品......說我有一個在hdfs中標記爲好/有缺陷的物品的數百萬的產品清單....我想要找出前10個有缺陷的物品,然後停止。哈託普地圖中的全球價值減少

我正在考慮使用計數器來做到這一點,但它看起來像計數器都在任務跟蹤器級別......所以每個任務跟蹤器都維護它自己的計數器副本,直到作業完成纔會真正聚合。因此,如果另一個地圖已經找到了10個項目,那麼在一個分組的地圖作業中運行的計數器就不會有任何想法。

有關如何解決此問題的任何想法?

回答

1

查找地圖任務中的本地前10條記錄並將它們發送到減速器。所以,如果有7個mapper,那麼reducer將會獲得70條記錄。減速器必須對這70條記錄進行排序併發布全球前10條記錄。 Here是相同的代碼。

請注意,這種方法只適用於單個reducer而不適用於1+ reducer,這可能是一個瓶頸。此外,映射器之間沒有交流,所以無法減輕減速器的負擔。檢查這papers,其中映射器可以使用全局數據相互交談。 IBM BigInsights implements它。

檢查this博客條目的模式很多。

+0

謝謝Praveen。這真的很有幫助! – 2013-03-19 22:54:55

0

假設您正在使用Hadoop,計數器也可在全球範圍內使用。

但是,我不明白爲此問題使用Map Reduce背後的原因。

+0

歡迎來到Stack Overflow!像這樣的東西更適合作爲評論,當你達到50的聲望時,你將能夠做出評論。 – 2013-03-18 23:42:06