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

配置 HBase

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

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

注意

为了便于读取,包含 Linux 行继续符(\)。它们可以通过 Linux 命令删除或使用。对于 Windows,请将它们删除或替换为脱字号(^)。

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

myConfig.json 文件指定 hbase-site 配置分类的 hbase.rootdir 属性,如以下示例中所示。将 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 控制台、Amazon Command Line Interface(Amazon CLI)或 Amazon SDK。有关更多信息,请参阅为运行的集群中的实例组提供配置

对 YARN 中内存分配的更改

HBase 不是作为 YARN 应用程序运行的,因此有必要重新计算分配给 YARN 及其应用程序的内存,这会导致如果安装 HBase,YARN 可用的总内存会减少。您在规划将 YARN 应用程序和 HBase 共同放置在相同的集群时应考虑这一点。内存小于 64GB 的实例类型有一半的内存可供 NodeManager 使用,然后再分配给 HBase RegionServer。对于内存大于 64GB 的实例类型,HBase RegionServer 内存的上限为 32GB。一般来说,YARN 设置内存是 MapReduce 折叠器任务内存的几倍。

任务配置设置的默认值中的表显示了根据 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
重要

在 Amazon EMR 发行版 4.6.0 及更高版本中,kms-http-port 为 9700,kms-admin-port 为 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 范围(大放置、使用大缓存扫描)时保持数值较低,而当负载较小(获取、小放置、ICV、删除)时保持数值较高。以下示例将打开的线程数提高到 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" } } ]