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

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

使用 HBase 快照

HBase 使用内置快照功能创建表的轻量级备份。在 EMR 集群中,可使用 EMRFS 将这些备份导出到 Amazon S3。您可以使用 sh HBase ell 在主节点上创建快照。本主题向您展示如何与 shell 交互式运行这些命令,或者通过使用或的步骤来command-runner.jar运行这些命令。 Amazon CLI 适用于 Java 的 Amazon SDK有关其他类型 HBase 备份的更多信息,请参阅HBase 文档中的HBase 备份

使用表创建快照

hbase snapshot create -n snapshotName -t tableName

使用来自 Amazon 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"]

适用于 Java 的 Amazon SDK

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

如果您的快照名称不唯一,则创建操作将失败,并返回 -1 或者 255,但您可能看不到说明出现问题的错误消息。要使用相同的快照名称,请先将其删除,然后重新创建。

删除快照

hbase shell >> delete_snapshot 'snapshotName'

查看快照信息

hbase snapshot info -snapshot snapshotName

将快照导出到 Amazon S3

重要

如果在导出快照时未指定-mappers值,则 HBase 使用任意计算来确定映射器的数量。此值可能非常大,具体取决于表大小,这会在导出过程中对正在运行的任务产生负面影响。为此,我们建议您指定 -mappers 参数或 -bandwidth 参数(指定每秒使用的带宽,以 MB 为单位),或同时指定这两个参数以限制导出操作使用的集群资源。或者,您可以在低使用率期间运行导出快照操作。

hbase snapshot export -snapshot snapshotName \ -copy-to s3://amzn-s3-demo-bucket/folder -mappers 2

command-runner.jar从以下位置使用 Amazon CLI:

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://amzn-s3-demo-bucket/folder","-mappers","2","-bandwidth","50"]

适用于 Java 的 Amazon SDK:

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://amzn-s3-demo-bucket/folder \ -snapshot snapshotName \ -copy-to hdfs://masterPublicDNSName:8020/user/hbase \ -mappers 2

command-runner.jar从以下位置使用 Amazon CLI:

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://amzn-s3-demo-bucket/folder", \ "-copy-to","hdfs://masterPublicDNSName:8020/user/hbase","-mappers","2","-chmod","700"]

适用于 Java 的 Amazon SDK:

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");

从 s HBase hell 中的快照还原表

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

HBase 目前不支持 s HBase hell 中的所有快照命令。例如,没有用于恢复快照的 HBase 命令行选项,因此必须在 shell 中恢复快照。这意味着 command-runner.jar 必须运行 Bash 命令。

注意

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

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

以下是使用 Amazon 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

适用于 Java 的 Amazon SDK:

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