了解 mesos 上 Spark 作业的资源分配

2024-04-29

我正在 Spark 中开发一个项目,最近从使用 Spark Standalone 切换到使用 Mesos 进行集群管理。我现在发现自己对新系统下提交作业时如何分配资源感到困惑。

在独立模式下,我使用了类似的东西(遵循一些建议这篇 Cloudera 博客文章 http://blog.cloudera.com/blog/2015/03/how-to-tune-your-apache-spark-jobs-part-2/:

/opt/spark/bin/spark-submit --executor-memory 16G --executor-cores 8 
    --total-executor-cores 240 myscript.py

这是一个集群,其中每台机器都有 16 个核心和约 32 GB RAM。

这样做的好处是我可以很好地控制运行的执行程序的数量以及分配给每个执行程序的资源。在上面的例子中,我知道我有 240/8=30 个执行器,每个执行器有 16GB 内存和 8 个内核。考虑到集群中每台机器上的内存,每台机器上运行的执行程序不会超过两个。如果我想要更多的执行者,我可以做类似的事情

/opt/spark/bin/spark-submit --executor-memory 10G --executor-cores 5 
    --total-executor-cores 240 myscript.py

现在,这将为我提供 240/5=47 个执行程序,每个执行程序有 5 个核心和 10GB 内存,并且每台机器最多允许 3 个执行程序。

但现在我在 mesos 上,我有点困惑。首先,我在粗粒度模式下运行,以确保我可以修复和控制我的资源分配(这是为我们想要预分配资源的相当复杂的模型服务的)。

现在,我可以指定--total-executor-cores and --executor-memory,但文档告诉我--exeuctor-cores仅适用于 Spark 独立版和 YARN,这使得指定执行器总数和分配给每个执行器的资源变得困难。假设我运行这个:

/opt/spark/bin/spark-submit --total-executor-cores 240 --executor-memory 16G --conf spark.mesos.coarse=true myscript.py

当我在 Mesos Web UI 中检查这项工作时,事情开始变得混乱。所以,这是我的问题:

  1. 术语。 Web UI 列出了“框架”,我认为它对应于独立 UI 中的“作业”。但是,当我单击给定框架的详细信息时,它会列出“任务”。但这些不可能是实际的 Spark 任务,对吧?据我所知,就 Spark 而言,这里的“任务”实际上意味着“执行者”。这与 UI 上显示的框架(作业)具有的一致:15 个活动任务、240 个 CPU 和 264GB 内存。

    264/15=17.6,这似乎与我指定的每个执行器 16GB 内存一致(我猜还加上一些开销)。我对这一切的解释正确吗?

  2. 假设是,当我检查这些“任务”(执行程序)中的任何一个时,我发现每个任务都分配了 16 个核心。假设我们每台机器有 16 个核心,这似乎表明我基本上在 16 台机器中的每一台上运行一个执行程序,并且每个执行程序都获得完整的 16 个核心,但只有 16 GB 的 RAM。 (请注意,即使我放弃--executor-memory向下,到 4GB 左右,mesos 仍然只在每个节点运行一个执行程序,具有 16 个核心和 4GB RAM)。但我想要完成的事情就像我的前两个例子一样。也就是说,我想在每个节点运行多个执行程序,每个执行程序共享该节点的 RAM 和核心(即执行程序前的中等数量的核心,5-8 个)。考虑到我无法指定--executor-cores在 Mesos 中,我该如何实现这一点?或者出于某种原因我什至想要完成这个任务,但我是否偏离了基地? Mesos 是否不允许每个节点有多个执行器?


问题一: 在粗粒度模式下,Spark的执行器(org.apache.spark.executor.CoarseGrainedExecutorBackend)作为Mesos任务启动。 Mesos Framework实际上是Spark Driver。一个 Spark Driver 可以提交多个 Spark 作业。这取决于您的 Spark 应用程序。 Spark 和 Mesos 都来自加州大学伯克利分校的 AMPLab,并且是并行开发的,因此它们使用相似的术语(执行器、任务...),这可能会让您感到困惑:-)。

