许多客户已经在享受使用
HBase on Amazon S3的众多好处,包括更低的成本、更好的数据持久性和更便捷的可扩展性。美国金融业监管局 (FINRA) 已
通过迁移到 HBase on Amazon S3架构将成本降低了 60%,并通过将存储与计算解耦以及将 S3 用作存储层获得了众多运营优势。HBase on Amazon S3 允许您启动集群并立即开始对 S3 中的数据进行查询,而不必执行冗长的快照还原过程。随着
Amazon EMR 5.7.0 的发布,您现在可以将 HBase on Amazon S3 的高可用性和持久性提升到集群级别,您现在可以启动多个 HBase 只读集群,并将这些集群连接到 S3 中的相同 HBase 根目录。这可以确保您的数据始终可以通过只读副本集群访问,并且可以在多个可用区中运行集群。在本文中,我将指导您使用 HBase on Amazon S3 设置只读副本集群。
HBase 概览
Apache HBase 是 Apache Hadoop 生态系统中的一种大规模可扩展分布式大数据存储。它是一种开源、非关系型、版本控制的数据库,在 Hadoop 分布式文件系统 (HDFS) 上运行。它为具有数十亿行和数百万列的表提供了随机、强一致、实时的数据访问。它与 Apache Hadoop、Apache Hive 和 Apache Pig 紧密集成,因此您可以轻松兼得大规模并行分析与快速数据访问的优势。HBase 的数据模型、吞吐量和容错能力非常适合广告技术、网络分析、金融服务以及使用时序数据的应用程序中的工作负载等等。
像许多 NoSQL 技术一样,HBase 中的表结构应直接受到数据的查询和访问模式的影响。查询性能会因集群采用的数据处理和返回方式而大不相同。
HBase on Amazon S3
要使用 HBase on Amazon S3 只读副本,必须首先使用 HBase on Amazon S3。如果您还不熟悉 HBase on Amazon S3 架构,本节将介绍一些基础知识供您参考。
通过将 S3 用作 HBase 的数据存储,您可以分离集群的存储和计算节点。这使您能够通过调整集群大小来满足您的计算需求,从而降低成本。您不必为存储在集群 Hadoop 分布式文件系统 (HDFS) 中的整个数据集的 3 副本而付费。
EMR 将 HBase on Amazon S3 配置为在集群中的内存和磁盘上缓存数据,以提高 S3 的读取性能。您可以快速轻松地扩展和缩减计算节点,而不会影响底层存储。您还可以终止集群以削减成本,然后在另一个可用区中快速还原它。
从 EMR 5.2.0 版开始,HBase 开始支持 S3。要将 S3 用作数据存储,请在 HBase 配置中配置存储模式并指定根目录。另外,建议启用 EMRFS 一致性视图。有关更多信息,请参阅 HBase on Amazon S3。
HBase on Amazon S3 只****读副本集群的使用场景
使用 HBase on Amazon S3 可以安全持久地存储您的数据。它在集群以外持久保留数据,从而消除了在终止集群时可能丢失数据的风险。在某些情况下,您希望确保 HBase 上数据的高可用性,即使是发生了集群或可用区故障的罕见事件。另一种情况是,您希望可以让多个集群访问 S3 中的相同根目录。如果您的主集群在批量加载、写入和压缩期间处于高负载状态,则您可以借助此功能创建辅助集群,以实现负载分担,将读取负载与写入负载分离开来,从而确保您满足读取服务级别协议要求,同时围绕成本和性能进行优化。
下图显示了没有只读副本的 HBase on Amazon S3。在这种情况下,集群故障或可用区故障等事件会导致用户无法访问 HBase 上的数据。
HBase 根目录(包括 HFile 和元数据)保存在 S3 中:
在 EMR 5.7.0 之前,您不能将多个集群指向同一个根目录。对于要求高可用性的架构,您需要在 S3 上创建重复数据。
自 EMR 5.7.0 发布后,您现在可以启动多个 HBase 只读集群,并可将这些集群连接到 S3 中的相同 HBase 根目录。这让您可以确保数据始终可以通过只读副本集群访问,并且可以在多个可用区中运行您的集群。
以下是一些使用 HBase on Amazon S3 只读副本的架构示例,它们显示了可能的停机事件之前和之后的情况。
同一可用区中的 HBase 只读副本 – 在主集群发生故障时具有恢复能力。
不同可用区中的 HBase 只读副本 – 在可用区发生故障时具有恢复能力。
使用 HBase on Amazon S3 只读副本的另一个场景是,您能够根据负载相应地调整集群的大小。例如,如果您预计读取负载较小,但仍然需要确保高可用性,则可以将只读副本的大小设置为较小的值,并且使用较小的实例类型。
另一个示例是批量加载,在这种情况下,您的写入集群可以在批量加载期间扩展以支持峰值负载。然后,在批量加载完成后,再将集群缩减到最小的规模。在扩展和收缩的过程中,您的只读副本可以保持特定于读取的集群规模,甚至可以具有异构的混合规模。
参考示例
您可以参考以下步骤设置 HBase on Amazon S3 只读副本环境。此功能仅在 EMR 5.7.0 及更高版本中可用。
使用 HBase on Amazon S3 创建 EMR 集群
示例配置 JSON:
Json
将数据添加到主集群
在使用 HBase 只读副本加载系统时,必须确保从主集群发起的所有写入操作都作为 HFile 刷新到 S3。只读副本集群从这些 HFile 中读取,并且无法读取尚未从 Memstore 中刷新的任何新写入操作。为确保只读副本集群读取的是最新数据,请按照以下步骤操作:
照常将数据插入 HBase 主集群(如果数据量较大,最好使用 BulkLoading)。
确保(使用 flush 命令)将数据刷新到 S3。注意:这种做法仅在不使用 BulkLoading 时才有意义。
等待所有区域拆分或合并完成,以确保 hbase:meta 表处于一致状态。
如果任何区域已发生更改(拆分、合并)或者任何表元数据已修改(添加/删除了表),请在只读副本集群上运行 refresh_meta 命令。
在只读副本集群上,对更新的表运行 refresh_hfiles 命令。
从副本读取数据
现在,您可以照常从集群读取数据了。
从主集群读取数据的屏幕截图
从只读副本集群读取数据的屏幕截图
如您所见,两个集群返回了相同的值。
保持只读副本的一致性
为使只读副本集群保持一致,请遵循以下通用准则:
在只读副本上:
在以下情况下运行“refresh_hfiles”:
为表添加/修改记录。
在以下情况下运行“refresh_meta”:
区域发生了更改(拆分、压缩)或任何表元数据发生了修改(添加/删除了表)
在主集群上:
如果启用了 compaction,请执行 compaction,以避免在触发 major compaction(minor compaction 可以处理)时出现不一致。
相关属性和命令
HBase 属性:
提醒:如果将 hbase.emr.readreplica.enabled 设置为 true,则系统会自动设置这些属性。
HBase 命令:
小结
现在,您可以为 HBase on Amazon S3 集群创建高可用性的只读副本集群。一旦发生集群故障、 I/O 密集的 compaction 甚至是较为罕见的可用区故障事件,您都可以保证正常的 HBase 数据读取访问。如需了解详情,请参阅使用 HBase on Amazon S3只读副本集群。
建议您尝试一下 HBase on Amazon S3 只读副本功能!
后续步骤
将您的技能提升到更高水准。学习从 HDFS 迁移到 S3 上的 Apache HBase 的技巧。
本文转载自 AWS 技术博客。
原文链接:https://amazonaws-china.com/cn/blogs/china/setting-up-read-replica-clusters-with-hbase-on-amazon-s3/
评论