HBase on Hadoop,数据位置深潜

时间:2016-10-05 15:23:53

标签: hadoop hbase

我读过多篇关于HBase如何获取数据位置的文章,即link HBase the Definitive guide book。

我已经明白,在重写HFile时,Hadoop会在同一台机器上编写块,实际上是相同的Region Server,它会进行压缩并在 Hadoop 上创建更大的文件。一切都很好理解了。

问题:

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

  2. 如果压缩后的HFile有10个块(大文件)会怎么样,但是区域服务器没有存储所有这些块?这是否意味着我们松散了数据局部性,因为这些块会写在其他机器上?

  3. 感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

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

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

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

  3. 希望这有帮助。