使用 HBase 快照 - Amazon EMR
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 HBase 快照

HBase 使用内置的 快照 功能以创建表格的轻型备份。在 EMR 集群中,可使用 EMRFS 将这些备份导出到 Amazon S3。您可以使用 HBase 外壳。本主题说明如何使用 Shell 或通过将 command-runner.jar 与 AWS CLI 或 AWS SDK for Java 结合使用的步骤以交互方式运行这些命令。有关其他类型的 HBase 备份,请参阅 HBase 备份 在HBase文档中。

使用表创建快照

hbase snapshot create -n snapshotName -t tableName

从 AWS CLI 使用 command-runner.jar:

aws emr add-steps --cluster-id j-2AXXXXXXGAPLF \ --steps Name="HBase Shell Step",Jar="command-runner.jar",\ Args=[ "hbase", "snapshot", "create","-n","snapshotName","-t","tableName"]

AWS SDK for Java

HadoopJarStepConfig hbaseSnapshotConf = new HadoopJarStepConfig() .withJar("command-runner.jar") .withArgs("hbase","snapshot","create","-n","snapshotName","-t","tableName");
注意

如果您的快照名称不唯一,则创建操作将失败,返回代码为 -1255 但您可能不会看到一条错误消息,说明出错的地方。要使用同一个快照名称,请将其删除,然后重新创建。

删除快照

hbase shell >> delete_snapshot 'snapshotName'

查看快照信息

hbase snapshot info -snapshot snapshotName

将快照导出到 Amazon S3

重要

如果不指定 -mappers 当导出快照时的值, HBase 使用任意计算来确定映射器的数量。根据您的表大小,此值可能非常大,这会对导出期间运行的作业产生负面影响。因此,我们建议您指定 -mappers 参数, -bandwidth 参数(指定以兆字节/秒为单位的带宽消耗量),或指定两者以限制导出操作所使用的群集资源。或者,您可以在低使用率期间运行导出快照操作。

hbase snapshot export -snapshot snapshotName \ -copy-to s3://bucketName/folder -mappers 2

从 AWS CLI 使用 command-runner.jar

aws emr add-steps --cluster-id j-2AXXXXXXGAPLF \ --steps Name="HBase Shell Step",Jar="command-runner.jar",\ Args=[ "hbase", "snapshot", "export","-snapshot","snapshotName","-copy-to","s3://bucketName/folder","-mappers","2","-bandwidth","50"]

AWS SDK for Java:

HadoopJarStepConfig hbaseImportSnapshotConf = new HadoopJarStepConfig() .withJar("command-runner.jar") .withArgs("hbase","snapshot","export", "-snapshot","snapshotName","-copy-to", "s3://bucketName/folder", "-mappers","2","-bandwidth","50");

从 Amazon S3 导入快照

虽然这是进口, HBase 此处使用的选项仍然是 export.

sudo -u hbase hbase snapshot export \ -D hbase.rootdir=s3://bucketName/folder \ -snapshot snapshotName \ -copy-to hdfs://masterPublicDNSName:8020/user/hbase \ -mappers 2

从 AWS CLI 使用 command-runner.jar

aws emr add-steps --cluster-id j-2AXXXXXXGAPLF \ --steps Name="HBase Shell Step",Jar="command-runner.jar", \ Args=["sudo","-u","hbase","hbase snapshot export","-snapshot","snapshotName", \ "-D","hbase.rootdir=s3://bucketName/folder", \ "-copy-to","hdfs://masterPublicDNSName:8020/user/hbase","-mappers","2","-chmod","700"]

AWS SDK for Java:

HadoopJarStepConfig hbaseImportSnapshotConf = new HadoopJarStepConfig() .withJar("command-runner.jar") .withArgs("sudo","-u","hbase","hbase","snapshot","export", "-D","hbase.rootdir=s3://path/to/snapshot", "-snapshot","snapshotName","-copy-to", "hdfs://masterPublicDNSName:8020/user/hbase", "-mappers","2","-chuser","hbase");

从中的快照还原表 HBase 贝壳

hbase shell >> disable tableName >> restore_snapshot snapshotName >> enable tableName

HBase 当前不支持在中找到的所有快照命令 HBase 外壳。例如,没有 HBase 命令行选项可还原快照,因此必须在shell中还原快照。这意味着 command-runner.jar 必须运行Bash命令。

注意

由于此处使用的命令为 echo,因此您的 Shell 命令可能仍将失败,即使 Amazon EMR 运行的命令返回退出代码 0 也是如此。如果您选择将shell命令作为步骤运行,请检查步骤日志。

echo 'disable tableName; \ restore_snapshot snapshotName; \ enable tableName' | hbase shell

以下是使用 AWS CLI 的步骤。首先,创建以下 snapshot.json 文件:

[ { "Name": "restore", "Args": ["bash", "-c", "echo $'disable \"tableName\"; restore_snapshot \"snapshotName\"; enable \"tableName\"' | hbase shell"], "Jar": "command-runner.jar", "ActionOnFailure": "CONTINUE", "Type": "CUSTOM_JAR" } ]
aws emr add-steps --cluster-id j-2AXXXXXXGAPLF \ --steps file://./snapshot.json

AWS SDK for Java:

HadoopJarStepConfig hbaseRestoreSnapshotConf = new HadoopJarStepConfig() .withJar("command-runner.jar") .withArgs("bash","-c","echo $'disable \"tableName\"; restore_snapshot \"snapshotName\"; enable \"snapshotName\"' | hbase shell");