大咖直播-鸿蒙原生开发与智能提效实战!>>> 了解详情
写点什么

搭建基于 S3 的 HBase 读备份集群

  • 2019-11-11
  • 本文字数:3678 字

    阅读完需:约 12 分钟

搭建基于S3的HBase读备份集群

当前 aws 的很多客户已经从将 s3 作为 HBase 的存储中获益,这当中包括更低的存储花费、更好的数据可靠性、更容易的扩展操作等待。比如 FINRA 就通过将 HBase 迁移到 s3 上将在存储上的花费降低了 60%,此外还带来了运维上的便利,以及架构上的重大优化:将 s3 作为统一的存储层,实现了更彻底的存储和计算分离。在 s3 上部署 HBase 集群,可以让你在集群启动后立即进行数据查询操作,而不用等待漫长的快照恢复过程。


随着 Amazon EMR 5.7.0 的发布,现在你可以在集群层面进一步提升数据的高可用性和高可靠性,方法是基于同一个 s3 存储桶建立多个 HBase 的读备份集群。这会让你的数据通过读备份集群及时地被用户访问,即使在主集群遇到问题关闭的时候,当然你还可以通过在多个可用区中部署读备份集群来进一步增加数据访问服务的可靠性。


接下来的文章将告诉你如何在 s3 上建立 HBase 的读备份集群。

HBase 简介

Apache HBase 是 Apache Hadoop 生态体系中的大规模、可扩展、分布式的数据存储服务。同时它还是开源的,非关系型的版本数据库,默认情况下运行在 HDFS 之上。它的设计初衷是为包含了数百万个列的数十亿行记录提供随机的、强一致性的、实时访问。同时它还和 Apache Hadoop、Apache Hive 和 Apache Pig 等大数据服务紧密结合,所以你可以轻易地为并行数据处理提供快速的数据访问。HBase 数据模型、吞吐量、和容错机制能很好地为广告、web 分析、金融服务和基于时间序列数据的应用等工作负载提供支持。


和其他很多 Nosql 数据库类似,HBase 中的表设计直接影响着数据的查询和访问模式,根据这些模式的不同,查询的性能表现也会有非常大的差异。

HBase on S3

在建立基于 S3 的 HBase 读备份集群之前,你必须先学会 HBase on S3 的部署方法,本段为那些不熟悉 HBase on S3 架构的人提供了一些基本信息。


你可以通过将 S3 作为 HBase 的存储层,来分离集群的存储和计算节点。这使得你可以根据计算需求来规划集群,从而削减开支,毕竟你不再需要为 HDFS 上存储的 3 备份数据支付费用了。


HBase on S3 架构中的默认 EMR 配置使用内存和本地磁盘来缓存数据,以此来提升基于 S3 的读性能。你可以在不影响底层存储的情况下任意地对计算节点进行伸缩,或者你还可以关闭集群来节省开支,然后快速地在另一个 AZ 中重新进行部署。

HBase on S3 读备份集群应用案例

使用 HBase on S3 架构使得你的数据被安全、可靠地存储起来。它将数据和集群隔离进行存储,消除了因为集群异常终止带来数据丢失的可能性。尽管如此,在一些特殊情况下,你还是会希望数据能获得更高的可用性,比如集群异常终止或者整个 AZ 失效。另外一个情况是,通过多个集群访问一个 S3 上的根目录,你可以隔离 HBase 集群的读写操作,从而来降低集群的压力,提供更高 SLA 的查询服务。尤其是在主集群因为 bulk load、heavy write、compaction 等操作变得异常繁忙的时候。


下图展示了没有读备份的 HBase on S3 架构,在这个场景下,诸如集群终止和 AZ 失效等异常情况会使得用户无法访问数据。


S3 上的 HBase 根目录,包含了 HFile 和表的原数据信息。



EMR 5.7.0 之前的版本,无法将多个 HBase 集群指向同一个 S3 上的根目录,为了获得更高的可用性,你需要在 S3 上创建多个数据副本,并管理它们之间的一致性。



随着 EMR 5.7.0 的发布,现在你可以启动多个读备份集群并指向 S3 桶上同一个根目录,保证了你的数据通过读备份集群它们总是可达的。



下面是一些使用 HBase 读备份集群的例子,展示了启用前后的一些对比情况。


处于同一个 AZ 的 HBase 读备份集群:





处于不同 AZ 的 HBase 读备份集群:




