在hdfs中本地化hfile块

ev7lccsx  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(425)

我们使用mapreduce批量创建hfiles,然后增量/批量加载到hbase中。我注意到加载只是一个hdfs move命令(它不会物理地移动文件块)。
由于我们进行了大量的hbase表扫描,并且启用了短路读取,因此将这些hfile本地化到各自区域的节点将是有益的。
我知道一个主要的压缩可以实现这一点,但那些是低效的,当有hfiles比较小的地区规模。

7lrncoxx

7lrncoxx1#

HBase uses HDFS as a File System. HBase does not controls datalocality of HDFS blocks. 当使用hbase api向hbase写入数据时,则 HBase RegionServer becomes a client to HDFS 在hdfs中,如果客户机节点也是datanode,那么也会创建一个本地块。因此,当使用hbase api进行写操作时,localityindex很高。
当使用批量加载时,hdfs中已经存在hfiles。因为,它们已经出现在hdfs上了。hbase只会使这些hfile成为区域的一部分。在这种情况下,不能保证数据局部性。
如果您真的需要高数据局部性,那么我建议您使用hbase api进行写操作,而不是大容量加载。
我从mr的工作中一直在使用hbase api向hbase进行写操作,到目前为止,它们都工作得很好。

相关问题