HBase批量加載架構

HBase批量加載過程包含兩個主要步驟。

通過MapReduce作業準備數據

批量加載的第一步是使用HFileOutputFormat2從MapReduce作業生成HBase數據文件(StoreFiles)。這種輸出格式以 HBase 的內部存儲格式寫出數據,以便以後可以非常高效地將其加載到群集中。

為了高效工作,必須對HFileOutputFormat2進行配置,使每個輸出 HFile 適合單個區域。為了做到這一點,輸出將被批量加載到HBase中的作業使用Hadoop的TotalOrderPartitioner類來將映射輸出分區到密鑰空間的不相交範圍中,對應於表中區域的鍵範圍。

HFileOutputFormat2包括一個方便函數,configureIncrementalLoad(),它根據根據表格的當前區域邊界自動設置TotalOrderPartitioner。

完成數據加載

在準備好數據導入之後,無論是通過使用具有“importtsv.bulk.output”選項的importtsv工具,還是使用HFileOutputFormat的其他MapReduce作業,該completebulkload工具都可用於將數據導入到正在運行的集群中。這個命令行工具遍歷準備好的數據文件,並且每個文件確定文件所屬的區域。然後,它會聯繫採用HFile的相應RegionServer,將其移動到其存儲目錄並使數據可供客戶端使用。

如果在批量加載準備過程中或者在準備和完成步驟之間區域邊界發生了變化,completebulkload公用程序會自動將數據文件分成與新邊界相對應的部分。這個過程並不是最佳效率,因此用戶應該注意儘量減少在準備批量加載和將其導入群集之間的延遲,特別是如果其他客戶端同時通過其他方式加載數據。

<code>$ hadoop jar hbase-server-VERSION.jar completebulkload [-c /

path

/to/hbase/

config

/hbase-site.xml] /user/todd/myoutput mytable/<code>

該-c config-file選項可用於指定包含適當的hbase參數的文件(例如,hbase-site.xml)(如果CLASSPATH中尚未提供此參數)(此外,如果zookeeper不是由HBase管理,則CLASSPATH必須包含具有zookeeper配置文件的目錄)。

如果目標表在HBase中不存在,則此工具將自動創建表。


分享到:


相關文章: