Apache HBase 在线迁移到 Amazon EMR 大数据博客
从 Apache HBase 在线迁移到 Amazon EMR
作者: Dalei Xu、Zhiyong Su 和 Shijian Tang日期: 2024 年 10 月 23 日领域: Amazon EMR,Amazon S3,技术如何做
要点摘要
Apache HBase 是一种开源的、非关系分布式数据库,适用于高频交易,以及电商等领域。在Amazon EMR 520及之后版本中,可以选择将 HBase 运行在 Amazon S3 上。建议使用 HBase 快照和复制技术,以实现低宕机时间的迁移。HBase 的发布模式推荐
Apache HBase 是一个开源非关系分布式数据库系统,作为 Apache 软件基金会 Hadoop 项目的一部分进行开发。HBase 可以运行在 Hadoop 分布式文件系统 (HDFS) 或 Amazon S3 上,能够承载拥有数十亿行和数百万列的非常大的数据表。
HBase 的一些典型用例包括:
在电商场景中,根据产品 ID 快速检索详细的产品信息。在安全评估与欺诈检测中,用户的评估维度各异,HBase 的非关系架构和灵活的列扩展能力能够满足复杂需求。在高频实时交易平台中,HBase 支持高并发的读写,提升生产力和商业灵活性。推荐的 HBase 迁移方式
对于现有的 HBase 集群包括基于开源 HBase 自建或由其他云服务提供商提供的 HBase,我们推荐使用 HBase 快照和复制技术进行数据迁移,这样可以在无需显著停机时间的情况下完成迁移。
这篇博客介绍了一系列基于实际客户案例的典型 HBase 迁移解决方案和最佳实践。此外,我们还深入探讨了在迁移过程中面临的一些关键挑战,例如:
使用 HBase 快照实现初步迁移,并利用 HBase 复制进行实时数据挪移。其他云平台上提供的 HBase 不支持快照。单个数据表的规模过大,如超过 50 TB。使用 BucketCache 提高迁移后的读性能。HBase 快照允许您在对区域服务器影响较小的情况下,拍摄表的快照,不需要大量的数据复制。将快照导出到另一个集群也不会对区域服务器产生太大影响。
HBase 复制是 HBase 集群之间数据复制的方式。它允许您保持一个集群与另一个集群的状态同步,利用源集群的日志来传播变更。它可以作为灾难恢复解决方案,也能提高架构的可用性。
先决条件
要实施 HBase 迁移,您必须满足以下先决条件:
拥有一个 AWS 账户以访问 AWS 服务。生成用于 SSH 连接到 Amazon EMR 主节点的密钥对。有关说明,请参考 使用 Amazon EC2 创建密钥对。配置 Amazon EMR 默认角色EMRDefaultRole 和 EMREC2DefaultRole。请参考 为 Amazon EMR 服务访问 AWS 服务和资源配置 IAM 服务角色 以获取指导,或者在终端或 AWS Cloud9 中运行以下 API 来创建默认角色:
aws emr createdefaultroles
自建 HBase,作为源 HBase 集群及其相关资源,例如 Amazon EC2 或其他云服务商提供的资源。
pioneer加速器下载安装使用 YCSB 在源 HBase 集群中构建一个演示数据集。解决方案概要
在本例中,我们将演示一个典型的迁移解决方案,即从源 HBaseCluster A到目标 Amazon EMR HBaseCluster B的迁移。以下图示展示了解决方案架构。
以下是根据上面的图示,我们将沿着 HBase 迁移过程推荐的操作步骤。
步骤活动描述预计时间1配置 Cluster A源 HBase修改源 HBase 集群的配置,为后续快照导出做准备少于 5 分钟2创建 Cluster BAmazon EMR HBase 在 S3 上创建一个 EMR 集群,并将 HBase 运行在 Amazon S3 上作为迁移目标集群少于 10 分钟3配置复制配置源 HBase 集群到 Amazon EMR HBase 的复制,但不启动少于 1 分钟4暂停服务暂停源 HBase 集群的服务少于 1 分钟5创建快照为源 HBase 集群的每个表创建快照少于 5 分钟6恢复服务恢复源 HBase 集群的服务少于 1 分钟7快照导出与恢复使用快照将数据从源 HBase 集群迁移到 Amazon EMR HBase 集群视表数据量大小而定8启动复制启动从源 HBase 集群到 Amazon EMR HBase 的复制并同步增量数据视快照导出恢复期间积累的数据量而定9测试与验证测试并验证 Amazon EMR HBase
接下来我们将详细说明这些步骤的具体操作。
1 配置 Cluster A源 HBase
在将快照从源 HBase 集群导出到 Amazon EMR HBase 集群时,必须修改源集群上的以下设置,以确保数据传输的性能和稳定性。
配置分类配置项目建议值备注coresitefss3awsAccessKeyId您的 AWS 访问密钥 ID快照导出需要相对较长的时间。如果没有访问密钥和秘密密钥,快照导出到 Amazon S3 将会出现诸如 comamazonawsemrhadoopfsshadedcomamazonawsSdkClientException 无法从任何提供程序加载 AWS 凭据的错误。coresitefss3awsSecretAccessKey您的 AWS 秘密访问密钥yarnsiteyarnnodemanagerresourcememorymb单核节点 RAM 的一半可分配给容器的物理内存量,单位为 MB。yarnsiteyarnschedulermaximumallocationmb单核节点 RAM 的一半ResourceManager 中每个容器请求的最大分配量,单位为 MB。因为快照导出是在 YARN Map Reduce 任务中运行的,因此,需要为 YARN 分配足够的内存以确保传输速度。这些值的设置会根据集群资源、工作负载和表数据量进行调整。如果可以使用 Web UI,您也可以通过标准的配置 XML 文件进行修改。完成更改后,请重新启动 HBase 服务。
2 创建 Cluster BEMR HBase 在 S3 上
使用以下推荐设置来启动 EMR 集群:
配置分类配置项目建议值备注yarnsiteyarnnodemanagerresourcememorymb单核节点 RAM 的 20可分配给容器的物理内存量,单位为 MB。yarnsiteyarnschedulermaximumallocationmb单核节点 RAM 的 20ResourceManager 中每个容器请求的最大分配量,单位为 MB。由于快照恢复是在 HBase 中运行的,因此需要为 YARN 分配少量内存,并留出足够的内存供 HBase 使用,以确保恢复操作顺利进行。hbaseenvexportHBASEMASTEROPTS单核节点 RAM 的 70为主 HBase 设置 Java 堆大小。hbaseenvexportHBASEREGIONSERVEROPTS单核节点 RAM 的 70为 HBase 区域服务器设置 Java 堆大小。hbasehbaseemrstorageModeS3指示 HBase 使用 S3 存储数据。hbasesitehbaserootdirltYourHBaseFolderonS3gt您在 S3 上的 HBase 数据文件夹。有关详细信息,请参阅 配置 HBase。 另外,每种 Amazon EC2 实例类型的 Amazon EMR 默认 YARN 配置可在 任务配置 中找到。
在我们的示例中,配置如图所示。
3 配置复制
接下来,我们配置源 HBase 到 EMR 集群的复制对等体。
操作步骤包括:
创建一个对等体。由于快照迁移尚未完成,开始时先禁用该对等体。指定需要进行复制的表。启用表复制。以表 usertable 为例,shell 脚本如下:
shellMASTERIP=ltMasterIPgtTABLENAME=usertablecat ltlt EOF sudo u hbase hbase shell 2gt/dev/nulladdpeer PEERTABLENAME CLUSTERKEY =gt MASTERIP2181/hbasedisablepeer PEERTABLENAMEenabletablereplication TABLENAMEEOF
结果将类似于以下文本。
shellhbase0010gt addpeer PEERusertable CLUSTERKEY =gt ltMasterIPgt2181/hbaseTook 134117 seconds hbase0020gt disablepeer PEERusertableTook 81317 seconds hbase0030gt enabletablereplication usertableThe replication of table usertable successfully enabledTook 1687254 seconds
在本实验中,我们以表 usertable 为例。如果我们有许多表需要配置为复制,可以使用以下代码:
shellMASTERIP=
获取所有表
TABLELIST=(echo list sudo u hbase hbase shell 2gt/dev/null sed e 1/TABLE/d e /seconds/d e /row/d)
遍历每个表
for TABLENAME in TABLELIST do # 添加操作 cat ltlt EOF sudo u hbase hbase shell 2gt/dev/nulladdpeer PEERTABLENAME CLUSTERKEY =gt MASTERIP2181/hbasedisablepeer PEERTABLENAMEenabletablereplication TABLENAMEEOFdone
在接下来的步骤中,如果您需要对所有表进行操作,可以参考上述代码示例。
此时,对等体的状态为“禁用”,因此不会启动复制。需要从源到目标 EMR 集群同步的数据将会在源 HBase 集群中积压,而不会同步到 EMR 集群的 HBase。
在 Amazon EMR 集群上完成快照恢复步骤 7后,我们可以启用对等体以开始同步数据。
如果源 HBase 版本为 1x,您必须运行 setpeertableCFs 函数。请参阅 HBase 集群复制。
4 暂停服务
要暂停源 HBase 集群的服务,需要禁用 HBase 表。您可以使用以下脚本:
shellsudo u hbase bash /usr/lib/hbase/bin/disablealltablessh 2gt/dev/null
结果如图所示。
禁用所有表后,请检查 HBase UI,以确保没有后台任务在运行,然后停止任何访问源 HBase 的服务。这将需要 510 分钟。
HBase UI 如下图所示。
5 创建快照
确保源 HBase 中的表已禁用。然后,您可以创建源的快照。此过程需要 15 分钟。
以表 usertable 为例,shell 脚本如下:
shellDATE=date YmdTABLENAME=usertablesudo u hbase hbase snapshot create n {TABLENAME//}DATE t {TABLENAME} 2gt/dev/null
您可以使用以下脚本检查快照:
shellsudo u hbase hbase snapshot info listsnapshots 2gt/dev/null
结果如下图所示。
6 恢复服务
在源 HBase 中成功创建快照后,您可以启用表并恢复访问源 HBase 的服务。这些操作需要几分钟,因此在实施过程中步骤 3 到步骤 6源 HBase 的总数据不可用时间大约为 10 分钟。
启用表的命令如下:
shellTABLENAME=usertableecho e enable TABLENAME sudo u hbase hbase shell 2gt/dev/null
结果如图所示。
此时,您可以继续向源 HBase 写入数据,因为对等体的状态为禁用,因此增量数据不会同步到目标集群。
7 快照导出与恢复
在源 HBase 中创建快照后,您可以开始将快照导出到目标 EMR 集群的 HBase 数据目录。示例脚本如下:
shellDATE=date YmdTABLENAME=usertableTARGETBUCKET=ltYourHBaseFolderonS3gtnohup sudo u hbase hbase snapshot export snapshot {TABLENAME//}DATE copyto TARGETBUCKET ampgt {TABLENAME//}DATEexportlog amp
快照导出所需时间根据数据量从 10 分钟到几小时不等,因此我们将其置于后台运行。您可以使用 yarn application list 命令检查进度,如下图所示。
例如,如果您使用的是拥有 20 个 r6g4xlarge 核心节点的 HBase 集群,导出 50 TB 的数据到同一 AWS 区域的 Amazon S3 会耗时大约 3 小时。
在源 HBase 完成快照导出后,您可以使用以下脚本在目标 EMR 集群中检查快照:
shellsudo u hbase hbase snapshot info listsnapshots 2gt/dev/null
结果如下图所示。
确认快照名称,例如 usertable20240710,然后使用以下脚