如何并行运行多个Spark作业?

2024-06-20

一个 Spark 有一个 Oracle 查询。所以我必须并行运行多个作业,以便所有查询同时触发。

如何并行运行多个作业?


引用官方文档作业调度 http://spark.apache.org/docs/latest/job-scheduling.html:

其次,在每个 Spark 应用程序中,如果多个“作业”(Spark 操作)由不同线程提交,则可能会同时运行。

换句话说,单个SparkContext实例可以由多个线程使用,从而能够提交多个可能并行运行也可能不并行运行的 Spark 作业。

Spark作业是否并行运行取决于CPU的数量(Spark不跟踪调度的内存使用情况)。如果有足够的 CPU 来处理多个 Spark 作业的任务,它们将同时运行。

但是,如果 CPU 数量不够,您可以考虑使用公平调度模式 http://spark.apache.org/docs/latest/job-scheduling.html#scheduling-within-an-application(默认为 FIFO):

在给定的 Spark 应用程序(SparkContext 实例)内,如果多个并行作业是从单独的线程提交的,则它们可以同时运行。在本节中,“作业”是指 Spark 操作(例如保存、收集)以及需要运行以评估该操作的任何任务。 Spark 的调度程序是完全线程安全的,并支持此用例以启用服务多个请求的应用程序(例如,多个用户的查询)。

默认情况下,Spark 的调度程序以 FIFO 方式运行作业。每个作业都分为“阶段”(例如映射和减少阶段),第一个作业在所有可用资源上获得优先级,而其阶段有任务要启动,然后第二个作业获得优先级,依此类推。队列不需要使用整个集群,后面的作业可以立即开始运行,但是如果队列头部的作业很大,那么后面的作业可能会明显延迟。


只是为了把事情弄清楚一点。

  1. spark-submit是提交一个Spark应用程序来执行(不是Spark作业)。单个 Spark 应用程序可以具有at least一份 Spark 工作。

  2. RDD 操作可能会或可能不会阻塞。SparkContext提供两种提交(或运行)Spark 作业的方法,即SparkContext.runJob and SparkContext.submitJob,所以一个动作是否阻塞并不重要,重要的是它是什么SparkContext用于实现非阻塞行为的方法。

