Apache spark Apache Spark是否允许多阶段工作人员?

Apache spark Apache Spark是否允许多阶段工作人员?,apache-spark,Apache Spark,我需要知道Spark如何允许工作节点之间的通信? 分配给工人的所有任务都来自主程序,但工人的输出是否可以发送给另一个工人,以便其可以处理其上的进一步步骤 我正在处理一个案例,其中有多种类型的任务需要执行,假设任务a、B、C。 要启动任务C,任务A和B应该完成,但A和B可以独立完成。所以,我需要几个工人来完成任务A,几个工人来完成任务B,他们必须调用任务C的工人,而不涉及到主控。请为我提供如何实现这一目标的见解。 这种特性在纱线中可用吗 我只是提出了一个可能的解决方案,尽管我自己还没有测试过,我不

我需要知道Spark如何允许工作节点之间的通信? 分配给工人的所有任务都来自主程序,但工人的输出是否可以发送给另一个工人,以便其可以处理其上的进一步步骤

我正在处理一个案例,其中有多种类型的任务需要执行,假设任务a、B、C。 要启动任务C,任务A和B应该完成,但A和B可以独立完成。所以,我需要几个工人来完成任务A,几个工人来完成任务B,他们必须调用任务C的工人,而不涉及到主控。请为我提供如何实现这一目标的见解。
这种特性在纱线中可用吗

我只是提出了一个可能的解决方案,尽管我自己还没有测试过,我不确定它是否成功

我想到的是,通过使用诸如count之类的动作,在B和C任务之间制造一种障碍。这将迫使Spark在开始阶段C之前,在所有节点中完成前面的所有步骤。我对这句话不是很确定


然后,您可以使用广播功能缓存变量,并使其可供所有执行者使用,而无需与主机通信。

我想尝试一下这个问题的可能答案。我认为这可以通过两种方式实现:

一,。如果任务A和B是独立的,需要在C之前完成,为什么不先在RDD上执行任务A和B,然后使用这些任务的结果或新的RDD并使用另一个操作执行C呢


二,。在spark AFAIK中,员工之间的沟通是一个问题。spark中唯一的通信方式是广播和累加器变量。但这两种方法都有助于驾驶员与工人之间的沟通,而不是工人与工人之间的沟通。一种可能的解决方法是将结果或变量从worker保存到一个公共存储器(如HDFS)中,并从另一个worker访问它。例如,在PySpark中,有使用Popep、Pydoop、Hadoopy等从工作机器到HDFS的有效通信方式。

这会给您带来什么好处?如果你按照ABC或BAC的顺序分阶段完成任务,那么这不会花费与交错A、B和C大约相同的时间吗?事实上,这就像流式处理一样,假设第一个请求是A1、B1、C1,第二个请求是A2、B2和C2。所以,如果任务A1和B1完成,那么第二阶段的工作人员可以执行C1,而第一阶段的工作人员可以继续执行A2和B2。我认为这在某些场景中是有意义的。然而@DNA的论点有其道理。最后,没有太多的火花分布电位被使用。