我们使用Mapreduce批量创建HFiles,然后以增量方式/批量加载到HBase中。我注意到,load只是一个HDFS移动命令(它不会物理上移动文件的块)。
由于我们进行了大量的HBase表扫描,并且启用了短路读取,因此将这些HFiles本地化到其各自区域的节点将是有益的。
我知道主要的压缩可以做到这一点,但当HFiles与区域大小相比很小时,效率就会很低。
发布于 2015-08-11 22:48:10
HBase uses HDFS as a File System. HBase does not controls datalocality of HDFS blocks.
当HDFS用于将数据写入到HBase时,然后是HBase RegionServer becomes a client to HDFS
;在HDFS中,如果客户端节点也是datanode,则还会创建一个本地块。因此,当使用HBase API进行写入时,localityIndex较高。
当使用大容量加载时,HFiles已经存在于HDFS中。因为,它们已经存在于hdfs中。HBase将使这些hfile成为区域的一部分。在这种情况下,不能保证数据的局部性。
如果您确实需要高数据局部性,那么我建议您使用HBase应用程序接口进行写入,而不是批量加载。
我一直在使用HBase应用程序接口从我的MR工作中写入HBase,到目前为止,它们工作得很好。
https://stackoverflow.com/questions/31900276
复制相似问题