如何从S3导入HBase快照并创建新表?
HBase从S3导入快照并创建新表实操步骤
结合你使用的EC2实例、CDH5.14.1和HBase1.2环境,我给你梳理下完整的导入流程:
一、先确认集群的S3访问权限
- 首先得保证你的HBase集群能正常访问目标S3桶:
- 如果EC2实例用了IAM角色,要确保角色拥有
s3:GetObject、s3:ListBucket等读写该S3桶的权限; - 如果用AK/SK认证,在Cloudera Manager里找到HBase服务的配置,添加或修改
fs.s3a.access.key和fs.s3a.secret.key参数,然后重启HBase服务生效。
- 如果EC2实例用了IAM角色,要确保角色拥有
二、用ImportSnapshot工具导入S3中的快照
这是和你导出时用的ExportSnapshot对应的反向命令,直接把S3里的快照资源同步到HBase集群的HDFS并注册快照:
hbase org.apache.hadoop.hbase.snapshot.ImportSnapshot -snapshot my-snapshot -copy-from s3://my-buckets/tests -mappers 16
- 参数说明:
-snapshot:指定要导入的快照名称(就是你导出时的my-snapshot);-copy-from:S3里快照所在的根路径(和你导出时的-copy-to路径一致);-mappers:并行处理的任务数,和导出时保持一致或者根据集群资源调整就行。
三、验证快照是否导入成功
打开HBase Shell执行命令,确认快照已存在:
hbase shell list_snapshots
如果输出里能看到my-snapshot,就说明导入没问题了。
四、从快照创建新表
在HBase Shell里用clone_snapshot命令,基于导入的快照创建新表:
clone_snapshot 'my-snapshot', 'new-hbase-table'
- 注意:
new-hbase-table是你要创建的新表名,不能和集群里已有的表重名; - 如果要恢复成原来的表名(假设原表已不存在),直接把新表名换成原表名即可。
五、验证新表状态
最后检查新表是否正常可用:
# 查看表列表 list # 扫描表数据(可选,小表适合,大表建议查部分数据) scan 'new-hbase-table', {LIMIT => 10}
内容的提问来源于stack exchange,提问作者penlight
相关产品推荐
相关产品推荐

