日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hbase集群之间数据迁移_hbase数据迁移到另一集群上

發布時間:2023/12/19 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hbase集群之间数据迁移_hbase数据迁移到另一集群上 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

通常我們都會有將hbase表數據遷到另一個hbase表中業務需要,這種不要著急,我選擇一種最適合的方式,因為每種方式處理的數據量、對集群的壓力都是有差異的

總的劃分可以分為命令行和API兩種方式,本人記錄以下幾種命令方式,有錯誤之處請指正,本篇也僅是自己一些行為記錄

hbase數據 導出 導入;

----------------------使用命令-------------------------1

從一個HBase上把數據export到HDFS生產文件a,再把這個文件a上傳到要導入的集群上,使用import導入到數據庫中,注意數據庫中的表名是否存在

hbase org.apache.hadoop.hbase.mapreduce.Driver export t_gps_std_20190225 hdfs:///tmp/zyr/t_gps_std_20190225

hbase org.apache.hadoop.hbase.mapreduce.Driver import t_gps_std_20190225 hdfs:///tmp/hbasedatabak/part-m-00000

--------------帶參數的方式--------------------------2

-D hbase.mapreduce.scan.row.start=

-D hbase.mapreduce.scan.row.stop=

Export [-D ]* [ [ []] [^[regex pattern] or [Prefix] to filter]]

hbase org.apache.hadoop.hbase.mapreduce.Driver export -D hbase.mapreduce.scan.row.start=0 -D hbase.mapreduce.scan.row.stop=1000?* t_gps_sq_20190424 hdfs:///tmp/zyr/t_gps_sq_20190424_

hbase org.apache.hadoop.hbase.mapreduce.Driver export -D hbase.mapreduce.scan.row.start=\xAD\x5C\xAC\xF6w -D hbase.mapreduce.scan.row.stop=\xAD\x5C\xAD1\xFF?* t_gps_sq_20190424 hdfs:///tmp/zyr/t_gps_sq_20190424___

HBase表快照

--------------HBase表快照功能--------------------------3

HBase快照允許管理員不拷貝數據,而直接克隆一張表,這對域服務器產生的影響最小。將快照導出至其他集群不會直接影響到任何服務器

1.開啟快照功能,在hbase-site.xml文件中添加如下配置項:

hbase.snapshot.enabled

true

2.命令操作

在hbase shell中使用 clone_snapshot,delete_snapshot, list_snapshots, restore_snapshot, snapshot命令。

snapshot:?為某表創建快照 ,例如?snapshot ‘harve_role’,'20180108-harve_role'

list_snapshots:查看快照列表

list_snapshots 'map.*' : 查找以map開頭的snapshot

delete_snapshot:刪除快照,例如?delete_snapshot?'20180108-harve_role'

clone_snapshot:基于快照,clone一個新表。例如?clone_snapshot '20180108-harve_role', ‘harve_role2’

restore_snapshot:基于快照恢復表? 例如:disable ‘harve_role’? ??restore_snapshot '20180108-harve_role'

工具ExportSnapshot:

hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot t_fault_20200327 -copy-to hdfs://mine:8020/hbase/ -mappers 16

執行該命令后,在mine:9000的hdfs中會把t_fault_20200327文件夾copy到/hbase/.hbase-snapshot文件下,進入mine這個hbase集群,執行list_snapshots會看到有一個快照:t_fault_20200327,通過命令clone_snapshot可以把該快照copy成一個新的表,不用提前創建表,新表的region個數等信息完全與快照保持一致。

在使用snapshot把一個集群的數據copy到新集群后,應用程序開啟雙寫,然后可以使用Export工具把快照與雙寫之間的數據導入到新集群,從而實現數據遷移,為保障數據不丟失,Export導出時指定的時間范圍可以適當放寬。

具體操作如下:

(1)創建snapshot

snapshot 'tableName',?‘snapshotName'

(2)遷移snapshot

hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \

-snapshot snapshot_src_table \

-mappers 20 \

-bandwidth 1024

這種方式用于將快照表遷移到另外一個集群的時候使用,使用MR進行數據的拷貝,速度很快,使用的時候記得設置好bandwidth參數,以免由于網絡打滿導致的線上業務故障。

(3)恢復snapshot

