2012-03-27 56 views
0

對不起,我沒有深刻了解的HBase和Hadoop MapReduce的,但我想你能不能幫我找到使用它們的方式,或者你可以建議我需要框架。分佈式多重映射


第一部分

還有就是,我要存儲的地方記錄1流。它們應該可以通過取決於它們的一些鍵來訪問。幾個記錄可以具有相同的密鑰。有相當多的人。我必須通過超時刪除舊記錄。

也有記錄的第2流,這是非常密集了。對於每一個記錄(參數記錄)我需要:得到這樣的說法,記錄的鍵1中sTREM所有記錄,查找第一個相應的記錄,從第1流存儲刪除它,返回結果合併這些的(RES1)兩個記錄。


第二部分

記錄第三流就像是第一次。記錄應該可以通過密鑰訪問(與第一部分的不同)。像往常一樣的幾個記錄將具有相同的密鑰。在第一流中沒有像他們那麼多。我必須通過超時刪除舊記錄。

對於每個RES1(參數記錄)我要:從第3的sTREM的所有記錄與該記錄的另一個關鍵,地圖爲這些記錄RES1作爲參數,減少成結果。第三個流記錄應保持未修改的存儲狀態。


使用相同的密鑰的記錄者優先被存儲在同一個節點,並寧願被節點,其中上運行基於給定的參數記錄的是獲得通過的關鍵記錄,並提出一些操作的過程那個記錄是。


HBase和Hadoop MapReduce適用於我的情況嗎?以及這樣的應用程序應該如何(基本思路)?如果答案是否定的,是否有框架來buld這樣的應用程序?

請提問,如果你不能得到我想要的東西。

+0

我想澄清一下:什麼意思是「他們應該可以通過某些鍵取決於他們」?這是否意味着有一些常見的密鑰集,每個記錄都有一些密鑰> – 2012-03-28 18:53:56

+0

這意味着有一些函數可以計算記錄密鑰,就像散列函數一樣。 – 2012-03-29 07:15:10

+0

我是否理解你有幾條記錄,它們之間是一對多的關係,你想要「動態地」加入它們? – 2012-03-29 09:03:19

回答

1

我與存儲後端技術。前端接受記錄可以是無狀態的,並且可以普遍擴展。

我們有記錄的數據流,我們希望加入他們的飛行。一些記錄應該堅持爲什麼一些(據我所知 - 第一流)是暫時的。
如果我們考慮可擴展性和持久性 - 它可以在單個java進程中使用HashMap來實現隨機訪問的數據,TreeMap用於我們想要存儲的數據排序
現在讓我們來看看如何將它映射到NoSQL技術中以獲得可擴展性和我們需要的性能。
HBase發佈排序地圖。因此它可以成爲流2的良好候選者。如果我們使用我們的密鑰作爲hbase表鍵 - 我們將獲得具有相同密鑰的記錄的數據局部性。
HBase頂層的MapReduce也可用。
流1看起來像瞬時隨機訪問的數據。我認爲支付這些記錄的持久性的代價是沒有意義的 - 所以在內存哈希表中應該這樣做。例如:http://memcached.org/可能存儲的元素將會是具有相同密鑰的記錄列表。
我仍然不能100%確定第三個流的需求,但是需要二級索引(如果它事先已知)可以作爲另一個分佈式映射在應用程序級別上實現。
簡而言之 - 我的建議是爲希望保存和存儲排序的數據選擇HBase,並考慮爲瞬態(但仍然相當大)的數據提供一些更輕量級的解決方案。

+0

謝謝。你的想法非常有用。 – 2012-03-30 07:16:28