我的 Hbase 在三台机器上运行,一台用于 hmaster,另外两台作为 regionServers,现在我想我必须做一些复制工作,因为这是防止机器崩溃或断电的生产环境。但是我阅读了一些 Hbase 文档和找不到任何方法来复制我的数据。我使用的唯一方法是设置 hadoop 复制,我设置 hdfs-site.xml dfs.replicate=1。那么有没有更好的方法来进行 Hbase 的复制以进行热备份。提前致谢
7 回答
在您的生产环境中,您需要数据的副本,以便在节点故障或集群故障的情况下,您的数据将保持安全。如果我的理解是正确的,那么您可以选择
- 数据节点的定期间隔备份
- 设置异步复制到从属集群,这些集群将从各自的区域服务器复制数据。更多信息可在此处获得
请注意,您的问题中“复制”有两种不同的含义:
HDFS 块的复制。这里
replication
的意思是“在不同的数据节点上保留一个块的多个(冗余)副本”,这就是 HDFS 实现高可用性的方式。您通过“dfs.replication”设置属性告诉 HDFS 要保留多少副本。查看“HDFS 架构指南”的数据复制部分。HBase 集群之间的复制。这里
replication
的意思是“将这个集群的更新发送到另一个集群,以便后者可以作为备份”。它可以作为灾难恢复解决方案,我想这就是你想要的。您需要设置另一个 hbase 集群(称为从属或备份集群),配置复制。之后,当主集群由于某种原因关闭时,您可以故障转移到备份集群。查看此 cloudera 博客文章和hbase 书籍的这一部分以获取更多详细信息。
HBase 完全依赖 HDFS 复制。
您的所有数据都存在于 HDFS 中而不是 HBase 中(HBase 内部存储到 HDFS)。HBase 只是这些数据的一种访问机制。由于您设置了 dfs.replication=1 ,请尝试定期进行数据节点备份。
如果您担心 HBase 中的区域服务器,那么此数据存在于 Zookeeper 中。即使您的 Master/RS 出现故障并出现,它也应该恢复正常状态。
如果您特别担心区域,它们会被 HBase 存储为目录表(ROOT、META)。这些就像将出现在 HDFS 中的普通表一样。
因此,根据社区的建议,将复制更改为 >1(或默认为 3)。
您不需要 Hbase 的复制因子。如前所述,由于 Hbase 通过 HDFS 存储数据,因此复制将由 HDFS 处理。如果 RegionServer 宕机(在 Hbase 中),HMaster 会将死区服务器处理的区域分配给健康的 regionserver 或在 dataNode 故障的情况下(在 HDFS 中),HMaster 将从新的 dataNodes 分配新的 dataBlocks(由 NameNode 提供)到另一个健康且正常工作的区域服务器。
HBase uses HDFS to store data, so by default you will have replication for your data in HDFS (by default you will have replication of 3 in HDFS). So you need not worry to have replication explicitly.
Hbase 表以数据块的形式存储在 HDFS 中。Hadoop 分布式文件系统 (HDFS) 使我们能够决定对块使用什么复制因子。理想情况下,它保持在 3。这确保在任何给定时间,相同数据的 3 个副本将出现在集群的节点中,并且在任何节点发生故障的情况下,相同的数据将在其他地方可用以服务于查询。此属性是 hdfs-site.xml 中的 dfs.replication。Hbase 还允许我们将集群状态复制到另一个集群。也就是说,一个 Hbase 集群中存在的全部数据被复制到另一个集群。这样做的好处是管理灾难恢复。
目前,关于复制有三个概念。
- hdfs 层中的块副本。
- hbase 集群之间的复制。
- 区域复制。
dfs.replication 指的是第一个概念。它保证了物理机的单一故障,您的数据是安全的。
如果 dfs.replication = 1,你的数据节点的单点故障(磁盘故障)可能会导致数据块损坏,从而导致数据丢失。