HBase on Hadoop,数据局部性深潜

HBase on Hadoop, data locality deep diving

我已经阅读了多篇关于 HBase 如何获得数据局部性的文章,即 linkHBase 权威指南 一书。

我了解到,在重写 HFile 时,Hadoop 会在同一台机器上写入块,这实际上是在 Hadoop 上进行压缩并创建更大文件的同一台区域服务器.一切都很好理解。

问题:

  1. 假设一个区域服务器有一个区域文件 (HFile),它在 Hadoop 上被分成多个块,即 A、B、C。这是否意味着所有块(A、B、C)都将写入同一区域服务器?

  2. 如果压缩后的 HFile 有 10 个块(巨大的文件),但区域服务器没有存储所有块,会发生什么情况?这是否意味着我们丢失了数据局部性,因为这些块将写入其他机器?

感谢您的帮助。

HBase 使用 HDFS API 将数据写入分布式文件系统 (HDFS)。我知道这会增加您对数据局部性的怀疑。 当客户端使用 hdfs API 将数据写入 HDFS 时,它确保将数据的副本写入本地数据节点(如果适用),然后进行复制。 现在我来回答你的问题,

  1. 是的。由特定 RegionServer(RS) 写入的 HFile(块)驻留在本地数据节点中,直到它被 HMaster 移动以进行负载平衡或恢复(将在主要压缩时返回)。因此块 A、B、C 将在同一区域服务器中。

  2. 是的。这可能会发生。但是我们可以通过在创建时为 HBase 表的每个区域配置区域开始和结束键来控制相同的,这允许数据在集群中均匀分布。

希望对您有所帮助。