

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

# HBase 早期 AMI 版本的 Amazon EMR 的应用程序细节
<a name="emr-3x-hbase"></a>

## 支持的 HBase 版本
<a name="emr-3x-hbase-versions"></a>


| HBase 版本 | AMI 版本 | AWS CLI 配置参数 | HBase 版本详情 | 
| --- | --- | --- | --- | 
| [0.94.18](https://svn.apache.org/repos/asf/hbase/branches/0.94/CHANGES.txt) | 3.1.0 和更高版本 |  `--ami-version 3.1` `--ami-version 3.2` `--ami-version 3.3` `--applications Name=HBase`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ReleaseGuide/emr-3x-hbase.html)  | 
| [0.94.7](https://svn.apache.org/repos/asf/hbase/branches/0.94/CHANGES.txt) | 3.0-3.0.4 |  `--ami-version 3.0` `--applications Name=HBase`  | 
| [0.92](https://svn.apache.org/repos/asf/hbase/branches/0.92/CHANGES.txt) | 2.2 和更高版本 |  `--ami-version 2.2 or later` `--applications Name=HBase`  | 

## HBase 集群先决条件
<a name="emr-3x-hbase-prerequisites"></a>

使用 Amazon EMR AMI 版本 2.x 和 3.x 创建的集群应满足以下要求。 HBase
+  AWS CLI （可选）-要 HBase 使用命令行进行交互，请下载并安装最新版本的 AWS CLI。有关更多信息，请参阅《AWS Command Line Interface 用户指南》**中的[安装 AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/installing.html)。
+ 至少两个实例（可选）：集群的主节点运行 HBase 主服务器和 Zookeeper，任务节点运行 HBase 区域服务器。为了获得最佳性能，HBase 集群应至少在两个 EC2 实例 HBase 上运行，但出于评估目的，您可以在单个节点上运行。
+ 长时间运行的集群-HBase 仅在长时间运行的集群上运行。默认情况下，CLI 和 Amazon EMR 控制台会创建长时间运行的集群。
+ Amazon EC2 密钥对集（推荐）：要使用 Secure Shell（SSH）网络协议连接主节点并运行 HBase Shell 命令，必须在创建集群时使用 Amazon EC2 密钥对。
+ 正确的 AMI 和 Hadoop 版本 — 目前只有 Hadoop 20.205 或更高版本支持HBase 集群。
+ Ganglia（可选）-要监控 HBase 性能指标，请在创建集群时安装 Ganglia。
+ 用于存储日志的 Amazon S3 存储桶（可选）-主节点上提供日志。 HBase 如果要将这些日志复制到 Amazon S3 中，请在创建集群时指定接收日志文件的 S3 存储桶。

## 使用创建集群 HBase
<a name="emr-3x-hbase-launch"></a>

下表列出了使用 Amazon EMR AMI 发行版 HBase 使用控制台创建集群时可用的选项。


| 字段 | Action | 
| --- | --- | 
| Restore from backup (从备份中还原) | 指定是否使用存储在 Amazon S3 中的数据预加载 HBase 集群。 | 
| Backup location (备份位置) | 指定 Amazon S3 中还原所用备份的存储位置的 URI。 | 
| Backup version (备份版本) | 在 Backup Location (备份位置) 处指定要使用的备份的版本名称（可选）。如果您将此字段留空，Amazon EMR 将使用备份位置的最新备份来填充新集群。 HBase  | 
| Schedule Regular Backups (安排定期备份) | 指定是否要计划自动增量备份。第一次备份是完整备份，为以后的增量备份创建基线。 | 
| Consistent backup (一致性备份) | 请指定备份是否应该保持一致。一致性备份指的是，在初始备份阶段为保持节点同步而暂停写入操作的备份。将任何因此而暂停的写入操作放入队列中，然后在同步完成时恢复操作。 | 
| Backup frequency (备份频率) | 定时备份days/hours/minutes间隔的次数。 | 
| Backup location (备份位置) | 存储备份的 Amazon S3 URI。每个 HBase 群集的备份位置应不同，以确保差异备份保持正确。 | 
| Backup start time (备份启动时间) | 指定进行首次备份的时间。您可以将此值设置为 now，使第一次备份在集群运行时立即开始，也可以输入 [ISO 格式](http://www.w3.org/TR/NOTE-datetime)的日期和时间。例如，2012-06-15T20:00Z 会将开始时间设置为 2012 年 6 月 15 日下午 8 点 (UTC)。 | 

以下示例 AWS CLI 命令启动带有 HBase 和其他应用程序的集群：

**注意**  
为了便于读取，包含 Linux 行继续符（\$1）。它们可以通过 Linux 命令删除或使用。对于 Windows，请将它们删除或替换为脱字号（^）。

```
aws emr create-cluster --name "Test cluster" --ami-version 3.3 \
               --applications Name=Hue Name=Hive Name=Pig Name=HBase \
               --use-default-roles --ec2-attributes KeyName=myKey \
               --instance-type c1.xlarge --instance-count 3 --termination-protected
```

在 Hive 和 HBase 集群之间建立连接后（如前面的过程所示），您可以通过在 Hive 中创建外部表来访问存储在 HBase 集群上的数据。

以下示例在 Hive 提示符下运行时，会创建一个外部表，该表引用存储在名`inputTable`为的 HBase 表中的数据。然后，您可以`inputTable`在 Hive 语句中引用以查询和修改存储在 HBase 集群中的数据。

**注意**  
以下示例使用了 AMI 2.3.3 中的 **protobuf-java-2.4.0a.jar**，但是您应该修改此示例以匹配您的版本。要检查您有哪一版本的 Protocol Buffers JAR，请在 Hive 命令提示符处运行命令：`! ls /home/hadoop/lib;`。

```
add jar lib/emr-metrics-1.0.jar ;
               add jar lib/protobuf-java-2.4.0a.jar ;
               
               set hbase.zookeeper.quorum=ec2-107-21-163-157.compute-1.amazonaws.com ;
               
               create external table inputTable (key string, value string)
                    stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
                     with serdeproperties ("hbase.columns.mapping" = ":key,f1:col1")
                     tblproperties ("hbase.table.name" = "t1");
               
               select count(*) from inputTable ;
```

## 自定义配置 HBase
<a name="emr-3x-hbase-customize"></a>

尽管默认设置应该适用于大多数应用程序，但您可以灵活地修改 HBase 配置设置。为此，请运行两种引导操作脚本之一：
+ **configure-hbase-daemons**— 配置主守护程序、区域服务器守护程序和 zookeeper 守护程序的属性。这些属性包括堆大小和 HBase 守护程序启动时传递给 Java 虚拟机 (JVM) 的选项。将这些属性设置为引导操作中的参数。此引导操作修改集群上home/hadoop/conf/hbase的/-user-env.sh 配置文件。 HBase 
+ **configure HBase -hbase —配置特定于站点的设置，例如 HBase 主服务器应绑定的端口以及客户端 CLI 客户端应重**试操作的最大次数。您可以将它们 one-by-one设置为引导操作中的参数，也可以指定 XML 配置文件在 Amazon S3 中的位置。此引导操作修改集群上home/hadoop/conf/hbase的/-site.xml 配置文件。 HBase 

**注意**  
与其他引导操作一样，这些脚本只能在创建集群时运行；您不能使用它们来更改当前正在运行的 HBase 集群的配置。

运行 configu **re-hbase** 或**configure-hbase-daemons**引导操作时，您指定的值会覆盖默认值。任何未显式设置的值都会接受默认值。

使用这些引导操作 HBase 进行配置类似于在 Amazon EMR 中使用引导操作来配置 Hadoop 设置和 Hadoop 守护程序属性。不同之处在于 HBase 没有每进程内存选项。取而代之的是，使用`--daemon-opts`参数设置内存选项，其中替换*daemon*为要配置的守护程序的名称。

### 配置 HBase 守护程序
<a name="emr-3x-hbase-configure-daemons"></a>

 Amazon EMR 提供了一个引导操作`s3://region.elasticmapreduce/bootstrap-actions/configure-hbase-daemons`，您可以使用该操作来更改 HBase 守护程序的配置，其中*region*是您要启动集群的区域。 HBase 

要使用配置 HBase 守护程序 AWS CLI，请在启动集群时添加`configure-hbase-daemons`引导操作以配置一个或多个 HBase 守护程序。您可以设置以下属性。


| 属性 | 说明 | 
| --- | --- | 
| hbase-master-opts | 控制 JVM 如何运行主守护程序的选项。如果设置此选项，则它会覆盖默认的 HBASE\$1MASTER\$1OPTS 变量。 | 
| regionserver-opts | 控制 JVM 如何运行区域服务器守护程序的选项。如果设置此选项，则它会覆盖默认的 HBASE\$1REGIONSERVER\$1OPTS 变量。 | 
| zookeeper-opts | 控制 JVM 如何运行 zookeeper 守护程序的选项。如果设置此选项，则它会覆盖默认的 HBASE\$1ZOOKEEPER\$1OPTS 变量。 | 

有关这些选项的更多信息，请参阅 HBase 文档[中的 hbase-env.sh](https://hbase.apache.org/book.html#hbase.env.sh)。

以下示例中显示的是为 `zookeeper-opts` 和 `hbase-master-opts` 配置值的引导操作。

**注意**  
为了便于读取，包含 Linux 行继续符（\$1）。它们可以通过 Linux 命令删除或使用。对于 Windows，请将它们删除或替换为脱字号（^）。

```
aws emr create-cluster --name "Test cluster" --ami-version 3.3 \
--applications Name=Hue Name=Hive Name=Pig Name=HBase \
--use-default-roles --ec2-attributes KeyName=myKey \
--instance-type c1.xlarge --instance-count 3 --termination-protected \
--bootstrap-actions Path=s3://elasticmapreduce/bootstrap-actions/configure-hbase-daemons,\
Args=["--hbase-zookeeper-opts=-Xmx1024m -XX:GCTimeRatio=19","--hbase-master-opts=-Xmx2048m","--hbase-regionserver-opts=-Xmx4096m"]
```

### 配置 HBase 站点设置
<a name="emr-3x-hbase-configure-site"></a>

Amazon EMR 提供了一个引导操作`s3://elasticmapreduce/bootstrap-actions/configure-hbase`，您可以使用该操作来更改的配置。 HBase您可以将配置值 one-by-one设置为引导操作中的参数，也可以指定 XML 配置文件在 Amazon S3 中的位置。如果您只需要设置几个配置设置， one-by-one则设置配置值非常有用。如果您需要做出很多更改，或如果您要保存配置设置以便重新使用，那么非常适合使用 XML 文件进行设置。

**注意**  
您可以在 Amazon S3 存储桶名称前加上区域前缀`s3://region.elasticmapreduce/bootstrap-actions/configure-hbase`，例如，其中*region*是您要启动 HBase 集群的区域。

此引导操作修改集群上的`/home/hadoop/conf/hbase-site.xml`配置文件。 HBase 引导操作只能在 HBase 集群启动时运行。

有关您可以配置的 HBase 站点设置的更多信息，请参阅 HBase 文档中的[默认配置](http://hbase.apache.org/book.html#config.files)。

在`configure-hbase`启动 HBase 集群时设置引导操作，并在中指定`hbase-site.xml`要更改的值。

**要指定各个 HBase 站点的设置，请使用 AWS CLI**
+ 要更改`hbase.hregion.max.filesize`设置，请键入以下命令并*myKey*替换为您的 Amazon EC2 密钥对的名称。
**注意**  
为了便于读取，包含 Linux 行继续符（\$1）。它们可以通过 Linux 命令删除或使用。对于 Windows，请将它们删除或替换为脱字号（^）。

  ```
  aws emr create-cluster --name "Test cluster" --ami-version 3.3 \
  --applications Name=Hue Name=Hive Name=Pig Name=HBase \
  --use-default-roles --ec2-attributes KeyName=myKey \
  --instance-type c1.xlarge --instance-count 3 --termination-protected \
  --bootstrap-actions Path=s3://elasticmapreduce/bootstrap-actions/configure-hbase,Args=["-s","hbase.hregion.max.filesize=52428800"]
  ```

**要使用 XML 文件指定 HBase 站点设置，请使用 AWS CLI**

1. 创建 `hbase-site.xml` 的自定义版本。您的自定义文件必须是有效的 XML。为了减少引入错误的机会，请从位于 Amazon EMR HBase 主节点的默认副本开始`/home/hadoop/conf/hbase-site.xml`，然后编辑该文件的副本，而不是从头开始创建文件。`hbase-site.xml`可以给您的新文件指定一个新名称，或保留 `hbase-site.xml`。

1. 将您的自定义 `hbase-site.xml` 文件上传到 Amazon S3 存储桶。它应该设置权限，以便启动集群的 AWS 账户可以访问该文件。如果启动集群的 AWS 账户还拥有 Amazon S3 存储桶，则该账户有权访问。

1. 在启动集 HBase 群时设置 con **figure-hbase** 引导操作，并包括自定义文件的位置。`hbase-site.xml`以下示例将 HBase 站点配置值设置为文件中指定的值`s3://amzn-s3-demo-bucket/my-hbase-site.xml`。键入以下命令，*myKey*替换为您的 EC2 密钥对的名称，然后*amzn-s3-demo-bucket*替换为您的 Amazon S3 存储桶的名称。
**注意**  
为了便于读取，包含 Linux 行继续符（\$1）。它们可以通过 Linux 命令删除或使用。对于 Windows，请将它们删除或替换为脱字号（^）。

   ```
   aws emr create-cluster --name "Test cluster" --ami-version 3.3 \
           --applications Name=Hue Name=Hive Name=Pig Name=HBase \
           --use-default-roles --ec2-attributes KeyName=myKey \
           --instance-type c1.xlarge --instance-count 3 --termination-protected \
           --bootstrap-actions Path=s3://elasticmapreduce/bootstrap-actions/configure-hbase,Args=["--site-config-file","s3://amzn-s3-demo-bucket/config.xml"]
   ```

   如果您指定多个选项来自定义 HBase 操作，则必须在每个键值对前面加上一个`-s`选项开关，如以下示例所示：

   ```
          --bootstrap-actions s3://elasticmapreduce/bootstrap-actions/configure-hbase,Args=["-s","zookeeper.session.timeout=60000"]
   ```

设置代理并打开 SSH 连接后，您可以打开带有 http: //: 60010/master-status 的浏览器窗口来查看 HBase 用户界面*master-public-dns-name*，其中是集群*master-public-dns-name*中主节点的公有 DNS 地址。 HBase 

您可以使用 SSH 连接到主节点并导航到该`mnt/var/log/hbase`目录来查看当前 HBase 日志。除非您在集群启动时启用了针对 Amazon S3 的日志记录，否则这些日志将在集群终止后不再可用。

## 备份和恢复 HBase
<a name="emr-3x-hbase-backup-restore"></a>

Amazon EMR 允许您手动或按自动计划将您的 HBase 数据备份到 Amazon S3。您可以执行完整备份和增量备份。获得备份版本 HBase 的数据后，可以将该版本恢复到集 HBase群。您可以恢复到当前正在运行的 HBase 集群，也可以启动预先填充了备份数据的新集群。

在备份过程中， HBase 继续执行写入命令。虽然这样可确保集群在整个备份过程中都处于可用状态，但存在的风险是，正在备份的数据可能与并行执行的任何写入操作不一致。要了解可能出现的不一致性，您必须考虑在集群中的节点之间 HBase 分配写入操作。如果写入操作发生在轮询特定节点之后，则备份存档中不会包含该数据。您甚至可能会发现，早期对 HBase 集群的写入（发送到已经轮询过的节点）可能不在备份存档中，而后来的写入（在轮询之前发送到节点）则包括在内。

如果需要一致的备份，则必须在备份过程的 HBase 初始部分（跨节点同步）暂停写入。您可以通过在请求备份时指定 `--consistent` 参数完成此操作。指定此参数后，系统会将此期间的写入操作加入队列并在同步完成后立即执行这些操作。您还可以计划重复备份，一次备份过程中遗失的数据会在后续备份过程中得到备份，从而解决随时间推移而产生的任何不一致问题。

备份 HBase 数据时，应为每个群集指定不同的备份目录。完成此操作的一种简单方法是，将集群标识符用作备份目录指定路径的一部分。例如 `s3://amzn-s3-demo-bucket/backups/j-3AEXXXXXX16F2`。这样可以确保将来的任何 future 增量备份都引用正确的 HBase 群集。

当您准备删除不再需要的旧备份文件时，我们建议您先对 HBase 数据进行完整备份。这样可确保保留所有数据并为以后的增量备份提供基线。完成完整备份后，您可以导航到备份位置并手动删除旧备份文件。

 HBase 备份过程使用 S3 DistCp 进行复制操作，这在临时文件存储空间方面有一定的限制。

### HBase 使用控制台进行备份和恢复
<a name="emr-3x-hbase-backup-restore-console"></a>

控制台允许启动新集群并使用先前 HBase 备份中的数据填充该集群。它还使您能够计划 HBase 数据的定期增量备份。使用 CLI 时还可以执行其他备份和还原功能，如将数据还原到已在运行的集群、执行手动备份和计划自动完整备份。

**使用控制台向新集群填充存档 HBase 数据**

1. 导航到 Amazon EMR 新控制台，然后从侧面导航栏中选择**切换到旧控制台**。有关切换到旧控制台后预期情况的更多信息，请参阅 [Using the old console](https://docs.aws.amazon.com/emr/latest/ManagementGuide/whats-new-in-console.html#console-opt-in)。

1. 选择**创建集群**。

1. 在 “**软件配置**” 部分，对于 “**其他应用程序**”，选择 “**HBase****配置”，然后添加**。

1. 在 **Add Application (添加应用程序)** 对话框中，选中 **Restore From Backup (从备份中恢复)**。

1. 在 **B** ackup Location 中，指定要加载到新 HBase 集群中的备份的位置。该位置应是 `s3://amzn-s3-demo-bucket/backups/` 格式的 Amazon S3 URL。

1. 对于 **Backup Version (备份版本)**，您可以选择通过设置值来指定要加载的备份版本的名称。如果没有设置 **Backup Version (备份版本)** 的值，Amazon EMR 会加载指定位置中的最新备份。

1. 选择 **Add (添加)** 并继续使用所需的其他选项创建集群。

**使用控制台安排 HBase 数据的自动备份**

1. 在 “**软件配置**” 部分，对于 “**其他应用程序**”，选择 “**HBase****配置”，然后添加**。

1. 选择 **Schedule Regular Backups (安排定期备份)**。

1. 请指定备份是否应该保持一致。一致性备份指的是，在初始备份阶段为保持节点同步而暂停写入操作的备份。将任何因此而暂停的写入操作放入队列中，然后在同步完成时恢复操作。

1. 通过在 **Backup Frequency (备份频率)** 中输入一个数字并选择 **Days (天)**、**Hours (小时数)** 或 **Minutes (分钟数)**来设置备份频率。首先运行的自动备份将是完整备份；在此之后，Amazon EMR 将根据您指定的日程安排保存增量备份。

1. 指定 Amazon S3 中应当存储备份的位置。应将每个 HBase 集群备份到 Amazon S3 中的一个单独位置，以确保正确计算增量备份。

1. 通过为 **Backup Start Time (备份启动时间)** 设置一个值，指定应当何时进行第一次备份。您可以将此值设置为 `now`，使第一次备份在集群运行时立即开始，也可以输入 [ISO 格式](http://www.w3.org/TR/NOTE-datetime)的日期和时间。例如，2013-09-26T20:00Z 会将开始时间设置为 2013 年 9 月 26 日下午 8 点 (UTC)。

1. 选择**添加**。

1. 根据需要继续使用其他选项创建集群。

## HBase 使用监视器 CloudWatch
<a name="emr-3x-hbase-cloudwatch"></a>

Amazon EMR 报告了三个指标 CloudWatch ，您可以使用这些指标来 HBase监控备份。这些指标每隔五分钟推送 CloudWatch 一次，并且是免费提供的。


| 指标 | 说明 | 
| --- | --- | 
| HBaseBackupFailed |  最后一次备份是否失败。默认设置为 0，如果上一次备份尝试失败，则更新为 1。此指标仅针对 HBase 集群报告。 用例：监控 HBase 备份 单位：*计数*  | 
| HBaseMostRecentBackupDuration |  完成上一次备份所需的时长。无论最后完成的备份成功或失败，都会设置此指标。进行备份的同时，此指标返回备份开始之后的分钟数。此指标仅针对 HBase 集群报告。 用例：监控 HBase 备份 单位：*分钟*  | 
| HBaseTimeSinceLastSuccessfulBackup |  在您的集群上次成功启动 HBase备份后经过的分钟数。此指标仅针对 HBase 集群报告。 用例：监控 HBase 备份 单位：*分钟*  | 

## 将 Ganglia 配置为 HBase
<a name="emr-3x-ganglia-for-hbase"></a>

您可以将 Ganglia 配置为 HBase 使用**configure-hbase-for-ganglia**引导操作。此引导操作配置为向 Gan HBase glia 发布指标。

启动集群时必须配置 HBase 和 Ganglia；无法将 Ganglia 报告添加到正在运行的集群中。

Ganglia 还可以将日志文件存储在 `/mnt/var/log/ganglia/rrds` 处的服务器上。如果您配置了集群以将日志文件保存到 Amazon S3 存储桶，Ganglia 日志文件也会保存在那里。

要启动带有 Ganglia 的集群 HBase，请使用**configure-hbase-for-ganglia**引导操作，如下例所示。

**注意**  
为了便于读取，包含 Linux 行继续符（\$1）。它们可以通过 Linux 命令删除或使用。对于 Windows，请将它们删除或替换为脱字号（^）。

```
aws emr create-cluster --name "Test cluster" --ami-version 3.3 \
--applications Name=Hue Name=Hive Name=Pig Name=HBase Name=Ganglia \
--use-default-roles --ec2-attributes KeyName=myKey \
--instance-type c1.xlarge --instance-count 3 --termination-protected \
--bootstrap-actions Path=s3://elasticmapreduce/bootstrap-actions/configure-hbase-for-ganglia
```

在配置了 Ganglia 的情况下启动集群后，您就可以使用主节点上运行的图形界面来访问 Ganglia 图形和报告。