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

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

配置 HBase

尽管默认 HBase 设置应适用于大多数应用程序,但您可以修改 HBase 配置设置。为此,请使用 HBase 配置分类的属性。有关更多信息,请参阅配置应用程序

以下示例基于存储在 myConfig.json 中的配置文件 Amazon S3 创建了一个具有备用 HBase 根目录的集群。

注意

包含了 Linux 行继续符 (\) 以提高可读性。可以在 Linux 命令中删除或使用它们。对于 Windows,请删除它们或将其替换为脱字号 (^)。

aws emr create-cluster --release-label emr-5.32.0 --applications Name=HBase \ --instance-type m5.xlarge --instance-count 3 --configurations https://s3.amazonaws.com/mybucket/myfolder/myConfig.json

myConfig.json 文件指定 hbase.rootdir 配置分类的 hbase-site 属性,如以下示例所示。Replace ip-XXX-XX-XX-XXX.ec2.internal 替换为集群主节点的内部 DNS 主机名。

[ { "Classification":"hbase-site", "Properties": { "hbase.rootdir": "hdfs://ip-XXX-XX-XX-XXX.ec2.internal:8020/user/myCustomHBaseDir" } } ]
注意

使用 Amazon EMR 版本 5.21.0 以及更高版本,您可以覆盖集群配置,并为运行的集群中的每个实例组指定更多配置分类。您可以使用 Amazon EMR 控制台、AWS Command Line Interface (AWS CLI) 或 AWS 开发工具包来实现此操作。有关更多信息,请参阅为正在运行的实例中的实例组提供配置

对 YARN 中内存分配的更改

HBase 未作为 YARN 应用程序运行,因此,有必要重新计算分配给 YARN 及其应用程序的内存,这会导致在安装了 HBase 的情况下 YARN 可用的总体内存减少。您在计划将 YARN 应用程序和 HBase 共同放置在相同的群集上时应考虑这一点。内存小于 64 GB 的实例类型具有 NodeManager 可用的内存的一半,该内存随后将分配给 HBase RegionServer。对于内存大于 64 GB 的实例类型HBase RegionServer 内存限制为 32 GB。一般来说,YARN 设置内存是 MapReduce Reducer 任务内存的倍数。

中的表根据 HBase 所需的内存任务配置设置的默认值显示对 YARN 设置的更改。

HBase 端口号

为 HBase 选择的一些端口号与默认值不同。以下是适用于 Amazon EMR 上的 HBase 的接口和端口。

HBase 端口
接口 端口 协议
HMaster 16000 TCP
HMaster UI 16010 HTTP
RegionServer 16020 TCP
RegionServer 信息 16030 HTTP
REST 服务器 8070 HTTP
REST UI 8085 HTTP
Thrift 服务器 9090 TCP
Thrift 服务器 UI 9095 HTTP
重要

kms-http-port 版本 4.6.0 及更高版本中,kms-admin-port 为 9700,Amazon EMR 为 9701。

用于优化 的 HBase 站点设置

您可以设置任何或所有 HBase 站点设置,以针对应用程序的工作负载优化 HBase 集群。我们建议将以下设置作为调查的起点。

zookeeper.session.timeout

默认超时时间为 40 秒(40000 毫秒)。如果区域服务器崩溃,则上述值是主服务器注意到区域服务器缺少及开始恢复所需的时长。要帮助更快地恢复主服务器,可以将此值减小到更短的时间。以下示例使用 30 秒或 30000 毫秒:

[ { "Classification":"hbase-site", "Properties": { "zookeeper.session.timeout": "30000" } } ]

hbase.regionserver.handler.count

这定义了区域服务器为处理对 表的请求而保持开放的线程数。默认值 10 较低,以防止用户在对大量并发客户端使用大型写入缓冲区时终止其区域服务器。经验法则是,当每个请求的负载接近 MB 范围(长放置、使用大型缓存扫描)时,保持此数字较低;当负载较小(小放置、小放置ICVs删除)时,保持此数字较高。以下示例将打开的线程数增加到 30:

[ { "Classification":"hbase-site", "Properties": { "hbase.regionserver.handler.count": "30" } } ]

hbase.hregion.max.filesize

此参数管理各个区域的大小(以字节为单位)。默认情况下,将它设置为 1073741824. 如果您将大量数据写入HBase 集群中,并且导致频繁拆分,则可以增加此大小以使各个区域更大。它减少了拆分,但需要更多时间来对区域从一个服务器加载到另一个服务器进行负载均衡。

[ { "Classification":"hbase-site", "Properties": { "hbase.hregion.max.filesize": "1073741824" } } ]

hbase.hregion.memstore.flush.size

此参数控制 memstore 在刷新到磁盘之前的最大大小(以字节为单位)。默认为 134217728。如果您的工作负载包含短时间的写入操作突增,您可能希望提高此限制,以便在突增期间将所有写入保留在内存中,并在稍后刷新到磁盘。这可以在突增期间提高性能。

[ { "Classification":"hbase-site", "Properties": { "hbase.hregion.memstore.flush.size": "134217728" } } ]