线上HBase表重建

一、创建临时表

  1. 预切分

​ 根据表数据特点选取合适的方式预切分表。

  1. 创建临时表

​ 选取预切分方式,创建结构与原表格式相同的临时表。

二、数据迁移

  1. 原数据表数据导出

​ 为了不影响线上HBase表,使用snapshot的ExportSnapshot方式把snapshot数据迁移到公共Hadoop集群进行处理。执行命令如下:

1
2
3
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \ 
-snapshot table_snapshot -copy-from hdfs://master:9000/hbase \
-copy-to hdfs://nn-cluster/hbase -mappers 16 -bandwidth 256

​ 2.导出Snapshot数据

​ 若没有Snapshot导出工具,仿照org.apache.hadoop.hbase.mapreduce.Export类编写SnapshotExport工具类,参考类容如下:

1
Job job = new Job(conf); Path restoreDir = new Path("XX"); // restore dir should not be a subdirectory of hbase.rootdir Scan scan = new Scan(); TableMapReduceUtil.initTableSnapshotMapperJob(snapshotName, scan, MyTableMapper.class, MyMapKeyOutput.class, MyMapOutputValueWritable.class, job, true, restoreDir);

​ 执行SnapshotExport工具类,执行命令如下:

1
2
3
4
hbase com.ke.dtarch.ExportSnapshot \ 
table_snapshot \
hdfs://nn-cluster/user/bigdata/snapshotTest/resotre_table \
hdfs://nn-cluster/user/bigdata/snapshotTest/snapshot_out

​ 3.生成HFiles

​ 根据Snapshot导出的数据使用org.apache.hadoop.hbase.mapreduce.Export生成HFiles,执行命令如下:

1
2
3
4
hbase org.apache.hadoop.hbase.mapreduce.Import \  
-Dimport.bulk.output=hdfs://nn-cluster/user/bigdata/snapshotTest/importOut \
-Dhbase.import.version=1.4.9 \
<临时HBase表名> hdfs://nn-cluster/user/bigdata/snapshotTest/rptOut

​ 4.使用distcp把HFiles导到HBase集群

​ 执行命令如下:

1
2
3
4
hadoop distcp \ 
-bandwidth 20 \
hdfs://nn-cluster/user/bigdata/snapshotTest/importOut \
hdfs://master:9000/tmp/

​ 5.使用BulkLoad把HFile导入临时表

​ 执行命令如下:

1
2
hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles \ 
/tmp/importSplitOut <临时表名>

三、HBase表替换

  1. 创建snapshot

​ 给原表和临时表创建snapshot,执行命令如下:

1
snapshot 'origin_table', 'origin_table_snapshot' snapshot 'tmp_table', 'tmp_table_snapshot'

​ 2.删除原表

1
disable 'origin_table' drop 'origin_table'

​ 3.修改表名称

1
clone_snapshot 'tmp_table_snapshot', 'origin_table'

​ 4.检查HBase表状态,无异常后,删除多余的表和数据

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. 一、创建临时表
  2. 2. 二、数据迁移
  3. 3. 三、HBase表替换
,