2014-09-04 67 views
2

我在Spark上实现了一个具有Spark节点的自定义数据层,该节点在本地持久保存了一些数据并向Spark主机宣布其数据的持久性。通过在每个Spark节点上运行一些自定义代码并掌握我们已经编写的代码,这很好,但现在我希望在我的集群中实现复制协议。我想要建立的是,一旦主节点从节点获得一条消息说它是持久数据,那么主节点可以随机选择其他两个节点并让它们保持相同的数据。以编程方式访问实时Spark节点列表

我一直在挖掘文档,但我没有看到SparkContext的一个明显的方式给我一个活节点列表。我错过了什么吗?

回答

6

没有一个公开的API来做到这一点。但是,您可以使用Developer API SparkListener(http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.scheduler.SparkListener)。您可以创建自定义SparkListener类,并把它添加到SparkContext为

sc.addSparkListener(yourListener) 

系统将类onBlockManagerAdded,当一个图块管理员被添加或删除onBlockManagerRemoved,并从图块管理员的ID,我相信你能得到的URL运行Spark live执行程序的节点(运行BlockManagers)。

我同意这是一个小黑客。 :)