資料匯入終章:如何將HBase的資料匯入HDFS?

大資料頻道發表於2018-10-15

我們的最終目標是將資料匯入Hadoop,在之前的章節中,我們介紹瞭如何將傳統關聯式資料庫的資料匯入Hadoop,本節涉及到了HBase。HBase是一種實時分散式資料儲存系統,通常位於與Hadoop叢集相同的硬體上,或者與Hadoop叢集緊密相連,能夠直接在MapReduce中使用HBase資料,或將其匯入HDFS,這是選擇HBase作為解決方案的巨大優勢之一。

(注:本文為《Hadoop從入門到精通》大型專題的第五章內容,本專題的其他文章見文末連結,專題的上半部也將於不久之後與大家見面,請持續關注本專題!)

實踐:將HBase資料匯入HDFS

如果將要在MapReduce中使用的客戶資料與HDFS中的資料結合使用,那該怎麼辦?可以編寫一個MapReduce作業,該作業將HDFS資料集作為輸入,並直接從HBase的map或reduce程式碼中提取資料。但在某些情況下,將HBase中的資料直接轉儲到HDFS可能更有用,特別是如果計劃在多個MapReduce作業中使用該資料並且HBase資料不可變或不經常更改。

問題

將HBase資料匯入HDFS

解決方案

HBase包含一個Export類,可用於將HBase資料以SequenceFile格式匯入HDFS。此技術還介紹了可用於讀取匯入的HBase資料程式碼。

討論

在開始使用這種技術之前,需要啟動並執行HBase。

為了能夠從HBase匯出資料,首先需要將一些資料載入到HBase。載入器建立一個名為stocks_example的HBase表,其中包含一個列族的詳細資訊,我們將HBase資料儲存為Avro二進位制序列化資料,此部分程式碼就不列舉了。

執行載入程式並使用它將樣本資料載入到HBase中:

可以使用HBase shell檢視負載結果。list命令(不帶任何引數)將顯示HBase中的所有表,而帶有單個引數的scan命令將轉儲表的所有內容:

有了這些資料,我們就可以將其匯出到HDFS了。HBase附帶了一個轉儲HBase表的org.apache.hadoop.hbase.mapreduce.Export類。以下程式碼段顯示了使用Export類的示例。使用此命令,可以匯出整個HBase表:

Export類還支援只匯出單個列族,還可以壓縮輸出:

Export類以SequenceFile格式寫入HBase輸出,其中HBase行鍵使用org.apache.hadoop.hbase.io .ImmutableBytesWritable儲存在SequenceFile記錄鍵中,HBase值使用org.apache.hadoop.hbase.client.Result儲存在SequenceFile記錄值中.。

如果要在HDFS中處理匯出的資料,該怎麼辦?以下列表顯示瞭如何讀取HBase SequenceFile並提取Avro記錄的示例。

程式碼5.3 讀取HBase SequenceFile以提取Avro記錄

可以針對用於匯出的HDFS目錄執行程式碼並檢視結果:

HBaseExportedStockReader類能夠讀取和轉儲HBase的Export類使用的SequenceFile內容。

使用內建的HBase Export類可以更輕鬆地將HBase中的資料匯出到HDFS中。但是,如果不想將HBase資料寫入HDFS,而是想直接在MapReduce作業中處理它,該怎麼辦?讓我們看看如何使用HBase作為MapReduce作業的資料來源。

實踐:使用HBase作為 MapReduce的 資料來源

內建的HBase匯出器使用SequenceFile輸出HBase資料,除了Java之外的程式語言不支援它,並且不支援模式演變。它僅支援Hadoop檔案系統作為資料接收器。如果想要更多地控制HBase資料提取,可能需要其他HBase工具。

問題

希望直接在MapReduce作業中對HBase進行操作,而無需將資料複製到HDFS的中間步驟。

解決方案

HBase有一個TableInputFormat類,可以在MapReduce作業中使用,直接從HBase中提取資料。

討論

HBase提供了一個名為TableInputFormat的InputFormat類,它可以將HBase用作MapReduce中的資料來源。以下程式碼顯示了一個MapReduce作業,它使用此輸入格式(透過TableMapReduceUtil.initTableMapperJob呼叫)從HBase讀取資料。

程式碼5.4 使用MapReduce將HBase資料匯入HDFS

可以按如下方式執行此MapReduce作業:

$ hip hip.ch5.hbase.ImportMapReduce --output output

快速檢視HDFS,告訴MapReduce作業是否按預期工作:

此輸出確認MapReduce作業按預期工作。

總結

TableInputFormat類檢查HBase併為每個HBase表區域建立輸入拆分。如果有10個HBase region,則將執行10個map任務。輸入格式還包括在輸入拆分中託管region的伺服器,這意味著map任務將被安排在與託管資料的HRegionServer相同的節點上執行。這提供了HBase level的位置,也提供了HDFS level的位置。從該區讀取的資料可能來自本地磁碟,因為一段時間後,所有區的資料都將是本地的。這一切都假定HRegionServers與DataNode在同一主機上執行。

我們的最後關注點是持久儲存,包括對關聯式資料庫和HBase。接下來,我們將改變方向,看看如何利用kafka將資料匯入Hadoop。

相關文章:

1、《第一章:Hadoop生態系統及執行MapReduce任務介紹!》連結: http://blog.itpub.net/31077337/viewspace-2213549/

2、《學習Hadoop生態第一步:Yarn基本原理和資源排程解析!》連結: http://blog.itpub.net/31077337/viewspace-2213602/

3、《MapReduce如何作為Yarn應用程式執行?》連結: http://blog.itpub.net/31077337/viewspace-2213676/

4、《Hadoop生態系統各元件與Yarn的相容性如何?》連結: http://blog.itpub.net/31077337/viewspace-2213960/

5、《MapReduce資料序列化讀寫概念淺析!》連結: http://blog.itpub.net/31077337/viewspace-2214151/

6、《MapReuce中對大資料處理最合適的資料格式是什麼?》連結: http://blog.itpub.net/31077337/viewspace-2214325/

7、《如何在MapReduce中使用SequenceFile資料格式?》連結: http://blog.itpub.net/31077337/viewspace-2214505/

8、《如何在MapReduce中使用Avro資料格式?》連結: http://blog.itpub.net/31077337/viewspace-2214709/

9、《企業自有資料格式雜亂,MapReduce如何搞定?》連結: http://blog.itpub.net/31077337/viewspace-2214826/

10、《企業使用Hadoop的重大挑戰:如何在HDFS中組織和使用資料?》連結: http://blog.itpub.net/31545816/viewspace-2215158/ 

11、《如何在HDFS中進行資料壓縮以實現高效儲存?》連結:  http://blog.itpub.net/31545816/viewspace-2215281/

12、《Hadoop資料傳輸:如何將資料移入和移出Hadoop?》連結: http://blog.itpub.net/31545816/viewspace-2215580/

13、《如何將日誌和二進位制檔案連續移入HDFS?》連結: http://blog.itpub.net/31545816/viewspace-2215948/

14、《如何將傳統關聯式資料庫的資料匯入Hadoop?》連結: http://blog.itpub.net/31545816/viewspace-2216000/

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31545816/viewspace-2216036/,如需轉載,請註明出處,否則將追究法律責任。

相關文章