我需要根據時間範圍獲取數據。是否有任何方法根據時間範圍對hbase表進行分區。例如:我想要從9點到9點05分的數據。Hbase表可以基於時間進行分區嗎?
回答
您可以將時間戳作爲密鑰的第一部分。顯然,缺點是你不能再直接查詢其他密鑰。如果你也需要這些,你可以考慮複製你的數據,如果這些對你來說都很重要的話。
對我來說,問題是重複的條目。我可以同時發生許多事件。例如:我可以在10:05發生10個事件。如果我將它轉換爲紀元時間並插入它,它們可以在hbase中相互覆蓋(或無法寫入)。
我可以附加一個ID與時間戳,但我可以設置開始和結束時間mapreduce作業,如果我添加此ID?
您可以創建類型爲<timestamp><id>
的複合密鑰,然後hbase中的所有條目將按時間戳排序。然後,您可以創建一個掃描儀,該掃描儀在範圍的開始處開始,並在範圍的末尾結束。
您可能會遇到的一個問題是,如果您的插入率很高,那麼您將有一臺服務器成爲所有新條目的熱點。解決方法之一是反轉鍵,並確保第一部分是隨機的:<sha1 of ID><timestamp>
。這具有在整個集羣中分佈寫入的優點,但是需要讀取整個表以獲得特定範圍的缺點。
如果您使用第一種方法<timestamp><id>
,那麼您的地圖作業可能無法將作品拆分爲儘可能多的塊。默認方式表拆分工作在區域上。如果時間片足夠小,則可以讓一個區域服務於數據,而不會在查詢中獲得任何並行性。您可能會有一個自定義表格拆分,將查詢並行化到比地區更多的映射器上,但是您仍然會讀取來自一個區域的所有數據,並且也可能具有並行性的缺點。
設置表格的方式取決於您的預計使用場景和讀寫比例以及您需要爲每個表現設置多高。
如果您追加一個id到您的時間戳以確保唯一性,那麼您仍然可以讓掃描儀返回具有給定時間戳的所有事件。 HBase根據字節表示對光標進行排序。因此,如果您的密鑰是<timestamp>:<id>
,您可以將掃描儀設置爲從第<timestamp>
行開始,並停止在<timestamp+1>
的行以獲取該時間戳的所有事件
- 1. 我可以在awk中進行基於時間的進度嗎?
- 2. 基於可變時間戳記錄如何對數據進行分區 - SQL
- 3. 我可以在SQL Server的時區之間進行轉換嗎?
- 4. 基於時間參考的Mysql分區
- 5. 基於另一個表中的列對MySQL表進行分區
- 6. 加入相關實體時可以指定基於日期的分區鍵嗎?
- 7. 基於元組中的值對列表進行分區 - Python
- 8. 我可以對C#System.Threading.ThreadPool進行分區嗎?
- 9. 瀏覽器窗口之間可以進行基於事件的通信嗎?
- 10. 可以將GWT與基於JavaScript的框架進行比較嗎?
- 11. 基於列和時間戳的Hbase篩選器行
- 12. 訪問HBase的表從蜂巢基於時間戳
- 13. 如何從HBase的表檢索基於時間的數據
- 14. 我應該對錶格進行分區/子分區嗎?
- 15. 我可以在neo4j中搜索基於時間的事件嗎?
- 16. Oracle 10g分區:我可以分區一個子表嗎?
- 17. 基於時間戳分鐘刪除行
- 18. 使用HBase進行分析
- 19. Sql服務器表分區 - 我可以在服務器之間分配表嗎?
- 20. 我可以在運行時區分類型實例嗎?
- 21. 查詢oracle表時,可以跳過特定分區嗎?
- 22. 有人可以分享基於GTX 580的基準排序嗎?
- 23. 基於C++時區的時間
- 24. 基於時區的計算時間
- 25. 基於區間的拆分字符串
- 26. 基於Unix時代的Oracle範圍分區時間戳
- 27. Google App Engine中可以進行長時間輪詢嗎?
- 28. 可以改進SOAP請求的執行時間嗎?
- 29. 基於cron作業時間還是基於服務器時區?
- 30. 對鏈表進行分區