apache-spark - 解释 Spark 配置之间的区别
问题描述
我必须将我的 spark 应用程序中的执行程序数量设置为 20。在查看官方文档时,我很困惑哪个是更好的配置
- spark.dynamicAllocation.initialExecutors = 20
- spark.executor.instances=20
我启用了以下配置
- spark.dynamicAllocation.enabled = true
在什么用例场景中我将使用其中一个?
解决方案
根据火花文档
- spark.dynamicAllocation.initialExecutors
如果启用了动态分配,则要运行的初始执行程序数。
如果
--num-executors
(orspark.executor.instances
) 被设置并且大于这个值,它将被用作 executors 的初始数量。
正如您在突出显示的文本中看到的那样,当它设置为比 spark.dynamicAllocation.initialExecutors 更高的值时,它可以被 --num-executors 覆盖。基本上,当您的应用程序启动时,它将启动spark.dynamicAllocation.initialExecutors,然后在启用动态分配时缓慢增加直到spark.dynamicAllocation.maxExecutors 。
- spark.executor.instances
静态分配的执行者数量。
用外行的话来说,这就像说我想要 x 资源(spark.executor.instances)来完成一项工作
(或者)
我希望 min(x 资源) 和 max(y 资源) 和最初(z 资源) 完成一项工作...条件 (x<=z<=y) 应该始终满足,并且您的资源使用情况将取决于何时需要你的工作正在运行。
什么时候使用动态分配?
当您在集群上运行多个流应用程序或按需 spark-sql 作业时。大多数情况下,您的作业可能需要很少的资源,并且几乎只在大数据流块(高峰时段)中保持空闲状态,作业可能需要更多资源来处理数据,否则集群资源应该被释放并用于其他目的。
注意:启用动态分配时,请务必启用外部 shuffle 服务 (spark.shuffle.service.enabled=true)。
外部 shuffle 服务的目的是允许 executor 被删除而不删除它们编写的 shuffle 文件(更详细)。设置此服务的方式因集群管理器而异
参考: https ://dzone.com/articles/spark-dynamic-allocation
推荐阅读
- linux - 使用 ssh 连接到 docker 容器时出错
- asp.net - 如何将 .net 核心 Web API 部署为虚拟目录
- postgresql - PostgreSQL:致命:用户“postgres”的密码验证失败
- reactjs - 在 NextJs 中的故事书设置“找不到模块'css-loader/lib/getLocalIdent'”期间出现问题
- html - 设置链接我的网页时显示的图像
- php - SQL 显示多条记录
- python - Python Socket.io 处理所有事件(从客户端捕获所有事件)
- python - 通过渲染模板烧瓶在html页面中重新加载表单而不刷新整个页面
- python - Tensorflow v1 对象检测 api mask_rcnn_inception_v2_coco 模型批量推理
- node.js - Discord.js(V12)messageReactionAdd 对新用户不起作用,直到他们输入内容