HBase 于 Amazon S3 (人Amazon S3 存储模式) - Amazon EMR
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

HBase 于 Amazon S3 (人Amazon S3 存储模式)

当您运行 HBase 于 Amazon EMR 版本5.2.0或更高版本,您可以启用 HBase 于 Amazon S3,具有以下优势:

  • 的 HBase 根目录存储在 Amazon S3,包括 HBase 存储文件和表元数据。此数据在集群外部持续存在且可跨 Amazon EC2 可用区访问,您无需使用快照或其他方法进行恢复。

  • 对于 Amazon S3 中的存储文件,您可以针对计算要求而非数据要求调整 Amazon EMR 集群的大小(在 HDFS 上为 3 倍复制)。

  • 使用 Amazon EMR 版本 5.7.0 及更高版本,您可设置只读副本集群,这允许您将数据的只读副本保留在 Amazon S3 中。如果主群集变得不可用,您可以访问只读副本群集中的数据以同时执行读取操作。

下图显示了 HBase 与 HBase 于 Amazon S3.


							HBase 于 Amazon S3 架构。

使能 HBase 于 Amazon S3

您可以启用 HBase 于 Amazon S3 使用 Amazon EMR 控制台, AWS CLI,或 Amazon EMR API。配置是群集创建期间的一个选项。使用控制台时,您可使用 高级选项. 在使用 AWS CLI 时,使用 --configurations 选项提供 JSON 配置对象。配置对象的属性指定了 Amazon S3 中的存储模式和根目录位置。您指定的 Amazon S3 位置应位于 Amazon EMR 集群所在的区域内。一次仅一个活动集群可使用 Amazon S3 中的相同 HBase 根目录。有关控制台步骤和使用 AWS CLI 的详细 create-cluster 示例,请参阅创建群集 HBase。示例配置对象显示在以下JSON代码段中。

重要

我们强烈建议您在启用时使用EMRFS一致性视图 HBase 于 Amazon S3 用于生产工作负载。不使用一致的视图可能会导致特定操作的性能影响。有关配置一致视图的更多信息,请参阅 一致视图Amazon EMR 管理指南.

{ "Classification": "hbase-site", "Properties": { "hbase.rootdir": "s3://my-bucket/my-hbase-rootdir"} }, { "Classification": "hbase", "Properties": { "hbase.emr.storageMode":"s3" } }

使用只读副本群集

使用设置主群集后 HBase 于 Amazon S3,您可以创建和配置提供对与主群集相同的数据的只读访问的读取复制群集。当您需要同时访问查询数据或在主群集不可用时不间断访问时,此功能非常有用。只读副本功能适用于 Amazon EMR 5.7.0 版和更高版本。

主群集和read-repica群集的设置方式相同,有一个重要的差异。两者都指向相同的 hbase.rootdir 位置。不过,只读副本群集的 hbase 分类包括 "hbase.emr.readreplica.enabled":"true" 属性。

例如,假定主群集的 JSON 分类如主题中前面所示,只读副本群集的配置如下所示:

{ "Classification": "hbase-site", "Properties": { "hbase.rootdir": "s3://my-bucket/my-hbase-rootdir"} }, { "Classification": "hbase", "Properties": { "hbase.emr.storageMode":"s3", "hbase.emr.readreplica.enabled":"true" } }

添加数据时同步读取副本

因为read-repica使用 HBase StoreFiles 主群集写入的和元数据 Amazon S3,读副本仅与当前重复, Amazon S3 数据仓库。在写入数据时,以下指导信息可帮助您最大程度地缩短主群集和只读副本之间的滞后时间。

  • 尽可能在主群集上批量加载数据。有关更多信息,请参阅 批量加载 在Apache中 HBase 文档。

  • 将存储文件写入 Amazon S3 的刷新操作应在添加数据后尽快进行。手动冲洗或调整冲洗设置,以尽量减少滞后时间。

  • 如果压实可能自动运行,则运行手动压实以避免在触发压实时不一致。

  • 在读复制群集上,当任何元数据已更改时,例如,当 HBase 区域拆分或压缩,或表添加或删除时-运行 refresh_meta 命令。

  • 在只读副本群集上,在表中添加或更改记录后,运行 refresh_hfiles 命令。


					将数据与同步 HBase read-复制

操作注意事项

HBase 地区服务器使用 BlockCache 将读取的数据存储在内存中,以及 BucketCache 将读取的数据存储在本地磁盘上。此外,区域服务器使用 MemStore 存储数据写入内存,并在将数据写入到 HBase StoreFiles 英寸 Amazon S3. 群集的读取性能与从内存中或磁盘缓存中检索记录的频率相关。缓存丢失会导致从 StoreFile 英寸 Amazon S3,其延迟和标准差显著高于从HDFS读取的数据。此外,Amazon S3 的最大请求速率低于可从本地缓存中检索内容的速率,因此对于需要进行大量读取操作的工作负载来说,缓存数据可能非常重要。有关 Amazon S3 性能,请参阅 性能优化Amazon Simple Storage Service 开发人员指南.

