Amazon EMR
Amazon EMR 版本指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

配置 HBase

尽管默认设置应当用于大多数应用程序,但是您可以灵活地修改 HBase 配置设置。为此,在创建集群时使用配置 API

以下示例使用替代 HBase 根目录创建集群:

注意

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

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

myConfig.json

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

注意

如果您打算将配置存储在 Amazon S3 中,则必须指定对象的 URL 位置。例如:

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

对 YARN 中内存分配的更改

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

任务 JVM 内存设置中的表说明了根据 HBase 所需的内存对 YARN 设置所做的更改。

HBase 端口号

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

HBase 端口

接口 端口 协议
HMaster 16000 TCP
HMaster UI 16010 HTTP
RegionServer 16020 TCP
RegionServer Info 16030 HTTP
REST 服务器 8070 HTTP
REST UI 8085 HTTP
Thrift 服务器 9090 TCP
Thrift 服务器 UI 9095 HTTP

重要

Hadoop KMS 端口在 Amazon EMR 版本 4.6 或更高版本中已更改。kms-http-port 现在为 9700,kms-admin-port 为 9701。

待优化的 HBase 站点设置

您可以设置任何或所有的 HBase 站点设置,以便优化 HBase 集群以更好地承载您的应用程序工作负载。我们推荐以下设置作为您的调查起点。

zookeeper.session.timeout

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

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

hbase.regionserver.handler.count

该值定义了为了向表发送请求,区域服务器保持开启的线程数量。默认值 (10) 较低,以防止用户在使用具有高并发客户端数量的大型写缓冲器时终止区域服务器。一般来说,要在每一请求的负载接近 MB 范围时保持较低的数值 (大 Put、使用大缓存的扫描)。并且在负载较小时保持较高的数值 (Get、小 Put、ICV、Delete)。以下示例将开启的线程数增加到 30:

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

hbase.hregion.max.filesize

此参数控制单一区域的大小 (以字节为单位)。默认情况下,将它设置为 256 MB。如果您向 HBase 集群中写入很多数据并且导致了频繁拆分,您可以增加它的大小以扩大单个区域。这样将会减少拆分,但会增加从一台服务器向将另一台服务器加载平衡区域的时间。

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

hbase.hregion.memstore.flush.size

刷新到磁盘前,此参数会控制 Memstore 的最大规模 (以字节为单位)。默认情况下,此值是 64 MB。如果您的工作负载包括短突发的写入操作,建议您增加此限值,以便突发期间的所有写入操作内容均留在内存中并随后刷新到磁盘。这可以在突发期间提高性能。

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