hbase跳过区域服务器直接从hfile读取行

时间:2017-03-22 07:18:07

标签: hadoop apache-spark hbase cloudera

  • 我试图将超过100亿条记录转储到hbase中 平均每天增长1000万,然后尝试全桌 扫描记录。我知道对hdfs进行全面扫描会 比hbase快。
  • Hbase用于订购不同的数据 在hdfs上。该应用程序正在使用spark构建。
  • 将数据批量加载到hbase上。由于各种2G限制,从最初的3G测试开始,区域大小减少到1.2G(仍需要更详细的调查)。
  • 扫描缓存为1000,缓存块关闭
  • 总hbase大小在6TB范围内,在5个区域服务器(节点)上产生数千个区域。 (推荐数百人)。
  • spark作业基本上遍历每一行,然后根据范围内的列计算某些内容。
  • 使用内部使用TableInputFormat的spark-on-hbase,作业运行时间约为7.5小时。
  • 为了绕过区域服务器,创建了快照并使用了TableSnapshotInputFormat。工作在5.5小时内完成。

问题

  1. 当从hbase读到火花时,这些地区似乎决定了 火花分区,因此2G限制。 Hence problems with caching这是否意味着区域规模需要很小?

  2. TableSnapshotInputFormat绕过区域服务器和 直接从快照中读取,也按区域创建它 所以仍然会陷入上面的区域大小问题。它是 可以直接从hfiles读取键值,在这种情况下 拆分大小由hdfs块大小决定。有没有 可以读取一行的扫描仪或其他工具的实现 直接来自hfile(具体来自引用hfile的快照)?

  3. 还有其他指示说可能有助于提升性能的配置吗?例如hdfs块大小等?主要用例是大部分的全表扫描。

1 个答案:

答案 0 :(得分:0)

事实证明这实际上非常快。性能分析表明问题在于ip地址的一个对象表示,即InetAddress花费了大量资源来解析ip地址。我们决定使用原始字节来提取我们需要的东西。这本身就可以在大约2.5小时内完成工作。 将问题建模为Map Reduce问题并在MR2上运行具有相同的上述变化表明它可以在大约1小时20分钟内完成。 迭代性质和更小的内存占用有助于MR2实现更多的并行性,因此速度更快。