Amazon EMR
Amazon EMR 版本指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

Amazon EMR 的早期 AMI 版本的 HBase 应用程序细节

支持的 HBase 版本

HBase 版本 AMI 版本 AWS CLI 配置参数 HBase 版本详细信息
0.94.18 3.1.0 和更高版本

--ami-version 3.1

--ami-version 3.2

--ami-version 3.3

--applications Name=HBase

  • 错误修复和增强功能。

0.94.7 3.0-3.0.4

--ami-version 3.0

--applications Name=HBase

0.92 2.2 和更高版本

--ami-version 2.2 or later

--applications Name=HBase

HBase 集群前提条件

使用 Amazon EMR AMI 版本 2.x 和 3.x 创建的集群应满足 HBase 的以下要求。

  • AWS CLI(可选)– 要使用命令行与 HBase 交互,请下载并安装最新版本的 AWS CLI。有关更多信息,请参阅 AWS Command Line Interface 用户指南中的 安装 AWS 命令行界面

  • 至少两个实例(可选)– 集群的主节点运行 HBase 主服务器和 Zookeeper,任务节点运行 HBase 区域服务器。为获得最佳性能,HBase 集群至少应在两个 EC2 实例上运行,但在进行评估时,您可以在单一节点上运行 HBase。

  • 长时间运行的集群 – HBase 只在长时间运行的集群上运行。默认情况下,CLI 和 Amazon EMR 控制台会创建长时间运行的集群。

  • Amazon EC2 密钥对集(推荐)– 要使用安全外壳 (SSH) 网络协议连接主节点并运行 HBase shell 命令,必须在创建集群时使用 Amazon EC2 密钥对。

  • 正确的 AMI 和 Hadoop 版本 – 目前仅 Hadoop 20.205 或更高版本支持 HBase 集群。

  • Ganglia(可选)– 要监控 HBase 性能指标,可以在创建集群时安装 Ganglia。

  • 用于日志的 Amazon S3 存储桶(可选)– 在主节点上可以获得 HBase 日志。如果要将这些日志复制到 Amazon S3 中,请在创建集群时指定接收日志文件的 S3 存储桶。

创建带 HBase 的集群

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

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

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

注意

包含了 Linux 行继续符 (\) 以提高可读性。可以在 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 HBase 集群之间建立连接后 (如上一过程所示)。您可以通过在 Hive 中创建外部表访问存储在 HBase 集群上的数据。

从 Hive 提示符中运行时,以下示例创建了一个外部表,此表引用了存储在名为 inputTable 的 HBase 表上的数据。然后,您可以引用 Hive 语句中的 inputTable,查询和修改存储在 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.cn ; 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 配置

尽管默认设置应当用于大多数应用程序,但是您可以灵活地修改 HBase 配置设置。为此,请运行两种引导操作脚本之一:

  • configure-hbase-daemons – 配置主、regionserver 和 zookeeper 守护程序的属性。这些属性包括堆大小和 HBase 守护程序启动时传递至 Java 虚拟机 (JVM) 的选项。将这些属性设置为引导操作中的参数。此引导操作可修改 HBase 集群上的 /home/hadoop/conf/hbase-user-env.sh 配置文件。

  • configure-hbase – 配置 HBase 站点特定的设置,如 HBase 主程序应当绑定到的端口和 CLI 客户端应当重新尝试操作的最多次数。您可以将这些属性逐一设置为引导操作中的参数,或者您可以指定 XML 配置文件在 Amazon S3 中的位置。此引导操作可修改 HBase 集群上的 /home/hadoop/conf/hbase-site.xml 配置文件。

注意

与其他引导操作一样,这些脚本只有在创建集群时才可以运行,您不能使用它们更改目前运行的 HBase 集群的配置。

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

使用这些引导操作配置 HBase 与在 Amazon EMR 中使用引导操作配置 Hadoop 设置和 Hadoop 守护程序属性类似。区别在于,HBase 没有每个进程的内存选项。而是使用 --daemon-opts 参数设置内存选项,使用要配置的守护程序名称代替 daemon

配置 HBase 守护程序

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

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

属性 描述
hbase-master-opts 控制 JVM 如何运行主守护程序的选项。如果设置此选项,则它会覆盖默认的 HBASE_MASTER_OPTS 变量。
regionserver-opts 控制 JVM 如何运行区域服务器守护程序的选项。如果设置此选项,则它会覆盖默认的 HBASE_REGIONSERVER_OPTS 变量。
zookeeper-opts 控制 JVM 如何运行 zookeeper 守护程序的选项。如果设置此选项,则它会覆盖默认的 HBASE_ZOOKEEPER_OPTS 变量。

有关这些选项的更多信息,请参阅 HBase 文档中的 hbase-env.sh

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

注意

包含了 Linux 行继续符 (\) 以提高可读性。可以在 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 站点设置

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

注意

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

此引导操作可修改 HBase 集群上的 /home/hadoop/conf/hbase-site.xml 配置文件。只有当 HBase 集群启动时,才可以运行引导操作。