问题2: 在粗粒度模式下,Spark 每台主机只启动一个执行器(请参考https://issues.apache.org/jira/browse/SPARK-5095 https://issues.apache.org/jira/browse/SPARK-5095了解详情)。因此,对于您的情况,Spark 将为每个主机启动一个执行程序(每个执行程序消耗 16G 内存,如果没有其他工作负载,主机中的所有可用核心为 16 个核心),直到执行程序的核心总数达到 240 个核心。将有 240/16=15 名执行者。

对于spark.mesos.mesosExecutor.cores,它仅适用于细粒度模式。在细粒度模式下,Spark 将为每个主机启动一个执行程序 (org.apache.spark.executor.MesosExecutorBackend)。即使没有任务,执行器也会消耗spark.mesos.mesosExecutor.cores的核心数。每个任务都会消耗不同数量的spark.task.cpus核心。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

了解 mesos 上 Spark 作业的资源分配 的相关文章

随机推荐

  • 基于输入键的 Tabindex 通过获取表单元素在 Jquery 中不起作用

    我有一个表单 我可以通过它获取所有表单元素serializeArray 我想要focus 使用 Enter 键根据其 tabindex 值在表单元素上 只有当它有价值时 否则就专注于它本身 对 jQuery 来说不太新鲜 所以如果有任何错误
  • 在 Cartopy 中隐藏高纬度非矩形投影的右侧轴(纬度)标签

    我试图使用以下命令隐藏此 Cartopy 地图中的右侧标签 又名纬度 right labels False但仅适用于某些值 但是 可以使用隐藏顶部 底部标签top labels False and bottom label False 重现
  • 按下后退按钮时停止 Fragments 中的 AsyncTask

    我有一个托管片段的活动 按下按钮会通过 FragmentTransaction 从片段 A 转到片段 B 并将其添加到返回堆栈中 现在片段 B 有一个 AsyncTask 实现 它从 sdcard 加载图像并在加载图像时将其发布 如果我按
  • 关于:链接(Markdown 页面)上的blank#blocked

    在 Markdown 页面中 Microsoft TFS Wiki 我尝试创建 A 标签file link a href file txt a 点击 Chrome 后 我得到了 about blank blocked 这不是 Chrome
  • JPA 继承无法确定类型

    我有一个简单的 JPA 映射 但我不断得到一个Could not determine type for例外 setter 和 getter 被省略 Entity Inheritance strategy InheritanceType JO
  • UINavigationController如何设置标题

    我有一个用于通用项目列表的控制器 视图 可以扩展它以显示自定义列表 列表和导航工作正常 但我无法更改 UINavigationController 的标题 在通用控制器中 void viewDidLoad super viewDidLoad
  • React Native 溢出和滚动

    我开始学习 React Native 据我所知 既有 overflow scroll 样式属性又有ScrollView 在 View 中使用 overflow scroll 是否会使其成为 React Native 中的 ScrollVie
  • 在 virtualenv 中安装 Python-Dbus

    我正在虚拟环境中运行一个应用程序 需要访问 DBus 主要是与网络管理器交互 我尝试使用 easyinstall 和 pip 安装 Dbus Python 但都失败了 当我尝试这样做时 myvirtualenv borrajax borra
  • Google CoLab 中的 Python 3 支持

    我一直在尝试使用 Jupyter 笔记本https colab research google com https colab research google com 并且默认情况下它们似乎运行 Python 2 7 有什么方法可以在 Co
  • 解决 Sinatra 路线方法中缺乏上下文的问题

    在调用我的路线时 我一直遇到缺少实例和 nilClass 错误的问题 在深入研究源代码之后 似乎generate method调用基本上使用初始方法的块创建了一个新方法 get do some local instance do somet
  • 无法找到任何至少支持 iOS 8.0 的 Xcode 安装

    我已经有一段时间没有使用 Appecelerator Titanium 的开发工具了 Studio 和 CLI 现在我尝试在 iOS 模拟器中运行现有的应用程序 从工作室我无法选择 iOS 模拟器 当我使用 CLI 并执行 appc run
  • 将 LinkedHashset 内容复制到新的 ArrayList?

    我有一个最初包含一些内容的 listView 如果它得到相同的内容 我通过删除重复linkedhashset 现在 我想复制linkedhashset内容 即没有重复的内容到新的ArrayList 我尝试复制通过 p addAll 0 lh
  • 无法向 openfire 服务器发送消息

    我无法使用 SMACK API 向 openfire 服务器上的 XMPP 客户端发送消息 我不确定我哪里出错了 我在 gtalk 上测试了相同的代码 它工作正常 public class SenderTest public static
  • 在php中将指数数转换为小数

    我有一个指数格式的浮点数 即4 1595246940817E 17我想将其转换为十进制数 例如 2 99 等 任何帮助将不胜感激 format number sprintf 似乎不适合我 你需要像 BC 这样更好的数学扩展数学 GMP ht
  • WPF UserControls - 在 UserControl 内的按钮上设置 .Command 属性

    我有一个包含按钮和其他一些控件的 UserControl
  • python TypeError:“NoneType”对象没有属性“__getitem__”

    这次我尝试另一个例子索莱姆的博客 http www janeriksolem net 2012 08 reading gauges detecting lines and html 它是一个使用霍夫变换检测图像中的直线和圆的模块 这是代码
  • 从 VS Code 终端登录 AzureRmAccount

    当我尝试从 VS Code 终端登录 Azure RM 时 它只是挂起 不显示登录 密码提示 有什么办法可以从该终端登录吗 否则运行 调试 Azure PS 脚本会变得比应有的更加复杂 登录窗口会在后台弹出 如果您最小化所有窗口 您最终会找
  • 如何在 AVCaptureDevice 上准确设置快速快门速度(曝光时间)?

    我正在开发适用于 IOS 13 的相机应用程序 为此 我将 AVCaptureSession 与 AVCaptureVideoPreviewLayer 结合使用 到目前为止一切正常 现在我想让用户从给定的典型快门速度值数组 以 1 3 曝光
  • Windows 上的 pymssql 可以连接到本地 SQL Server,但不能连接到 Azure SQL

    尝试使用 pymssql 连接到 Azure SQL DB v12 我能够使用 pymssql 连接查询并写入本地 MSSQL 实例 我收到 Adaptive Server 连接失败 失败错误 我的研究似乎指向 FreeTDS 但我尚未在我
  • 了解 mesos 上 Spark 作业的资源分配

    我正在 Spark 中开发一个项目 最近从使用 Spark Standalone 切换到使用 Mesos 进行集群管理 我现在发现自己对新系统下提交作业时如何分配资源感到困惑 在独立模式下 我使用了类似的东西 遵循一些建议这篇 Cloude