2 回答

TA貢獻1775條經驗 獲得超8個贊
一、通常向HBase批量導入數據有三種常用方式
1、使用HBase提供的TableOutputFormat,原理是通過一個Mapreduce作業將數據導入HBase
2、還有一種方式就是使用HBase原生Client API(put)
3、前兩種方式因為須要頻繁的與數據所存儲的RegionServer通信。一次性入庫大量數據時,特別占用資源,所以都不是很有效。因為HBase在HDFS中是以HFile文件結構存儲的,所以高效便捷的方法就是直接生成HFile文件然后使用Bulk Load方法,即HBase提供的HFileOutputFormat類。
二、Bulk Load基本原理
Bulk Load處理由兩個主要步驟組成:
1、生成HFile文件
Bulk Load的第一步會執行一個Mapreduce作業,其中使用到了HFileOutputFormat輸出HBase數據文件:StoreFile。
HFileOutputFormat的作用在于使得輸出的HFile文件能夠適應單個region。使用TotalOrderPartitioner類將map輸出結果分區到各個不同的key區間中,每一個key區間都相應著HBase表的region。
2、導入HBase表
第二步使用completebulkload工具將第一步的結果文件依次交給負責文件相應region的RegionServer,并將文件move到region在HDFS上的存儲文件夾中。一旦完畢。將數據開放給clients。
假設在bulk load準備導入或在準備導入與完畢導入的臨界點上發現region的邊界已經改變,completebulkload工具會自己主動split數據文件到新的邊界上。可是這個過程并非最佳實踐,所以用戶在使用時須要最小化準備導入與導入集群間的延時,特別是當其它client在同一時候使用其它工具向同一張表導入數據。
Bulk Load常遇到的一個ERROR:”java.io.IOException: Retry attempted 10 times without completing, bailing out”
錯誤解析:
我們使用的Hbase1.0.2版本下,如果Hfile文件 跨越多個region,bulkload會自動地將Hfile文件split,但是對于每次retry只會將指定的Hfile文件split一次。但是在hbase-site.xml配置文件里有個參數hbase.bulkload.retries.number控制了hbase對一個hfile最多plit多少次。這個參數默認是10,如果某個hfile跨越的region數超過10個就會報上述Exception。
解決方案:
將hbase.bulkload.retries.number這個參數設置為更大的值,比如目標表的region數量或者將這個參數設置成0,0表示不斷重試直到成功。設置之后問題解決。

TA貢獻1810條經驗 獲得超4個贊
1HBase的定義
HBase是一個高可靠性、高性能、面向列、可伸縮的分布式存儲系統。
適合于存儲大表數據(表的規??梢赃_到數十億行以及數百萬列),并且對大表數據的讀、寫訪問可以達到實時級別。利用Hadoop HDFS(Hadoop Distributed File System)作為其文件存儲系統,提供實時讀寫的數據庫系統;利用ZooKeeper作為協同服務。
2HBase的架構
3HBase的適用場景
HBase適合具有如下需求的應用:
o海量數據(TB、PB)
o高吞吐量
o需要在海量數據中實現高效的隨機讀取
o需要很好的性能伸縮能力
o能夠同時處理結構化和非結構化的數據
o不需要完全擁有傳統關系型數據庫所具備的ACID特性
4成功應用場景案例
項目背景
某銀行僅支持查詢最近一年的賬戶歷史交易情況,超過一年的查詢需要特殊申請,由專人進行人工查詢
原因:
o傳統數據庫無法存儲海量數據。
o大數據量下查詢性能急劇下降。
HBase的優勢
o海量數據(TB、PB):可由查詢一年變為十年或更多
o高效隨機讀?。翰樵兂^一年的數據與查詢最近數據同樣高效
- 2 回答
- 0 關注
- 314 瀏覽