一、创建cos
地址:https://console.cloud.tencent.com/cos5/bucket
- 在腾讯云对象存储官网创建存储桶,注意地域选择hbase集群所在地地域,这样传输距离短,归档比较快;
- 查看当前集群是否授权cos存储;
若上图·所示是未授权的,点击授权即可。
- 确认cos可以访问;
1 hdfs dfs -ls cosn://bucketName/
二、归档
脚本内容,可以不用脚本,自行替换变量即可。
1 tableName=$1
2 time=$(date "+%Y%m%d%H")
3 echo "${time}"
4 echo $tableName
5 echo "flush '$tableName'" | /usr/local/service/hbase/bin/hbase shell
- 对hbase表数据授权 snapshot 操作;
1 hdfs dfsadmin -allowSnapshot /hbase/data/default/$tableName
- 为目录做 snapshot;
1 hdfs dfs -createSnapshot /hbase/data/default/tableName $tableName-snapshot
- 在快照目录下面的.snapshot已经做好了一份快照,可以进行读取(注意:快照是只读的);
hdfs dfs -ls /hbase/data/default/$tableName/.snapshot/$tableName-snapshot
- 根据实际数据量选择归档方式
1 # 小于100G建议使用 cp
hdfs dfs -cp /hbase/data/default/$tableName/.snapshot/$tableName-snapshot
cosn://bucketName/"${TIME}"_$tableName
2
3 # 大于100G建议使用 distcp
/usr/local/service/hadoop/bin/hadoop distcp -i -update -skipcrccheck -m 50 -log
/tmp/distcp-logs -strategy dynamic -bandwidth 100
/hbase/data/default/$tableName/.snapshot/$tableName-snapshot
cosn://bucketName/"${TIME}"_$tableName
备注:根据实际数据量选择归档方式,可以简单写成:
/usr/local/service/hadoop/bin/hadoop distcp -i -update /hbase/data/default/$tableName/.snapshot/$tableName-snapshot cosn://bucketName/"${TIME}"_$tableName
- 删除snapshot
1 hdfs dfs -deleteSnapshot /hbase/data/default/$tableName/ $tableName-snapshot
三、hbase修改TTL(单位为秒)
示例中修改TTL为365天
echo "alter 'TestTable',{NAME => 'info',TTL => '31536000'}" |
/usr/local/service/hbase/bin/hbase shell
四、cos备份数据导入hbase
image.png当前表中没有任何数据,现在将cos中的归档数据导入hbase中
- 创建临时目录;
1 hdfs dfs -mkdir /tmp/$tmpDirName 3 hdfs dfs -mkdir /tmp/$tmpDirName/info
注:其中info为列簇名,若有多个列簇,就需要在表目录下创建多个子目录。
- 将 cos 中的 hfile 文件拷贝回 hdfs 集群;
1 # cp
2 hdfs dfs -cp cosn://$bucketName/"${TIME}"_$tableName/*/info/* /tmp/$tmpDirName/info/
3 # distcp
/usr/local/service/hadoop/bin/hadoop distcp -i -update -skipcrccheck -m 50 -log
/tmp/distcp-logs -strategy dynamic -bandwidth 100
cosn://$bucketName/"${TIME}"_$tableName/*/info/* /tmp/$tmpDirName/info/
- 执行 bulkload,将数据导入 hbase;
hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles /tmp/$tmpDirName $tableName
验证数据是否成功导入;
image.png1 # 进入 hbase shell
2 count '$tableName'
网友评论