apache-spark - Spark 的 DAG 调度程序与 Catalyst
问题描述
我想确认一些方面,从阅读所有博客和 Databricks 资源和专家 Holden、Warren 等人看来,这些方面的解释似乎仍然很糟糕。我还注意到网上关于这个话题的一些悬而未决的问题。
然后如下:
我的理解是,对于 RDD,我们有 DAG 调度程序,它以简单的方式创建阶段。
我的理解
on reading elsewhere to-date
是,对于 DF 和 DS,我们:- 使用 Catalyst 而不是 DAG 调度程序。但我不服气。
- 有钨。
由于 DAG 也适用于 DF 和 DS(显然),我还有 1 个问题——只是为了确定:
- 是催化剂也创造了阶段吗?
- 这似乎是一个愚蠢的问题,但我在 SO 上注意到了一个关于 Disable Spark Catalyst Optimizer 的问题。那将意味着不。
- 此外,由于 Spark 范式是基于 Stage 的(随机边界),在我看来,决定 Stages 并不是 Catalyst 的事情。
因此,我的结论是 DAG 调度程序仍用于具有 DF 和 DS 的阶段,但我正在寻找确认。
而且,这张图暗示着还有一个DAG Scheduler。
这张来自 Databricks 2019 峰会的图片似乎与博客上的声明形成鲜明对比:
帮助 Dataset 更好地执行的一个重要元素是 Catalyst Optimizer (CO),它是一个内部查询优化器。它将用于构建数据集的转换“转换”为物理执行计划。因此,它类似于用于创建 RDD 执行物理计划的 DAG 调度程序。...
我在带有 DF 等的 DAG 上看到了许多关于 SO 的未回答问题,并且很多东西都过时了,因为它与 RDD 相关。因此,我询问了我与 Spark 知识的一些联系,并指出他们在提供合适的答案时疏忽了。
解决方案
让我尝试为您清除这些术语。
Spark Scheduler负责调度任务执行。它管理作业将被安排在哪里,它们是否会被并行安排等。Spark Scheduler 与块管理器和集群后端一起工作,以有效利用集群资源来实现各种工作负载的高性能。DAGScheduler就是其中的一部分。
Catalyst是 Spark 的优化器组件。它执行查询优化并创建多个执行计划,其中根据 RDD 选择最优化的一个执行计划。
Tungsten是专注于提高 Spark 应用程序的 CPU 和内存利用率的伞形项目。
DAGScheduler负责阶段的生成及其调度。它根据它们是“窄”依赖关系还是具有随机依赖关系,在随机边界处打破每个 RDD 图。它还根据当前缓存状态确定每个任务应该在哪里执行。
推荐阅读
- python - Heroku 维护更改了我的 DATABASE_URL 我可以访问外部数据库
- c - C:打印for循环
- django - Django Detailview 错误处理
- javascript - Bcrypt python脚本和带有MongoDB / Mongoose的JavaScript不适用于两个单独的项目
- android - Google InAppBilling - 如何测试非消耗性购买是否已退款?
- angular - Angular 代理配置更改 url
- android - 在Android中使用透明渐变按钮?
- powerbi - 幂 bi 的 Dax 公式,根据另一列的最新日期和时间给出列的最后一个值
- c# - “空条件运算符”是用词不当吗?
- android - 丢失密钥库文件后在 Play 商店中重新使用应用程序 ID