apache-spark - spark 3.0.2 到 spark 3.1.2 的哪些变化改变了 spark 集群上工作分配的行为?
问题描述
我已将 spark 集群从 3.0.2 更新到 3.1.2,现在在 3.0.2 集群上运行良好的同一作业因 OOM 错误而中断。对于上下文,我在使用 Spark 独立模式的本地集群上运行此作业,其中一个 master、worker 和 spark 应用程序都在单独的容器中运行。
我观察到的事情:
- 似乎所有工作都在 spark 应用程序容器内完成,并且根本没有使用 worker。Spark 3.0.2 并非如此(工作分配正确)。
- 我可以通过为火花驱动器提供更多内存(将其从 1g 增加到 4g)来解决 OOM。
- 我为 Spark 3.0.2 和 Spark 3.1.2 打印了作业的物理执行计划,我能看到的唯一区别是 3.1.2 使用的是 this
Exchange hashpartitioning(type_id#1549, 200), ENSURE_REQUIREMENTS, [id=#6675]
而 3.0.2 使用的是 thisExchange hashpartitioning(type_id#1549, 200), true, [id=#6675]
。 - 我在 Spark 方面不是很有经验,所以任何关于如何找出根本原因的帮助或程序都值得赞赏。指向相关源代码的指针也很受欢迎。
更新:
- 当我开始使用数据分区时,这个问题得到了解决。我不得不减少一列的分区数量,并且工作再次得到正确分配。但是,问题仍然存在,因为相同数量的分区在以前版本的 Spark 上运行良好。
解决方案
推荐阅读
- python - 如何在 gem5 中同时使用 python 2.7 和 3?
- visual-studio-code - 如何使用 Visual Studio Code 的 CMake 工具扩展在 CMake 步骤之前执行脚本?
- php - Solr查询多值数据
- ruby-on-rails - xlsx中的文件加密密码
- powershell - 启动进程,设置焦点 (?) 并按下与 RDP 断开连接的虚拟机上的键
- java - 投射嵌套列表
- > 到嵌套的 ArrayList
> - amazon-web-services - 文章应用程序的 DynamoDB GSI 数据建模
- python - 安装切线(用于可微编程/渐变的python库)
- r - R中kmeans中心的层次聚类
- nginx - nginx -- 连接到上游时没有实时上游