请注意,“RDD 操作方法”已经编写完毕,并且它们的实现使用 Spark 开发人员所押注的任何内容(主要是SparkContext.runJob as in count https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/rdd/RDD.scala#L1162):

// RDD.count
def count(): Long = sc.runJob(this, Utils.getIteratorSize _).sum

您必须编写自己的 RDD 操作(在自定义 RDD 上)才能在 Spark 应用程序中获得所需的非阻塞功能。

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

如何并行运行多个Spark作业? 的相关文章

随机推荐

  • Bash:读入多个局部范围变量

    根据这个答案 https stackoverflow com a 1952480 582917 https stackoverflow com a 1952480 582917 我可以读入并因此分配多个变量 但是我希望这些变量是 bash
  • 为 PInvoke 正确声明 SP_DEVICE_INTERFACE_DETAIL_DATA

    The SP DEVICE INTERFACE DETAIL DATA http msdn microsoft com en us library windows hardware ff552343 aspx结构 typedef struc
  • MYSQL从每个类别中随机选择一条记录

    我有一个数据库Items表看起来像这样 id name category int 有几十万条记录 每个item可以是 7 种不同的之一categories 对应于categories table id category 我想要一个从每个类别
  • 单击一次,“您的 Web 浏览器设置不允许您运行未签名的应用程序。!

    我们正在尝试部署一个未签名的 clickonce 应用程序 对于某些用户来说 此操作会失败并出现以下错误 而对于其他用户来说则没有问题 这可能是某处的安全设置 但我们一直无法找到它 有关如何允许安装此应用程序的任何提示 禁止签名 PLATF
  • PowerShell 中的变量作用域

    PowerShell 的一个遗憾是函数和脚本块是动态作用域的 但另一件事让我感到惊讶的是 变量在内部作用域内表现为写时复制 array g function foo array h Write Host array array s Writ
  • 在主机和子docker之间共享图像

    我读了这篇文章http blog docker io 2013 09 docker can now run within docker http blog docker io 2013 09 docker can now run withi
  • 如何包含字符串标头?

    我正在尝试了解strings 但不同的来源告诉我要包含不同的标头 有人说用
  • 有没有办法将 AssertJ 断言与 Spring MVC 测试一起使用?

    我在项目中使用 AssertJ 一段时间了 最近我开始使用 Spring MVC Test 来测试 Spring MVC 控制器 但我不知道如何使用 AssertJ 我在网上看到的所有示例都使用 Hamcrest 和 Spring MVC
  • 对包含元组的元组进行排序[重复]

    这个问题在这里已经有答案了 我有以下元组 其中包含元组 MY TUPLE A Apple C Carrot B Banana 我想根据以下内容对这个元组进行排序second内部元组中包含的值 即 对 Apple Carrot Banana
  • R 中的字符串作为函数参数

    数据框chocolates列出了糖果的类型以及每种糖果的一组评级 ID sweetness filling crash snickers 0 67 0 55 0 40 milky way 0 81 0 53 0 56 我正在编写一个函数 它
  • 主干视图 DOM 元素已删除

    我一直在阅读有关 Backbone js 僵尸 或内存泄漏 问题的信息 基本上 当您不再需要该元素时 您必须从 DOM 中解除绑定并删除该元素 以确保所有事件也被删除 现在 我有一个包含几个容器的单页应用程序 div div div div
  • 将现有 VARCHAR 列与 Room 结合使用

    我正在尝试将现有的数据库与 Android Room 一起使用 但是 我的一个表有一个 VARCHAR 列 Room 似乎只支持 TEXT 不支持 VARCHAR 而且 sqlite 不允许修改列类型 那么 有没有办法使用Room中现有的带
  • 如何检查字符串是否为有效日期

    我有一个字符串 31 02 2010 并想检查它是否是有效日期 最好的方法是什么 我需要一个方法 如果字符串是有效日期 则返回 true 如果不是 则返回 false require date begin Date parse 31 02
  • 特征实施尺寸

    我知道特征和切片的大小是不确定的 即在编译时不可能知道它们的大小 例如任何类型都可以实现特征 但该类型可能无法调整大小 然而 这个示例代码是否意味着每个实现特征的类型Foo需要实施Sized too trait Foo Sized stru
  • Calendly 未在 Webflow 中预填写表单

    我在 Webflow 项目中使用 Calendly 并且它有效 不过 我想在 Calendly 中预先填写表格 这里有一个指南 https help calendly com hc en us articles 226766767 Pre
  • GitHub API 获取用户/组织总数

    Using GitHub API https developer github com v3 如何计算请求时的用户 组织总数 Users https developer github com v3 users and 组织机构 https
  • time_select 表单助手将新时间对象解释为 UTC,而不是配置的时区

    我遇到了对我来说似乎很简单的问题 但我无法弄清楚我做错了什么 在我的应用程序中 用户可以通过简单的 form for 添加他们的课程 他们可以输入课程讲座的开始时间和结束时间 如下所示 div class field Start Time
  • 序列的排列?

    我有具体数量的数字 现在我想以某种方式显示这个序列的所有可能的排列 例如 如果数字数量为3 我想显示 0 0 0 0 0 1 0 0 2 0 1 0 0 1 1 0 1 2 0 2 0 0 2 1 0 2 2 1 0 0 1 0 1 1 0
  • 服务层和存储库

    我使用 MVC 框架已经有一段时间了 我真的很喜欢如何分离关注点 我养成了让控制器做大量工作的坏习惯 所以我真的在寻求一些建议 当我第一次开始使用 MVC 时 我经常在数据库工作完成后让控制器对模型进行操作 我知道这很糟糕 所以将这项工作转
  • 如何并行运行多个Spark作业?

    一个 Spark 有一个 Oracle 查询 所以我必须并行运行多个作业 以便所有查询同时触发 如何并行运行多个作业 引用官方文档作业调度 http spark apache org docs latest job scheduling h