本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
HBase早期AMI版本的 Amazon 的应用程序细节 EMR
支持的HBase版本
HBase集群先决条件
使用 Amazon 2.x 和 3.x EMR AMI 版本创建的集群应满足以下要求。HBase
-
Amazon CLI (可选)-要HBase使用命令行进行交互,请下载并安装最新版本的 Amazon CLI。有关更多信息,请参阅Amazon Command Line Interface 《用户指南》中的安装 Amazon Command Line Interface。
-
至少两个实例(可选)— 群集的主节点运行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使用备份位置的最新备份来填充新HBase集群。 |
Schedule Regular Backups (安排定期备份) | 指定是否要计划自动增量备份。第一次备份是完整备份,为以后的增量备份创建基线。 |
Consistent backup (一致性备份) | 请指定备份是否应该保持一致。一致性备份指的是,在初始备份阶段为保持节点同步而暂停写入操作的备份。将任何因此而暂停的写入操作放入队列中,然后在同步完成时恢复操作。 |
Backup frequency (备份频率) | 计划备份间隔的天/小时/分钟数。 |
Backup location (备份位置) | 存储备份URI的 Amazon S3。每个HBase群集的备份位置应不同,以确保差异备份保持正确。 |
Backup start time (备份启动时间) | 指定进行首次备份的时间。您可以将其设置为now ,这样在集群运行后立即启动第一次备份,或者以ISO格式 |
以下示例 Amazon CLI 命令启动带有HBase和其他应用程序的集群:
注意
为了便于读取,包含 Linux 行继续符 (\)。它们可以通过 Linux 命令删除或使用。对于 Windows,请将它们删除或替换为脱字号 (^)。
aws emr create-cluster --name "
Test cluster
" --ami-version3.3
\ --applications Name=Hue
Name=Hive
Name=Pig
Name=HBase
\ --use-default-roles --ec2-attributes KeyName=myKey
\ --instance-typec1.xlarge
--instance-count3
--termination-protected
在 Hive 和HBase集群之间建立连接后(如前面的过程所示),您可以通过在 Hive 中创建外部表来访问存储在HBase集群上的数据。
以下示例在 Hive 提示符下运行时,会创建一个外部表,该表引用存储在名inputTable
为的HBase表中的数据。然后,您可以inputTable
在 Hive 语句中引用以查询和修改存储在HBase集群中的数据。
注意
以下示例在 2. AMI 3.3 中使用 p rotobuf-java-2.4.0a.jar,但您应该修改示例以匹配您的版本。要检查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
尽管默认设置应该适用于大多数应用程序,但您可以灵活地修改HBase配置设置。为此,请运行两种引导操作脚本之一:
-
configure-hbase-daemons— 配置主守护程序、区域服务器守护程序和 zookeeper 守护程序的属性。这些属性包括堆大小和HBase守护程序启动时传递给 Java 虚拟机 (JVM) 的选项。将这些属性设置为引导操作中的参数。此引导操作修改集群上的 /home/hadoop/ hbase-user-env conf/ .sh 配置文件。HBase
-
configure HBase-hbase —配置特定于站点的设置,例如HBase主服务器应绑定的端口以及客户端客户端应重试操作的最大次数。CLI您可以将它们 one-by-one设置为引导操作中的参数,也可以在 Amazon S3 中指定XML配置文件的位置。此引导操作修改集群上的 /home/hadoop/conf/hbase-site.xml 配置文件。HBase
注意
与其他引导操作一样,这些脚本只能在创建集群时运行;您不能使用它们来更改当前正在运行的HBase集群的配置。
运行 configu re-hbase 或configure-hbase-daemons引导操作时,您指定的值会覆盖默认值。任何未显式设置的值都会接受默认值。
使用这些引导操作HBase进行配置类似于在 Amazon 中使用引导操作EMR来配置 Hadoop 设置和 Hadoop 守护程序属性。不同之处在于HBase没有每进程内存选项。相反,内存选项是使用--
参数设置的,其中 daemon
-optsdaemon
被要配置的守护程序的名称所取代。
配置HBase守护程序
Amazon EMR 提供了一个引导操作s3://
,您可以使用它来更改HBase守护程序的配置,其中 region
.elasticmapreduce/bootstrap-actions/configure-hbase-daemonsregion
是您要启动HBase集群的区域。
要使用配置HBase守护程序 Amazon CLI,请在启动集群时添加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-opts
和 hbase-master-opts
配置值的引导操作。
注意
为了便于读取,包含 Linux 行继续符(\)。它们可以通过 Linux 命令删除或使用。对于 Windows,请将它们删除或替换为脱字号 (^)。
aws emr create-cluster --name "
Test cluster
" --ami-version3.3
\ --applications Name=Hue
Name=Hive
Name=Pig
Name=HBase
\ --use-default-roles --ec2-attributes KeyName=myKey
\ --instance-typec1.xlarge
--instance-count3
--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您可以将配置值 one-by-one设置为引导操作中的参数,也可以在 Amazon S3 中指定XML配置文件的位置。如果您只需要设置几个配置设置, one-by-one 则设置配置值非常有用。如果您要进行许多更改,或者要保存配置设置以供重复使用,则使用XML文件进行设置会很有用。
注意
您可以在 Amazon S3 存储桶名称前加上区域前缀,例如s3://
,其中 region
.elasticmapreduce/bootstrap-actions/configure-hbaseregion
是您要启动HBase集群的区域。
此引导操作修改集群上的/home/hadoop/conf/hbase-site.xml
配置文件。HBase引导操作只能在HBase集群启动时运行。
有关您可以配置的HBase站点设置的更多信息,请参阅HBase文档中的默认配置
在configure-hbase
启动HBase集群时设置引导操作,并在中指定hbase-site.xml
要更改的值。
要指定各个HBase站点的设置,请使用 Amazon CLI
-
要更改
hbase.hregion.max.filesize
设置,请键入以下命令并替换myKey
使用您的 Amazon EC2 密钥对的名称。注意
为了便于读取,包含 Linux 行继续符 (\)。它们可以通过 Linux 命令删除或使用。对于 Windows,请将它们删除或替换为脱字号 (^)。
aws emr create-cluster --name "
Test cluster
" --ami-version3.3
\ --applications Name=Hue
Name=Hive
Name=Pig
Name=HBase
\ --use-default-roles --ec2-attributes KeyName=myKey
\ --instance-typec1.xlarge
--instance-count3
--termination-protected \ --bootstrap-actions Path=s3://elasticmapreduce/bootstrap-actions/configure-hbase
,Args=["-s","hbase.hregion.max.filesize=52428800"
]
要使用XML文件指定HBase站点设置,请使用 Amazon CLI
-
创建
hbase-site.xml
的自定义版本。您的自定义文件必须有效XML。为了减少引入错误的机会,请从位于 Amazon EMR HBase 主节点的hbase-site.xml
默认副本开始/home/hadoop/conf/hbase-site.xml
,然后编辑该文件的副本,而不是从头开始创建文件。可以给您的新文件指定一个新名称,或保留hbase-site.xml
。 -
将您的自定义
hbase-site.xml
文件上传到 Amazon S3 存储桶。它应该设置权限,以便启动集群的 Amazon 账户可以访问该文件。如果启动集群的 Amazon 账户还拥有 Amazon S3 存储桶,则该账户有权访问。 -
在启动集HBase群时设置 con figure-hbase 引导操作,并包括自定义文件的位置。
hbase-site.xml
以下示例将HBase站点配置值设置为文件中指定的值s3://mybucket/my-hbase-site.xml
。键入以下命令,替换myKey
用你的 EC2 key pair 的名字,然后替换mybucket
使用您的 Amazon S3 存储桶的名称。注意
为了便于读取,包含 Linux 行继续符 (\)。它们可以通过 Linux 命令删除或使用。对于 Windows,请将它们删除或替换为脱字号 (^)。
aws emr create-cluster --name "
Test cluster
" --ami-version3.3
\ --applications Name=Hue
Name=Hive
Name=Pig
Name=HBase
\ --use-default-roles --ec2-attributes KeyName=myKey
\ --instance-typec1.xlarge
--instance-count3
--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://打开浏览器窗口来查看HBase用户界面master-public-dns-name
:60010/master-status,其中 master-public-dns-name
是HBase集群中主节点的公共DNS地址。
您可以使用连接到主节点并导航SSH到该mnt/var/log/hbase
目录来查看当前HBase日志。除非您在集群启动时启用了针对 Amazon S3 的日志记录,否则这些日志将在集群终止后不再可用。
备份和恢复 HBase
Amaz EMR on 允许您手动或按自动计划将您的HBase数据备份到 Amazon S3。您可以执行完整备份和增量备份。获得备份版本HBase的数据后,可以将该版本恢复到集HBase群。您可以恢复到当前正在运行的HBase集群,也可以启动预先填充了备份数据的新集群。
在备份过程中,HBase继续执行写入命令。虽然这样可确保集群在整个备份过程中都处于可用状态,但存在的风险是,正在备份的数据可能与并行执行的任何写入操作不一致。要了解可能出现的不一致性,您必须考虑在集群中的节点之间HBase分配写入操作。如果写入操作发生在轮询特定节点之后,则备份存档中不会包含该数据。您甚至可能会发现,早期对HBase集群的写入(发送到已经轮询过的节点)可能不在备份存档中,而后来的写入(在轮询之前发送到节点)则包括在内。
如果需要一致的备份,则必须在备份过程的HBase初始部分(跨节点同步)暂停写入。您可以通过在请求备份时指定 --consistent
参数完成此操作。指定此参数后,系统会将此期间的写入操作加入队列并在同步完成后立即执行这些操作。您还可以计划重复备份,一次备份过程中遗失的数据会在后续备份过程中得到备份,从而解决随时间推移而产生的任何不一致问题。
备份HBase数据时,应为每个群集指定不同的备份目录。完成此操作的一种简单方法是,将集群标识符用作备份目录指定路径的一部分。例如,s3://mybucket/backups/j-3AEXXXXXX16F2
。这样可以确保将来的任何 future 增量备份都引用正确的HBase群集。
当您准备删除不再需要的旧备份文件时,我们建议您先对HBase数据进行完整备份。这样可确保保留所有数据并为以后的增量备份提供基线。完成完整备份后,您可以导航到备份位置并手动删除旧备份文件。
HBase备份过程使用 S3 DistCp 进行复制操作,这在临时文件存储空间方面有一定的限制。
HBase使用控制台进行备份和恢复
控制台允许启动新集群并使用先前HBase备份中的数据填充该集群。它还使您能够计划HBase数据的定期增量备份。其他备份和还原功能,例如将数据还原到已在运行的集群、进行手动备份和安排自动完整备份的功能,可使用使用CLI。
使用控制台向新集群填充存档HBase数据
导航到新的 Amazon EMR 控制台,然后从侧面导航栏中选择 “切换到旧主机”。有关切换到旧控制台后预期情况的更多信息,请参阅 Using the old console。
-
选择创建集群。
-
在 “软件配置” 部分,对于 “其他应用程序”,选择 “HBase配置”,然后添加。
-
在 Add Application (添加应用程序) 对话框中,选中 Restore From Backup (从备份中恢复)。
-
在 B ackup Location 中,指定要加载到新HBase集群中的备份的位置。这应该是格式的 Amazon S3 URL
s3://myawsbucket/backups/
。 -
对于 Backup Version (备份版本),您可以选择通过设置值来指定要加载的备份版本的名称。如果您没有为备份版本设置值,Amazon 会将最新备份EMR加载到指定位置。
-
选择 Add (添加) 并继续使用所需的其他选项创建集群。
使用控制台安排自动备份HBase数据
-
在 “软件配置” 部分,对于 “其他应用程序”,选择 “HBase配置”,然后添加。
-
选择 Schedule Regular Backups (安排定期备份)。
-
请指定备份是否应该保持一致。一致性备份指的是,在初始备份阶段为保持节点同步而暂停写入操作的备份。将任何因此而暂停的写入操作放入队列中,然后在同步完成时恢复操作。
-
通过在 Backup Frequency (备份频率) 中输入一个数字并选择 Days (天)、Hours (小时数) 或 Minutes (分钟数)来设置备份频率。运行的第一个自动备份是完整备份;之后,Amazon EMR 会根据您指定的计划保存增量备份。
-
指定 Amazon S3 中应当存储备份的位置。应将每个HBase集群备份到 Amazon S3 中的一个单独位置,以确保正确计算增量备份。
-
通过为 Backup Start Time (备份启动时间) 设置一个值,指定应当何时进行第一次备份。您可以将其设置为
now
,这样在集群运行后立即启动第一次备份,或者以ISO格式输入日期和时间。例如,2013-09-26T20:00Z 将开始时间设置为 2013 年 9 月 26 日晚上 8 点。UTC -
选择添加。
-
根据需要继续使用其他选项创建集群。
HBase使用监视器 CloudWatch
Amazon EMR 报告了三个指标 CloudWatch ,您可以使用这些指标来监控HBase备份。这些指标每隔五分钟推送 CloudWatch 一次,并且是免费提供的。
指标 | 描述 |
---|---|
HBaseBackupFailed |
最后一次备份是否失败。默认设置为 0,如果上一次备份尝试失败,则更新为 1。此指标仅针对HBase集群报告。 用例:监控HBase备份 单位:计数 |
HBaseMostRecentBackupDuration |
完成上一次备份所需的时长。无论最后完成的备份成功或失败,都会设置此指标。进行备份的同时,此指标返回备份开始之后的分钟数。此指标仅针对HBase集群报告。 用例:监控HBase备份 单位:分钟 |
HBaseTimeSinceLastSuccessfulBackup |
在您的集群上次成功启动HBase备份后经过的分钟数。此指标仅针对HBase集群报告。 用例:监控HBase备份 单位:分钟 |
将 Ganglia 配置为 HBase
您可以将 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 行继续符 (\)。它们可以通过 Linux 命令删除或使用。对于 Windows,请将它们删除或替换为脱字号(^)。
aws emr create-cluster --name "
Test cluster
" --ami-version3.3
\ --applications Name=Hue
Name=Hive
Name=Pig
Name=HBase
Name=Ganglia
\ --use-default-roles --ec2-attributes KeyName=myKey
\ --instance-typec1.xlarge
--instance-count3
--termination-protected \ --bootstrap-actions Path=s3://elasticmapreduce/bootstrap-actions/configure-hbase-for-ganglia
在配置了 Ganglia 的情况下启动集群后,您就可以使用主节点上运行的图形界面来访问 Ganglia 图形和报告。