我们使用Mapreduce批量创建HFile,然后逐步/批量加载到HBase中。我注意到的一点是,加载只是一个HDFS移动命令(它不会物理移动文件块)。
由于我们进行了大量HBase表扫描并且启用了短路读取,因此将这些HFile本地化到各自的区域节点将是有益的。
我知道一个主要的压缩可以实现这一点,但是当HFile与区域大小相比较小时,这些效率很低。
答案 0 :(得分:1)
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如果客户端节点也是数据节点,则还会创建本地块。因此,当HBase API用于写入时,localityIndex很高。
使用批量加载时,HDFS中已存在HFile。因为,它们已经出现在hdfs上。 HBase只会使那些hfile成为Regions的一部分。在这种情况下,不保证datalocality。
如果你真的需要高数据性,那么我建议你使用HBase API进行写操作,而不是批量加载。
我一直在使用HBase API从我的MR工作中写入HBase,直到现在它们还运行良好。