为提高性能,我们建议您在EC2实例存储中尽可能多地缓存数据集。因为 BucketCache 使用分域服务器的EC2实例存储,您可以选择具有足够实例存储的EC2实例类型,然后添加 Amazon EBS 存储以适应所需的缓存大小。您还可以使用 hbase.bucketcache.size 属性。默认设置为8,192MB。

对于写入, MemStore 冲洗次数和 StoreFiles 在小型和大型压实期间存在,可显著促进区域服务器响应时间的增加。为获得最佳性能,请考虑增加MemStoreflush和 HRegion 块乘数,这增加了主要压缩之间的经过时间,但如果您使用读复制,也会增加一致性的滞后。在某些情况下,您可能使用更大的文件块大小(但小于5GB)来触发 Amazon S3 EMRFS中的多部分上传功能。 Amazon EMR的块大小默认值为128MB。有关更多信息,请参阅HDFS 配置。我们很少看到超过1GB块大小的客户,同时通过齐平和压缩来衡量性能。此外, HBase 压缩和区域服务器在减少 StoreFiles 需要压实。

由于需要对大量目录进行重命名,因此从 Amazon S3 中删除表需要花费大量时间。考虑禁用表,而不是删除。

有一个 HBase 清洁旧WAL文件和存储文件的流程。对于 Amazon EMR 版本 5.17.0 及更高版本,全局启用清理器,且以下配置属性可用于控制清理器行为。

配置属性 默认值 Description

hbase.regionserver.hfilecleaner.large.thread.count

1

分配给清洁过期大的线程数 HFiles.

hbase.regionserver.hfilecleaner.small.thread.count

1

分配给清洁过期小 HFiles.

hbase.cleaner.scan.dir.concurrent.size

设置为所有可用核心的四分之一。

要扫描的线程数 oldWALs 目录。

hbase.oldwals.cleaner.thread.size

2

用于清洁 WALs 在 oldWALs 目录。

对于 Amazon EMR 5.17.0 及更早版本,在运行大量工作负载时,清理器操作会影响查询性能;因此,我们建议您只在非高峰时间启用清理器。清洁剂具有以下特点 HBase shell命令:

  • cleaner_chore_enabled 询问是否启用清洁剂。

  • cleaner_chore_run 手动运行清洁器以删除文件。

  • cleaner_chore_switch 启用或禁用清洁器,并返回清洁器的上一个状态。例如, cleaner_chore_switch true 启用清洁器。

属性 HBase 于 Amazon S3 性能调节

可以调整以下参数,以调整使用时的工作负载性能 HBase 于 Amazon S3.

配置属性 默认值 Description

hbase.bucketcache.size

8192

区域服务器上保留的磁盘空间总量(MB) Amazon EC2 实例存储和EBS卷 BucketCache 存储。该设置适用于所有分域服务器实例。较大 BucketCache 尺寸通常与改善的性能相对应

hbase.hregion.memstore.flush.size

134217728年

触发对 Amazon S3 的 memstore 刷新的数据限制 (以字节为单位)。

hbase.hregion.memstore.block.multiplier

4

决定 MemStore 阻止更新的上限。如果 MemStore 超过 hbase.hregion.memstore.flush.size 乘以此值,更新将被阻止。MemStore 可能通过刷新和压缩来解除阻止更新。

hbase.hstore.blockingStoreFiles

10

最大 StoreFiles 可以存在于商店中,然后才会阻止更新。

hbase.hregion.max.filesize

10737418240年

地区之前的最大地区大小为拆分。

关闭并恢复群集而不丢失数据

要关闭 Amazon EMR 集群而不丢失尚未写入 Amazon S3 的数据,MemStore 缓存需要刷新到 Amazon S3 以写入新存储文件。要执行此操作,您可以运行EMR群集上提供的shell脚本。您可以将它添加为步骤,或使用群集CLI直接运行它。脚本将禁用所有 HBase 表格,这会导致 MemStore 每个区域服务器,以 Amazon S3. 如果此脚本成功完成,数据将保留在 Amazon S3 中,并且可以终止集群。

将步骤添加到群集时,可以使用以下步骤配置。有关更多信息,请参阅 使用CLI和控制台处理步骤Amazon EMR 管理指南.

Name="Disable all tables",Jar="command-runner.jar",Args=["/bin/bash","/usr/lib/hbase/bin/disable_all_tables.sh"]

或者,您可以直接运行以下bash命令。

bash /usr/lib/hbase/bin/disable_all_tables.sh

如何重新启动具有相同的群集 HBase 数据,请指定相同的 Amazon S3 位置作为上一个群集, AWS 管理控制台 或使用 hbase.rootdir 配置属性。