簡體   English   中英

如何通過修改org.apache.hadoop.hbase.mapreduce.RowCounter處理hbase中的大數據?

[英]How to process huge data in hbase by modifying org.apache.hadoop.hbase.mapreduce.RowCounter?

我的hbase表包含數百萬行。 如果我們進行掃描,則至少需要一個小時才能顯示所有記錄。 我們將日期存儲為行鍵。 我需要獲取日期的最小值和最大值。 我看到了一個實用程序org.apache.hadoop.hbase.mapreduce.RowCounter,它在5分鍾內計數了數百萬行。 有沒有辦法以同樣的方式來完成我的工作? 僅供參考:我正在使用Java。

如果您使用的是HBase 0.98,那么您的問題應該很容易。 您要做的就是獲取表中的第一行和最后一行(因為條目是有序的):

  • 通過執行限制為1的掃描獲得的第一行。
  • 通過限制為1的反向掃描獲得的最后一行。

您可以在此處找到有關反向掃描的更多信息: https : //issues.apache.org/jira/browse/HBASE-4811

如果使用的是HBase的早期版本,則應考慮為表使用某些模型/約定。 第一行很容易獲得(再次對表進行一次掃描,限制為1),但是對於最后一行,不幸的是您沒有反向掃描功能。

  1. 您可以設計為具有“倒置”表,如下所述: http : //staltz.blogspot.com/2012/05/first-and-last-rows-in-hbase-table.html
  2. 由於您將日期用作行鍵,因此很有可能無法以降序的方式接收數據(請參閱項目1上的博客文章)。因此,您可以保留一個輔助表,始終將其保留在日期的最小值和最大值(也意味着您必須對插入/刪除並更新輔助表的每個記錄的代碼進行檢查。
  3. 重新設計您存儲數據的方式。 建議將初始表加上反向索引表並保留在反向索引表中,以存儲數據(在行鍵上),例如:MAX_INTEGER-dataTimestamp,因此最新日期將是您在反向表上的第一個條目然后通過掃描(限制為1)來檢索它。

由於HBase 0.98的解決方案非常簡單,無需進行解決,因此,如果您沒有該版本,我建議進行遷移。

您的方向正確。 RowCounter的用法是對Hbase行進行計數的有效方法,該行有數百萬條記錄。 您可以獲取RowCounter的源代碼並進行一些調整以實現您的要求

  1. Rowcounter將在內部執行掃描。 那么它為什么運行很快,是因為Map中的並行性降低了。 我想,一旦您進行了掃描,就可以隨時保留過濾器。 因此,您可以識別該段代碼並為其添加過濾器。
  2. 現在,通過上述更改,您的行計數器將對符合該過濾條件的行進行計數。 要擴展它,您可以參數化,列族,列限定符,值,運算符等。

希望對您的事業有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM