HBase on Hadoop,数据局部性深潜
HBase on Hadoop, data locality deep diving
我已经阅读了多篇关于 HBase 如何获得数据局部性的文章,即 link
或 HBase 权威指南 一书。
我了解到,在重写 HFile 时,Hadoop 会在同一台机器上写入块,这实际上是在 Hadoop 上进行压缩并创建更大文件的同一台区域服务器.一切都很好理解。
问题:
假设一个区域服务器有一个区域文件 (HFile),它在 Hadoop 上被分成多个块,即 A、B、C。这是否意味着所有块(A、B、C)都将写入同一区域服务器?
如果压缩后的 HFile 有 10 个块(巨大的文件),但区域服务器没有存储所有块,会发生什么情况?这是否意味着我们丢失了数据局部性,因为这些块将写入其他机器?
感谢您的帮助。
HBase 使用 HDFS API 将数据写入分布式文件系统 (HDFS)。我知道这会增加您对数据局部性的怀疑。
当客户端使用 hdfs API 将数据写入 HDFS 时,它确保将数据的副本写入本地数据节点(如果适用),然后进行复制。
现在我来回答你的问题,
是的。由特定 RegionServer(RS) 写入的 HFile(块)驻留在本地数据节点中,直到它被 HMaster 移动以进行负载平衡或恢复(将在主要压缩时返回)。因此块 A、B、C 将在同一区域服务器中。
是的。这可能会发生。但是我们可以通过在创建时为 HBase 表的每个区域配置区域开始和结束键来控制相同的,这允许数据在集群中均匀分布。
希望对您有所帮助。
我已经阅读了多篇关于 HBase 如何获得数据局部性的文章,即 link 或 HBase 权威指南 一书。
我了解到,在重写 HFile 时,Hadoop 会在同一台机器上写入块,这实际上是在 Hadoop 上进行压缩并创建更大文件的同一台区域服务器.一切都很好理解。
问题:
假设一个区域服务器有一个区域文件 (HFile),它在 Hadoop 上被分成多个块,即 A、B、C。这是否意味着所有块(A、B、C)都将写入同一区域服务器?
如果压缩后的 HFile 有 10 个块(巨大的文件),但区域服务器没有存储所有块,会发生什么情况?这是否意味着我们丢失了数据局部性,因为这些块将写入其他机器?
感谢您的帮助。
HBase 使用 HDFS API 将数据写入分布式文件系统 (HDFS)。我知道这会增加您对数据局部性的怀疑。 当客户端使用 hdfs API 将数据写入 HDFS 时,它确保将数据的副本写入本地数据节点(如果适用),然后进行复制。 现在我来回答你的问题,
是的。由特定 RegionServer(RS) 写入的 HFile(块)驻留在本地数据节点中,直到它被 HMaster 移动以进行负载平衡或恢复(将在主要压缩时返回)。因此块 A、B、C 将在同一区域服务器中。
是的。这可能会发生。但是我们可以通过在创建时为 HBase 表的每个区域配置区域开始和结束键来控制相同的,这允许数据在集群中均匀分布。
希望对您有所帮助。