首页 > 解决方案 > Spark 中可以从 Executor 传递到 Driver 的最大数据

问题描述

在我们的一个 Spark 应用程序中,我们使用 RDD.map 来处理数据,并且处理逻辑正在传递一些状态/信息。

示例代码 -

JavaRDD<ProcessingOutput> result = rdd.map(
        new org.apache.spark.api.java.function.Function<Input, ProcessingOutput>() {
            public ProcessingOutput call(Input input) {
                ProcessingOutput output = new ProcessingOutput();
                // Do some Processing 
                return output;
            }
        }
);

我们知道,RDD.map会call在RDD的每个分区上调用,call方法会在Executors上/使用Executors进行处理,每个Executor返回的ProcessingOutput会被序列化并发回Driver。

我们的问题是——

  1. 每个执行程序可以通过这种方式返回/传回驱动程序的数据大小是否有限制?
  2. Driver以这种方式可以接收的数据大小是否有限制?它是否限于驱动程序可用的最大堆大小?
  3. 对于这种类型的状态传递,我们应该注意什么问题/标注?

我们传递的数据对于每个 Executor 来说都是非平凡的大小,但不是很大(每个 Executor 大约几十 MB)。我们预计在一个应用程序运行中最多有 400 个 Executor。

标签: apache-sparkapache-spark-sqlrdd

解决方案


推荐阅读