有关可配置的 HBase 站点设置的更多信息,请参阅 HBase 文档中的默认配置

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

使用 AWS CLI 指定单个 HBase 站点设置

  • 要更改 hbase.hregion.max.filesize 设置,请键入以下命令,并将 myKey 替换为您的 Amazon EC2 密钥对的名称。

    注意

    包含了 Linux 行继续符 (\) 以提高可读性。可以在 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"]

通过 AWS CLI 使用 XML 文件指定 HBase 站点设置

  1. 创建 hbase-site.xml 的自定义版本。您的自定义文件必须是有效的 XML。要减少出现错误的机会,请使用 Amazon EMR HBase 主节点上 /home/hadoop/conf/hbase-site.xml 处的 hbase-site.xml 默认副本开始,然后编辑该文件的副本,而不是从头创建全新文件。可以给您的新文件指定一个新名称,或保留 hbase-site.xml

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

  3. 设置当您启动 HBase 集群时的 configure-hbase 引导操作,并在其中包含您的自定义 hbase-site.xml 文件所在的位置。以下示例将 HBase 站点配置值设置为文件 s3://mybucket/my-hbase-site.xml 中指定的值。键入以下命令,将 myKey 替换为您的 EC2 密钥对的名称,将 mybucket 替换为您的 Amazon S3 存储桶的名称。

    注意

    包含了 Linux 行继续符 (\) 以提高可读性。可以在 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://mybucket/config.xml"]

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

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

通过设置代理并打开 SSH 连接,您可以打开浏览器窗口,通过 http://master-public-dns-name:60010/master-status 查看 HBase UI,其中 master-public-dns-name 是 HBase 集群中主节点的公有 DNS 地址。

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

备份和还原 HBase

Amazon EMR 可通过手动方式或按照计划自动将 HBase 数据备份到 Amazon S3 中。您可以执行完整备份和增量备份。拥有 HBase 数据的备份版本后,您就可以将该版本还原到 HBase 集群。您可以还原到当前正在运行的 HBase 集群,也可以启动预填充了备份数据的新集群。

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

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

在备份 HBase 数据时,应该为每个集群指定不同的备份目录。完成此操作的一种简单方法是,将集群标识符用作备份目录指定路径的一部分。例如:s3://mybucket/backups/j-3AEXXXXXX16F2。这样可确保以后所有的增量备份都引用正确的 HBase 集群。

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

HBase 备份过程将 S3DistCp 用于复制操作,这在临时文件存储空间方面存在某些限制。

使用控制台备份和还原 HBase

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

通过控制台使用已存档 HBase 数据填充新的集群

  1. 通过以下网址打开 Amazon EMR 控制台:https://console.amazonaws.cn/elasticmapreduce/

  2. 选择 Create cluster

  3. Software Configuration (软件配置) 部分中,为 Additional Applications (其他应用程序) 选择 HBaseConfigure and add (配置并添加)

  4. Add Application (添加应用程序) 对话框中,选中 Restore From Backup (从备份中恢复)

  5. 对于 Backup Location (备份位置),指定要加载到新 HBase 集群中的备份的位置。该位置应是 s3://myawsbucket/backups/ 格式的 Amazon S3 URL。

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

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

使用控制台计划 HBase 数据的自动备份

  1. Software Configuration (软件配置) 部分中,为 Additional Applications (其他应用程序) 选择 HBaseConfigure and add (配置并添加)

  2. 选择 Schedule Regular Backups (安排定期备份)

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

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

  5. 指定 Amazon S3 中应当存储备份的位置。每个 HBase 集群都应当备份至 Amazon S3 中的单独位置,以确保正确地计算增量备份。

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

  7. 选择 Add

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

使用 CloudWatch 监控 HBase

Amazon EMR 向 CloudWatch 报告三个指标,您可以用这些指标监控您的 HBase 备份。这些指标会免费推送到 CloudWatch,每五分钟一次。

指标 描述
HBaseBackupFailed

最后一次备份是否失败。默认设置为 0,如果上一次备份尝试失败,则更新为 1。仅为 HBase 集群报告此指标。

使用案例:监控 HBase 备份

单位:计数

HBaseMostRecentBackupDuration

完成上一次备份所需的时长。无论最后完成的备份成功或失败,都会设置此指标。进行备份的同时,此指标返回备份开始之后的分钟数。仅为 HBase 集群报告此指标。

使用案例:监控 HBase 备份

单位:分钟

HBaseTimeSinceLastSuccessfulBackup

在您的集群上,最后一次成功 HBase 备份开始之后经过的分钟数。仅为 HBase 集群报告此指标。

使用案例:监控 HBase 备份

单位:分钟

为 HBase 配置 Ganglia

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

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

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

要通过 Ganglia 为 HBase 启动集群,请使用 configure-hbase-for-ganglia 引导操作,如以下示例中所示。

注意

包含了 Linux 行继续符 (\) 以提高可读性。可以在 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 图形和报告。