apache-spark - 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。
我们的问题是——
- 每个执行程序可以通过这种方式返回/传回驱动程序的数据大小是否有限制?
- Driver以这种方式可以接收的数据大小是否有限制?它是否限于驱动程序可用的最大堆大小?
- 对于这种类型的状态传递,我们应该注意什么问题/标注?
我们传递的数据对于每个 Executor 来说都是非平凡的大小,但不是很大(每个 Executor 大约几十 MB)。我们预计在一个应用程序运行中最多有 400 个 Executor。
解决方案
推荐阅读
- arrays - 在 C 中,如何“直接”将结构复制到数组成员?
- arrays - Ansible 子元素(2.3 版)
- python - 如何使用 VCS 中的 pip 将包强制安装到站点包
- python - 重组 Pyspark 数据框:使用行元素创建新列
- pytorch - 如何更改transformers.bert的最大序列长度?
- php - 当我从 ajax 发送数据时,如何在 jQuery 中使用 DataTables 对列进行排序?
- reactjs - 从哪里开始锻炼项目
- corda - Corda - 无法处理包含大量状态的事务
- c - C中的快速图像平滑
- reactjs - 如何就地使用 ANT Design Menu.Item 和 Upload 组件?