gpt4 book ai didi

hadoop - Hbase表复制

转载 作者:可可西里 更新时间:2023-11-01 15:05:36 29 4
gpt4 key购买 nike

有没有办法在集群的每个节点上复制表数据?我需要对数据局部性的最大等级进行性能测试。默认情况下,HBase 将数据分布在集群节点的一小部分(在 1 或 2 个节点上),可能是因为我的数据不是很大(~ 2 GB)。我知道 Hbase 是为更大的数据集而设计的,但在这种情况下,这对我来说是一个要求。

最佳答案

关于它有很多不错的读物*(见文章末尾),但我会尝试用我自己的话来解释它;)

HBase 不负责数据复制,Hadoop HDFS 负责,并且默认配置复制因子为 3,这意味着所有数据将存储在至少 3 个节点中。

数据局部性是获得良好性能的一个关键方面,但实现最大数据局部性很容易:您只需要将 HBase 区域服务器 (RS) 与 Hadoop 数据节点 (DN) 并置,因此,您的所有 DN 也应该具有 RS 角色。一旦你有了它,HBase 就会自动将数据移动到需要的地方(在主要压缩上)以实现数据局部性,仅此而已,只要每个 RS 都有它在本地服务的区域的数据,你就会有数据局部性。

即使您将数据复制到多个 DN,每个区域(及其包含的行)也将仅由一个 RS 提供服务,复制因子为 3 并不重要, 10 或 100... 读取属于区域 #1 的行将始终命中相同的 RS,这将是托管该区域的 RS(由于数据局部性,它将从 HDFS 本​​地读取数据)。如果承载该区域的 RS 宕机,该区域将自动分配给另一个 RS(因为数据也被复制到其他 DN)


你可以做的是按照每个 RS 分配给它的行(区域)的桶的方式拆分你的表,这样当你读取或写入数据时,尽可能多的不同 RS 可以同时工作,从而增加你的整体吞吐量只要您不总是访问相同的区域(称为区域服务器热点**)。

因此,您应该始终首先确保表的所有区域都分配给不同的 RS,并且它们接收相同数量的 R/W 请求。完成后,您可以一次将表拆分为更多区域,直到集群的所有 RS 上的区域数量为偶数(如果您对负载均衡器不满意,可能需要手动分配它们)。

请注意,即使您似乎拥有完美的区域分布,但如果您的数据访问模式不正确(或不均匀)并且没有均匀地到达所有区域,那么性能仍然会很差,最终这一切取决于您的应用。


(*) 推荐读物:

(**) 为了避免 RS 热点,我们总是将表设计为具有非单调递增的行键,因此第 1、2、3 ... N 行托管在不同的区域,常见的方法是使用 MD5( id) + id 作为行键。这种方法有其自身的一系列缺点:您无法扫描前 10 行,因为它们已加盐。

关于hadoop - Hbase表复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29717935/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com