2010-12-02 68 views

回答

0

您可以將時間戳作爲密鑰的第一部分。顯然,缺點是你不能再直接查詢其他密鑰。如果你也需要這些,你可以考慮複製你的數據,如果這些對你來說都很重要的話。

0

對我來說,問題是重複的條目。我可以同時發生許多事件。例如:我可以在10:05發生10個事件。如果我將它轉換爲紀元時間並插入它,它們可以在hbase中相互覆蓋(或無法寫入)。

我可以附加一個ID與時間戳,但我可以設置開始和結束時間mapreduce作業,如果我添加此ID?

5

您可以創建類型爲<timestamp><id>的複合密鑰,然後hbase中的所有條目將按時間戳排序。然後,您可以創建一個掃描儀,該掃描儀在範圍的開始處開始,並在範圍的末尾結束。

您可能會遇到的一個問題是,如果您的插入率很高,那麼您將有一臺服務器成爲所有新條目的熱點。解決方法之一是反轉鍵,並確保第一部分是隨機的:<sha1 of ID><timestamp>。這具有在整個集羣中分佈寫入的優點,但是需要讀取整個表以獲得特定範圍的缺點。

如果您使用第一種方法<timestamp><id>,那麼您的地圖作業可能無法將作品拆分爲儘可能多的塊。默認方式表拆分工作在區域上。如果時間片足夠小,則可以讓一個區域服務於數據,而不會在查詢中獲得任何並行性。您可能會有一個自定義表格拆分,將查詢並行化到比地區更多的映射器上,但是您仍然會讀取來自一個區域的所有數據,並且也可能具有並行性的缺點。

設置表格的方式取決於您的預計使用場景和讀寫比例以及您需要爲每個表現設置多高。

如果您追加一個id到您的時間戳以確保唯一性,那麼您仍然可以讓掃描儀返回具有給定時間戳的所有事件。 HBase根據字節表示對光標進行排序。因此,如果您的密鑰是<timestamp>:<id>,您可以將掃描儀設置爲從第<timestamp>行開始,並停止在<timestamp+1>的行以獲取該時間戳的所有事件

相關問題