apache-spark - 如何避免 spark job 工作量偏差问题
问题描述
我在火花工作工作量偏差方面存在问题。
环境设置
集群有 5 个节点,1 个主节点和 5 个工作节点(下图10.200.0.94 ~ 10.200.0.98
)。
每个节点有 40 个内核(带有超线程)和 256g 内存。
火花作业设置
- 执行人数 5
- 执行器核心 5
- 驱动内存 16g
- 执行器内存 20g
工作是在数百万条记录中计算异常记录。
这是近 2 ~ 3 小时后运行作业后的作业历史记录。
可以看到,基本上有6个阶段,大部分时间落入3、4、5阶段。
让我们进入第 3 阶段(第 4 阶段和第 5 阶段的结果相似):
显然,某些任务比其他节点花费更多的时间,例如与具有私有 ip 的节点连接的任务10.200.0.96
。
GC 时间似乎是合理的。
然后让我们深入到执行者视图:
节点 96 和 98 比其他节点花费更多的任务时间。
需要注意的是,我没有使用任何repartition
动作。
有人可以对此提供一些提示吗?如何避免 Spark 作业中的这种计算偏差?有什么共同的套路可以遵循吗?
解决方案
您是否创建了依赖于其中之一的管道,您是否也在使用检查点?
推荐阅读
- apache-spark - 如何使用 spark 插入 HDFS?
- google-cloud-platform - Ansible gcp_compute 库存插件 - 基于机器名称的组
- android - 生成签名 apk 时出错:请指定签名 apk 的目标文件夹
- powershell - 如何在 Powershell 中同时调用一组 REST API?
- wordpress - WooCommerce 不显示子类别
- php - 如何在 Laravel 中获取查询生成器结果的所有列的数组?
- arrays - 运行时错误 9“下标超出范围”数组 redim 保留 vba
- c - 打印语句不适用于 Mac 的 CodeBlocks
- android - 如何导入 WorkManager 类
- asp.net - 在 ListView ItemTemplate 中设置按钮属性