apache-spark-sql - Spark SQL 执行中核心的使用
问题描述
我是 Spark SQL 查询的新手,并试图了解它在幕后工作。
我在 Spark 词汇表中遇到过“核心”一词,但仍然难以抓住它。
我知道 - 1 core = 1 task
。
我的问题-
- 谁能解释一下a到底是什么
core
意思? - Spark UI 是否显示
cores
当前为我的工作分配的数量?如果是,那么我在哪里可以看到它? - 如果我在 Spark UI 中发现
tasks
运行的次数较少,有没有办法增加cores
为我的作业分配的数量,以便 Spark 可以提交更多任务并使我的作业运行得更快?
请指教。
解决方案
是的,你在某种程度上是对的。在 Spark 中,任务分布在多个 executor 上,每个 executor 上运行的任务数等于该 executor 上的核心数。所以基本上核心是要执行你的任务的东西。这里的任务是需要执行的最细粒度的工作。
工作=>阶段=>任务
是的,spark UI 会向您显示当前在每个执行程序上运行的任务的数量。您可以在 Executors 选项卡下查看它们。此选项卡向您显示任务分配与可用内核数量和许多其他详细信息的非常详细的视图。
是的,您可以增加核心数量。您可以通过在 spark-submit 命令中传递参数来做到这一点。
--executor-cores n 这里 n 是你想要的核心数。为了获得最佳使用效果,它应该是 5。
您的作业运行速度不必超过内核数量。您的任务需要在所有可用的内核上平均分配以更快地运行。如果您提供的内核数量超过所需数量,它们大部分时间都将保持空闲状态。
推荐阅读
- regex - 正则表达式:从多个连接的 HTML 文件中获取内容
- ruby-on-rails - 如何在 before(:each) 钩子中访问 let'd 变量
- .net - rdlc 中的子报表仅显示 master 中的一条记录
- html - 使用 MS Excel VBA 从复杂的 HTML/JS 中提取数据
- r - 将绘图保存为图像或 pdf 时访问被拒绝?
- c# - 运行多个任务以更改链表 C#
- json - 如何根据属性值是否在数组中使用 jq 过滤 JSON?
- python - 将许多参数传递给 scipy 优化
- mongodb - 在不影响锁定和性能的情况下删除大型 mongo 集合的所有元素的最佳方法?
- tensorflow - 从对象检测 API 模型中提取研磨锚