Apache Spark节点向master询问更多数据?

时间:2016-01-28 16:16:38

标签: apache-spark

我试图将一些方法用于将图像处理算法放入apache spark中。对于此算法中的一个步骤,对图像中像素的计算将取决于未知量的周围数据,因此我们无法对图像进行分区,保证足够的先验重叠。

我需要对该问题进行基准测试的一个解决方案是工作节点在遇到周围数据不足的像素时向主节点询问更多数据。我不相信这是做事的方式,但我还是需要根据原因对其进行基准测试。

不幸的是,经过一堆谷歌搜索和阅读文档后,我无法找到processingFunc作为sc.parallelize(partitions).map(processingFunc)的一部分调用的任何方法来查询主节点以获取来自不同分区的更多数据中间计算。

工作者节点是否有办法向主人询问更多数据是否存在于火花中,或者我是否需要将某些东西混合在一起?这样会产生火花?

1 个答案:

答案 0 :(得分:0)

Spark中的主节点用于将资源分配给特定作业,并且一旦分配了资源,驱动程序就会将完整代码及其所有依赖项发送给各种执行程序。

每个代码的第一步是将数据加载到Spark集群。您可以从任何底层数据存储库(如数据库,文件系统,Web服务等)读取数据。

加载数据后,它将被包装到RDD中,RDD在集群中的节点之间进行分区,并进一步存储在workers / Executors Memory中。虽然您可以通过利用各种RDD API来控制分区数量,但只有在您有正当理由这样做时才应该这样做。

现在所有操作都是使用RDD API公开的各种方法/操作在RDD上执行的。 RDD会跟踪分区和分区数据,并根据需要或请求自动查询相应的分区。

简而言之,您不必担心RDD对数据进行分区的方式,或者哪个分区存储哪些数据以及它们如何相互通信,但如果您关心,那么您可以编写自己的自定义分区程序,指示Spark如何划分数据。

其次,如果您的数据无法分区,那么我不认为Spark会是一个理想的选择,因为这会导致处理一台机器中的所有内容,这本身就违背了分布式计算的想法。

不确定您的用例究竟是什么,但有些人一直在利用Spark进行图像处理。请参阅此处查看comments from Databricks