在 Ubuntu 上迁移 HBase 数据的常用做法
方案一 离线全量迁移 Export/Import(推荐)
hbase org.apache.hadoop.hbase.mapreduce.Export <表名> <HDFS导出目录> -D hbase.mapreduce.scan.starttime=<ts> -D hbase.mapreduce.scan.endtime=<ts> -D hbase.mapreduce.scan.versions=<N> -D hbase.mapreduce.scan.column.family=<cf1,cf2>-D mapreduce.output.fileoutputformat.compress=true -D mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.GzipCodechdfs dfs -get <HDFS导出目录> /tmp/exported_tablehdfs dfs -put /tmp/exported_table <目标HDFS目录>create '<表名>', {NAME => '<cf1>', ...}hbase org.apache.hadoop.hbase.mapreduce.Import <表名> <目标HDFS目录>hbase org.apache.hadoop.hbase.mapreduce.Import -Dimport.bulk.output=<HFile输出目录> <表名> <目标HDFS目录>hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles <HFile输出目录> <表名>hbase shell 中执行:scan '<表名>', {LIMIT => 10} 或 count '<表名>' 抽样核对数据量。方案二 表级文件拷贝(HDFS 直拷 + hbck 修复)
hdfs dfs -get hdfs://<源NN>:<端口>/hbase/data/default/china_webpage /tmp/china_webpagehdfs dfs -put /tmp/china_webpage hdfs://<目标NN>:<端口>/hbase/data/default/hbase hbck -fixMetahbase hbck -fixAssignmentshbase shell 中 scan 'china_webpage', {LIMIT => 10} 验证。方案三 文本/CSV 导入(ImportTsv)
1,tom,mhdfs dfs -put data.txt /user/hbase/import/data.txtcreate 'testtable4','cf1','cf2'hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator=',' -Dimporttsv.columns=HBASE_ROW_KEY,cf1,cf2 testtable4 /user/hbase/import/data.txtscan 'testtable4', {LIMIT => 10}。方案四 生成 HFile 再批量导入(近实时批量装载)
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator=',' -Dimporttsv.columns=HBASE_ROW_KEY,cf1,cf2 -Dimporttsv.bulk.output=/user/hbase/hfile_tmp testtable4 /user/hbase/import/data.txthbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles /user/hbase/hfile_tmp testtable4scan 'testtable4', {LIMIT => 10}。迁移前后关键注意事项
以上方案在 Ubuntu 上均可直接执行(前提是已安装并配置好 Hadoop/HBase 环境,且 HDFS 可达)。根据数据规模、网络条件与停机窗口选择最合适的一种或组合使用。