确保hbase上的数据位置

时间:2016-08-10 05:00:12

标签: apache-spark hbase

有没有办法确保我的火花执行器与我的Hbase区域服务器位于同一位置?在horton作品的Spark-on-HBase中,提到如下:

  

我们假设Spark和HBase部署在同一个集群中,Spark执行器与区域服务器位于同一位置

有没有办法实现同样的目标? 如果我使用

sparkContext.newHadoopApi()

它会确保数据的位置吗?

1 个答案:

答案 0 :(得分:1)

我们在Splice Machine上的经验是,对于在Spark中运行许多分析查询和压缩的大型查询和系统,我们将获得合适的位置(95 +%)。我们正在使用Spark on Yarn,其中动态分配执行程序并在一段时间不活动后收缩。然而,我们必须解决几个问题。

  1. 跨操作的单个Spark上下文。我们构建了一个单独的spark上下文服务器,因此我们的所有查询都可以拥有有效的资源管理和位置如果您创建了许多Spark上下文,则可以阻止执行程序资源在某些节点上执行。

  2. 如果有人在一段时间不活动后运行中等大小的查询,那么数据所在的所有节点都很可能没有动态分配执行程序。

  3. 我们非常依赖于我们对Spark的Compactions的实现以及直接从Spark(与Hbase远程扫描)一起从HBase memstore中增量增量读取存储文件的方法。压缩创建了更好的位置和对执行程序任务的需求。直接读取存储文件允许位置基于文件位置(2-3个副本)而不是单个区域服务器本地(仅1个服务器)。

  4. 我们编写了自己的拆分机制,因为按区域大小拆分的默认hbase会导致长尾和严重的内存问题。例如,我们将有一个包含6个区域的表格,范围从(20M到4 Gigs)。 4 gig区域将是长尾。某些Spark操作会期望执行程序能够将整个4 gig加载到内存中导致内存问题。使用我们自己的分割机制,我们实质上限制了要扫描并放入内存的数据量......

  5. 如果您需要有关我们所做工作的更多详细信息,请查看

    http://community.splicemachine.com/

    我们是开源的,您可以在

    查看我们的代码

    https://github.com/splicemachine/spliceengine

    祝你好运Vidya ......

    干杯,约翰