您好,登錄后才能下訂單哦!
本篇內容介紹了“HBase中數據導入和導出的方法有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
HBase Snapshots允許你對一個表進行快照(即可用副本),它不會對Region Servers產生很大的影響,它進行復制和恢復操作的時候不包括數據拷貝。導出快照到另外的集群也不會對Region Servers產生影響。使用快照方式進行數據遷移驟如下:
1、開啟快照支持功能,在0.95+之后的版本都是默認開啟的,在0.94.6+是默認關閉
<property>
<name>hbase.snapshot.enabled</name>
<value>true</value>
</property>
2、給表建立快照,不管表是啟用或者禁用狀態,這個操作不會進行數據拷貝
$ ./bin/hbase shell
hbase> snapshot 'myTable', 'myTableSnapshot-122112'
3、列出已經存在的快照
$ ./bin/hbase shell
hbase> list_snapshots
4、刪除快照
$ ./bin/hbase shell
hbase> delete_snapshot 'myTableSnapshot-122112'
5、從快照復制生成一個新表
$ ./bin/hbase shell
hbase> clone_snapshot 'myTableSnapshot-122112', 'myNewTestTable'
6、用快照恢復數據,它需要先禁用表,再進行恢復
$ ./bin/hbase shell
hbase> disable 'myTable'
hbase> restore_snapshot 'myTableSnapshot-122112'
提示:因為備份(replication)是系統日志級別的,而快照是文件系統級別的,當使用快照恢復之后,副本會和master處于不同的狀態,如果你需要使用恢復的話,你要停止備份,并且重置bootstrap。
如果是因為不正確的客戶端行為導致數據丟失,全表恢復又需要表被禁用,可以采用快照生成一個新表,然后從新表中把需要的數據用map-reduce拷貝到主表當中。
7、復制到別的集群當中
該操作要用hbase的賬戶執行,并且在hdfs當中要有hbase的賬戶建立的臨時目錄(hbase.tmp.dir參數控制)
采用16個mappers來把一個名為MySnapshot的快照復制到一個名為srv2的集群當中
$ bin/hbase class org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot MySnapshot -copy-to hdfs://srv2:8020/hbase -mappers 16
限制帶寬消耗
導出的快照,通過指定-bandwidth參數,它需要代表每秒兆字節的整數時,可以限制帶寬消耗。下面的例子在上述實施例限制為200 MB /秒。
$ bin/hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot MySnapshot -copy-to hdfs://srv2:8082/hbase -mappers 16 -bandwidth 200
HBase內置提供了一個的導出工具,使數據很容易從hbase表導入HDFS目錄下的SequenceFiles文件。該工具創造了一個map reduce任務,通過一系列HBase API來調用集群,獲取指定表格的每一行數據,并且將數據寫入指定的HDFS目錄中。這個工具對集群來講是性能密集的,因為它使用了mapreduce和HBase 客戶端API。但是它的功能豐富,支持制定版本或日期范圍,支持數據的篩選,從而使增量備份可用。
下面是HBASE導入導出的一個樣例過程:
1、切換到hbase bin的目錄下,將HBase中表復制導出到HDFS中,執行:
hbase org.apache.hadoop.hbase.mapreduce.Export test_table/data/test_table
上述中,test_table是HBase中要導出的表名,/data/test_table是hadoop fs(hadoop文件系統)中的位置。
導出時可選參數說明:
versions(可選):導出版本數
starttime(可選):導出數據的起始時間(注意這里的起始時間是指數據的timestamp,比如我傳入的的昨天的日期,則代表導出昨天以后數據)
endtime(可選):導出數據的結束時間(同樣是指數據的timestamp)
默認情況下,導出工具僅導出而不必考慮存儲版本數給定cell的最新版本。要導出多個版本,替換 與版本的所需數量。
注:緩存輸入掃描通過hbase.client.scanner.caching在任務配置中配置。
2、切換到hadoop bin目錄下,將hadoop HDFS中的文件拷貝到本地linux路徑:
hadoop fs -get /data/test_table ~/
上述中,/data/test_table是hadoop HDFS文件系統中的路徑,~/是本地linux路徑。
3、切換到hadoop bin目錄下,將linux中的本地文件拷貝到Hadoop HDFS中:
hadoop fs -put ~/test_table /data/
其中,~/test_table是本地Linux文件,/data/是Hadoop HDFS文件路徑
4、拷貝好數據后,需要創建我們要導入數據的表,進入hbase shell環境:
create‘test_table','test_family'
注意:創建表的時候,需要至少指定一個列簇
5、將Hadoop HDFS中的文件,導入到指定的HBase的表:
hbase org.apache.hadoop.hbase.mapreduce.Import test_table /data/test_table
ImportTsv是Hbase提供的一個命令行工具,可以將存儲在HDFS上的自定義分隔符(默認\t)的數據文件,通過一條命令方便的導入到HBase表中,對于大數據量導入非常實用,其中包含兩種方式將數據導入到HBase表中:
第一種是使用TableOutputformat在reduce中插入數據;
第二種是先生成HFile格式的文件,再執行一個叫做CompleteBulkLoad的命令,將文件move到HBase表空間目錄下,同時提供給client查詢。
例如,假設我們將數據裝載到一個名為“test”用的ColumnFamily名為“D”兩列“C1”和“C2”的表。
$ bin/hbase
$ create 'test','d'
假定一個輸入文件內容為:
row1,c1,c2
row2,c1,c2
row3,c1,c2
row4,c1,c2
row5,c1,c2
row6,c1,c2
row7,c1,c2
row8,c1,c2
row9,c1,c2
row10,c1,c2
將文件上傳至hdfs的/tmp目錄,并命名為data.txt
對于ImportTsv使用該輸入文件,在命令行必須是這樣的:
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator=',' -Dimporttsv.columns=HBASE_ROW_KEY,d:c1,d:c2 test /tmp/data.txt
其他包含 -D的可指定的選項包括:
-Dimporttsv.skip.bad.lines=false – 若遇到無效行則失敗
-Dimporttsv.separator=| – 文件中代替tabs的分隔符
-Dimporttsv.timestamp=currentTimeAsLong – 導入時使用指定的時間戳
-Dimporttsv.mapper.class=my.Mapper – 使用用戶指定的Mapper類來代替默認的org.apache.hadoop.hbase.mapreduce.TsvImporterMapper
并且在這個例子中,第一列是rowkey,這就是為什么HBASE_ROW_KEY被使用。第二、三列為:“d:c1” and “d:c2”,如果你已經準備了大量的數據進行批量加載,確保目標HBase的表是預分區的。
如果表中存在數據,會以追加的方式導入。
利用bulkload將數據導入
利用importTSV生成HFile:
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator="," -Dimporttsv.bulk.output=/tmp/zhangrenhua/hbase -Dimporttsv.columns=HBASE_ROW_KEY,d:c1,d:c2 test /tmp/data.txt
將HFile導入到Hbase:
hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles /tmp/zhangrenhua/hbase test
注意:
在使用ImportTsv時,一定要注意參數importtsv.bulk.output的配置,通常來說使用Bulk output的方式對Regionserver來說更加友好一些,這種方式加載數據幾乎不占用Regionserver的計算資源,因為只是在HDFS上移動了HFile文件,然后通知HMaster將該Regionserver的一個或多個region上線。
“HBase中數據導入和導出的方法有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。