基于 S3 的 HBase 读备份集群的另一个好处是可以更加灵活地根据具体的工作负载来规划你的集群。比如,虽然你的读负载很低,但还是想要获得更高的可用性,那么就可以启动一个由较小实例组成的规模较小的集群。另一个例子是当你遭遇 bulk load 时,在高峰期集群需要扩张到很大以满足计算需求,在 bulk load 结束后,集群可以立即缩减以节省开支。在主集群伸缩的时候,读备份集群可以维持一个固定的规模以对外提供稳定的查询服务。

步骤

使用下列的步骤来启动基于 S3 的 HBase 读备份集群,这项功能只针对 EMR 5.7.0 之后的版本。

创建使用 HBase on S3 的 EMR 集群:

Java


aws emr create-cluster --termination-protected --applications Name=Hadoop Name=Hive Name=HBase Name=Spark Name=Phoenix --ec2-attributes '{"KeyName":""}' --release-label emr-5.7.0 --instance-groups '[{"InstanceCount":1,"InstanceGroupType":"MASTER","InstanceType":"m3.xlarge","Name":"Master - 1"},{"InstanceCount":20,"BidPrice":"0.15","InstanceGroupType":"CORE","InstanceType":"m3.2xlarge","Name":"Core - 2"}]' --configurations '[{"Classification":"emrfs-site","Properties":{"fs.s3.consistent.retryPeriodSeconds":"1","fs.s3.consistent":"true","fs.s3.consistent.retryCount":"5","fs.s3.consistent.metadata.tableName":"YOUR_CONSISTENT_VIEW_TABLE_NAME"},"Configurations":[]},{"Classification":"hbase","Properties":{"hbase.emr.storageMode":"s3","hbase.emr.readreplica.enabled":"true"},"Configurations":[]},{"Classification":"hbase-site","Properties":{"hbase.rootdir":"s3:///"},"Configurations":[]}]' --service-role EMR_DefaultRole --name 'HBase Read Replica'
复制代码


配置文件示例 JSON


Java


[    {       "Classification":"hbase-site",      "Properties":{          "hbase.rootdir":"s3://{S3_LOCATION}",      }   },   {       "Classification":"hbase",      "Properties":{          "hbase.emr.storageMode":"s3",         "hbase.emr.readreplica.enabled":"true"      }   }]
复制代码

向主集群添加数据

需要特别注意的是,在使用 HBase 读备份集群时,你必须要确保主集群上所有的写操作都被刷新到 S3 桶的 HFile 中。读备份集群会读取这些 HFile 中的数据,任何没有从 Memstore 刷新到 S3 的数据都不能通过读备份集群访问。为了确保读备份集群总是读到最新的数据,请参考以下步骤:


  • 写入数据到主集群(大批量写入请使用 Bulkload)

  • 确保数据被刷新到 S3 桶中(使用 Flush 命令)

  • 等待 region 分割以及合并操作完成以确保 HBase 表的元数据信息保持一致性状态

  • 如果任何 region 发生了分割、合并操作,或者表的元数据信息发生了变化(表的增加和删减),请在从集群上运行 refresh_meta 命令

  • 当 HBase 表发生更新操作后,请在从集群上运行 refresh_hfiles 命令

从备份集群读区数据

你可以像往常一样从备份集群检索任何数据。


从主集群读取数据的截图:



从备份集群读取数据的截图:



可以看出,两个集群返回了同样的数据。


保持备份集群和主集群的一致性


为了保持备份集群数据和主集群的一致性,请参考以下建议:


在备份集群上:


1.运行 refresh_hfiles 命令:


  • HBase 表中的数据发生变化时(增、删、改)


2.运行 refresh_meta:


  • Region 发生变化时(splits,compacts)或者集群中增加、删除了 HBase 表


在主集群上:


1.如果启用了 compaction,运行 compaction 命令以避免 Major Compation 被触发引起数据的不一致性。


相关的属性和命令:


HBase 属性:


        col 1             |  col 2  |                                         col 3                                        
复制代码


:-----------------------------:|:-------:|:-------------------------------------------------------------------------------------:


Config | Default | Ex planation


hbase.meta.table.suffix | “” | Adds a suffix to the meta table name: value=’test’ -> ‘hbase:meta_test’


hbase.global.readonly.enabled | False | Puts the entire cluster into read-only mode


Hbase.meta.startup.refresh | False | Syncs the meta table with the backing storage. Used to pick up new tables or regions.


如果 hbase.emr.readreplica.enabled 被设置为 true,那么上述属性会被自动设置好。


HBase 命令:


col 1col 2
CommandDescription
refresh_hfiles <TablenameRefreshes HFiles from disk. Used to pick up new edits on a read replica.
clear_block_cacheClears the cache for the specified table.
refresh_metaSyncs the meta table with the backing storage. Used to pick up new tables/regions.

