一个工人可以担任协调员并派遣到Spark中的其他工人吗?

时间:2018-09-03 15:14:50

标签: scala apache-spark coordinator-pattern

我是Spark的新手,我有一个项目,其中coordinator中有一个cluster,该项目从另一个nodes收集数据,执行一些操作计算并将global data array发送回nodes

我正在尝试实现Spark,并用driverbroadcast variables创建了它,但是我不确定大数据中的collect()

是否只能在workers之间执行此操作?像repartitionworker的某个东西,然后将计算结果作为输入发送回workers

1 个答案:

答案 0 :(得分:0)

简短的回答-不,Spark不公开任何API来使工作程序节点(执行程序)与其他工​​作程序进行通信。我可以想到一些解决方法(mapPartitions +内含一些ZK协调),但这不是Spark的目的,也不是您的要求。

可以将数据显然重新分区为一个分区(repartition(1)),这意味着只有一个执行程序,但是您必须确保数据足够小以适合一个节点。然后,您可以将结果发送回驱动程序(collect)并广播回群集。 collect()repartition(1)一样“危险”-您必须确保数据适合您的驱动程序。在这种情况下,您可以首先考虑在驱动程序上进行中央计算,前提是您的驱动程序进程具有足够的资源。