scala - 如何在 Spark 中强制每个执行程序只处理一个任务?
问题描述
我正在使用 Spark 来处理我的数据。我的 Spark 工作是仅 Map操作,我正在使用一些外部库来处理我的数据。这个外部库有一个内存泄漏错误。当执行程序启动时,它成功处理了几个文件/分区,但由于这个内存错误,它开始失败。
我非常依赖这个外部库,内存泄漏错误不会很快得到修复。所以,我正在寻找替代选项来运行我的 spark 工作(以低性能为代价)
正如我之前提到的,每个执行程序都可以轻松处理几个文件/分区,我认为,如果我可以将我的 Spark 应用程序配置为每个任务使用一个执行程序,即在处理分配的任务后终止执行程序并为下一个任务创建新的执行程序,我也许可以胜任我的工作。
我想知道,是否有办法配置 Spark 为每个可用任务创建新的执行程序?
我已经尝试过使用spark.dynamicAllocation.executorIdleTimeout=0
,但这不会为每个任务创建新的执行程序。
解决方案
确保你设置spark.executor.cores=1
,像这样每个执行器 jvm 将只有 1 个任务(一次)。但是,每个执行程序将有几个任务按顺序运行
推荐阅读
- c - 计算机中的十进制转二进制
- html - 我们如何将水印添加到现有的 html 文件中
- node.js - 如何从 API 检索数据并使用 nodejs 写入 Json 文件
- java - 在编辑代码之前尝试运行 Google App Engine 时出错
- django - TinyMCE 与 Django 中的 DigitalOcean 空间
- asp.net-mvc - 如果存在查询字符串值,.Net Core Web Catch All
- javascript - 在 Javascript 中转换和格式化 JSON 对象
- android - SQLite 数据库插入在 AsyncTask 中不起作用
- python - 重新排序打乱的整数序列以匹配某些标准(代码战)
- reactjs - 子容器边界内的 AppBar / Dialog