hadoop - HBase on Hadoop,数据局部性深潜

标签 hadoop hbase

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

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

问题:

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

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

感谢您的帮助。

最佳答案

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

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

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

希望这对您有所帮助。

关于hadoop - HBase on Hadoop,数据局部性深潜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39878015/

相关文章:

python - 如何在 python 中一次将多个文件从本地服务器移动到 HDFS?

hadoop - 在 PIG 中发送到 UDF 之前获取交叉数据的更好方法

c++ - HBase 上的 Thrift 是否有任何性能基准?

apache-spark - HBase 表上的 SparkSQL

hadoop - Map Reduce 作业中的 NullPointerException

hadoop - Mahout:通过命令行可视化集群

java - mapreduce错误:java.lang.indexoutofboundsexception:index:2,size:2

hadoop - 为什么导出的 HBase 表比原始表大 4 倍?

shell - Linux Mint上的Hadoop HBase脚本产生奇怪的错误

java - 无法从开始获得STORM NEW VERSION(1.0.1)中的消息