总结

现在你可以为 HBase 建立高可用的读备份集群,通过它,在主集群发生异常情况时,你仍然可以获取稳定的数据查询服务。


作者介绍



刘磊,AWS 大数据顾问,曾供职于中国银联电子支付研究院,期间获得上海市科技进步一等奖,并申请 7 项国家发明专利。现任职于 AWS 中国专家服务团队,致力于为客户提供基于 AWS 服务的专业大数据解决方案、项目实施以及咨询服务。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/build-a-hbase-read-backup-cluster-based-on-s3/


2019-11-11 08:001095

评论

发布
暂无评论
发现更多内容

实测谷歌Veo 3.1视频模型!附零门槛免费使用攻略和提示词

阿星AI工作室

产品 AI 产品经理 大模型 AI视频

从零开始:手把手教你在 AskTable 中连接和管理数据源

察言观数 AskTable

数据库 大数据 数据分析 数据管理

在VS Code IDE中通过LocalStack集成加速无服务器测试

qife122

AWS LocalStack

传帮带 人才梯队建设经验总结(13)

万里无云万里天

人才培养 工业 工厂运维

利用Next.js中间件漏洞实现SSRF攻击与RCE

qife122

SSRF 漏洞挖掘

大数据-126 - Flink一文搞懂有状态计算:State Backend 工作原理与性能差异详解 核心原理与作用

武子康

Java 大数据 flink spark 分布式

指标混乱终结者:ChatBI怎样让全公司说同一种“数据语言”?

飞鲤

数据分析 ChatBI Data+AI

金融级稳定性:ETLCloud如何保障千万级数据的准确同步

谷云科技RestCloud

kettle 数据传输 数据同步 ETL 数据集成工具

OAuth/OpenID Connect 渗透测试完全指南

qife122

网络安全 Oauth

有哪些可离线使用的白板软件?6个主流的白板工具汇总

职场工具箱

人工智能 效率工具 在线白板 办公软件 AIGC

鸿蒙应用开发从入门到实战(二十三):一文搞懂ArkUI弹性布局

程序员潘Sir

鸿蒙 HarmonyOS

在AI技术快速实现创意的时代,挖掘邮件营销系统新需求成为关键突破点

qife122

开源项目 需求分析

云栖实录 | 从多模态数据到 Physical AI,PAI 助力客户快速启动 Physical AI 实践

阿里云大数据AI技术

阿里云 nvidia PAI

高性能智算网关打通 GPU 集群与 AI 存储高速链路,硬件成本直降 95%

Baidu AICLOUD

智源“透明心脏”:全自动3D心肌瘢痕重建,让三维诊断走进中国日常临床

智源研究院

人工智能 AI医疗

新兴数据湖仓手册·从分层架构到数据湖仓架构(2025):数据仓库分层的概念与设计

白鲸开源

大数据 数据仓库 数据湖 白鲸开源 WhaleStudio

手撕大模型 | MQA 和 GQA 原理解析

地平线开发者

自动驾驶; 算法工具链 地平线征程6

Python版本进化史:从3.6到3.14,每个版本都带来了什么惊喜?

程序员晚枫

Python

Amazon Generative AI Use Cases:“开箱即用的企业级生成式AI应用平台”

亚马逊云科技 (Amazon Web Services)

FastDFS 可观测性最佳实践

观测云

fastdfs

java遍历hdfs路径信息,报错EOFException

刘大猫

人工智能 云计算 大数据 算法 物联网

工业管理 团队建设经验总结(5)

万里无云万里天

团队建设 工业 工厂运维

展览馆LED屏幕:让展示更有“光”

Dylan

视觉 LED LED display 展览 LED屏幕

哈尔滨等保测评:筑牢数字时代安全防线

等保测评

征程 6 | BPU trace 简介与实操

地平线开发者

自动驾驶; 算法工具链 地平线征程6

SpringBoot 3.x 集成 Flowable 7.x:流程设计、部署、启动及完成实战

Geek_e3e86e

编程 java面试

Python 3.14发布:多解释器让性能飙升300%,GIL时代即将终结!

程序员晚枫

Python

哈尔滨等保测评:测评后的持续安全管理

等保测评

Dify 企业版 3.2.0 重磅发布:开启智能应用构建新纪元!

伊克罗德信息科技

英特尔联动「扣子 AI 工坊」启动高校计划——让校园创意一键开挂

新消费日报

重新定义网络安全职业:从"解决问题"的角度出发

qife122

网络安全 问题解决

搭建基于S3的HBase读备份集群_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章