Accumulo map-reduce/spark 通过 accumulo thrift 代理

问题描述

在我当前的大数据项目中,出于安全原因,平台团队要求我通过 accumulo thrift 代理直接或通过 geomesa 连接到 accumulo。

对于前端工作负载,或者对于 geomesa,通过 geotools 数据存储抽象(由于 accumulo-proxy-instance 库,对 geomesa 代码进行了一些非常轻微的修改),这样做非常简单。但我想不出一种方法让它在 Spark 工作负载下工作,我怀疑尝试这样做是一个糟糕的主意。

这是我尝试过的,或者正在考虑尝试的。 我首先尝试通过 AOP 热补丁(通过 aspectj)简单地强制累积静态方法 InputConfigurator.getInstance,以获得代理连接而不是正常连接。 解决方法确实有效(我的意思是该方法是热修补的),直到我意识到 AccumuloInputFormat.getSplits 方法严重依赖客户端可访问的 Zookeeper(此处为 Spark 驱动程序)。

然后我考虑根据 accumulo 代理库中可用的内容在替代 InputFormat 上重写 getSplits 方法,但是要重写的代码非常复杂,而且我没有看到任何直接等效于像 thrift 中的 InputSplits 这样的概念代理,所以我没有走那条路。

我考虑的最后一件事是扩展代理服务器以通过 thrift 公开一些 getSplits 方法,该方法将在内部使用“本机”AbstractInputSplit.getSplits,并有一个替代的 InputFormat 来调用它。这个也是比较辛苦的,不知道这样能不能成功。

所以我想知道是否有人遇到过同样的需求(map-reduce 或 spark job on accumulo with or witouht geomesa-spark)和相同的约束(thrift proxy),以及他/她是如何解决的.诸如“我们放弃了 Spark 工作负载的代理”或“我们以这种方式或那种方式进行了一些实验,但最后,我们放弃了带有 Spark 的代理的糟糕表现”之类的答案也会引起我的兴趣。

比提前。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)