restore_snapshot ‘snapshotName’

備注:這種方式需要對表進行過disable才能進行restore_snapshot的操作,如果這個還在寫入數據,則需要采用bulkload的方式導入。

(4)將snapshot使用bulkload的方式導入

hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles \

-Dhbase.mapreduce.bulkload.max.hfiles.perRegion.perFamily=1024 \

備注1:這種方式需要將所有的文件進行遍歷并全部通過bulkload導入,上面的只是一個文件的導入,這種方式不需要disable表。

備注2:上面的操作1、3、4都是在hbase shell中執行。

Hbase數據遷移之bulkload

與HBase原生Client API和Mapreduce任務(快照、導入命令都基于MR)相比,“Bulk Loading”方法直接生成HFile算是一種比較高效便捷的方法。

BulkLoad將數據批量導入HBase中。支持通過命令行和API兩種操作方式,下面注意記錄本人使用命令方式

1、數據準備

準備StoreFile存儲格式的文件,通過下面任意一個方式都可得到,

1)自己Mapreduce得到

2)如果測試可以copy一個hbase表的文件

操作步驟:

需要導入hbase表的數據保存到hdfs文件系統中,文件 --> hdfs

在hbase中建表,create 'tablename','familyname'

2、導入數據到hbase表里

ImportTsv命令,該命令是把tsv文件轉成hfile文件再導入表中,通常在使用該命令時注意列族,文件大小劃分等參數設置,

直接導入表中:

hadoop jar/opt/cloudera/parcels/CDH/jars/hbase-server-1.0.0-cdh5.4.0.jar importtsv

\-Dimporttsv.separator=","\-Dhbase.hregion.max.filesize=20971520\-Dimporttsv.columns=HBASE_ROW_KEY,familyname:cellname tablename

\/test/test.cvs

或者

導入到hfile文件中

export HBASE_HOME=/opt/hbase

export HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase classpath`

${HADOOP_HOME}/bin/hadoop jar ${HBASE_HOME}/lib/hbase-server-1.0.0-cdh5.4.0.jar importtsv

\-Dimporttsv.separator=","\-Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:age tablename

\-Dimporttsv.bulk.output=/test/bulkload/outputdir

\/test/bulkload/simple1.cvs

CompleteBulkLoad命令,該命令將importtsv或HFileOutputFormat的結果文件導入到某張表中

示例:

hadoop jar hbase-VERSION.jar completebulkload [-c /path/to/hbase/config/hbase-site.xml] /myfile mytable

實例:

hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles-Dhbase.mapreduce.bulkload.max.hfiles.perRegion.perFamily=64 /file tablename

或者

sudo-u hbase hadoop jar $HBASE_HOME/hbase-server-1.2.0-cdh5.15.1.jar completebulkload -Dhbase.mapreduce.bulkload.max.hfiles.perRegion.perFamily=1024 /file tablename

使用中出現錯誤記錄

(1)找不到jar包時處理:導入環境

export HBASE_HOME=/opt/hbase

export HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase classpath`

或者CDH版本使用

export HADOOP_CLASSPATH=/opt/cloudera/parcels/CDH/lib/hbase/lib/*

(2)目錄結構

保存目錄格式符合 **/列族名/hfile 規則,僅僅適合一次對單列族組織成HFile文件

(3)文件權限

sudo hdfs hdfs dfs chown hbase:hbase /test/hfile/f0

hdfs dfs chmod711 /test/hfile/f0

(4)文件個數太多

錯誤:Trying to load more than 32 hfiles to one family of one region

執行命令時帶參數一次性導入多個文件,默認是32個-Dhbase.mapreduce.bulkload.max.hfiles.perRegion.perFamily=1024

3、查看導入的數據

scan 't1', {COLUMNS => ['f0'], LIMIT => 10}

4、小結

importtsv工具的使用場景較為廣泛,適應于用戶有時希望自己編程生成數據,或以其它格式導入數據,importtsv須要在導入前確定每條數據column維度。須要對工具改造時查看ImportTsv.java和HFileOutputFormat的javaDoc文檔。

completebulkload工具同樣可以編程化實現,需要查看LoadIncrementalHFiles類

總結

以上是生活随笔為你收集整理的hbase集群之间数据迁移_hbase数据迁移到另一集群上的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。