如何在特定节点上运行 Spark 作业

Posted

技术标签:

【中文标题】如何在特定节点上运行 Spark 作业【英文标题】:how to run Spark job on specific nodes 【发布时间】:2016-05-29 14:33:08 【问题描述】:

例如,我的 Spark 集群有 100 个节点(工作者),当我运行一项作业时,我只想让它在大约 10 个特定节点上运行,我应该如何实现这一点。顺便说一句,我正在使用 Spark 独立模块。

为什么我需要上述要求:

One of my Spark job needs to access NFS, but there are only 10 nodes were
permitted to access NFS, so if the job was distributed on each Worker nodes(100 nodes),
then access deny exception would happen and the job would failed.

【问题讨论】:

添加更多详细信息(例如作业设置、配置、作业代码等)。 Mesos 上的 Spark 允许您根据属性和资源设置约束,但 AFAIK 独立版没有此类限制。为什么需要这个? @zero323 谢谢,我修改了我的问题。 【参考方案1】:

Spark 工作人员由数据本地“选择”。这意味着数据所在节点上唯一的工作人员将工作。因此,一种方法是仅将文件保存在这些节点上。在独立模式下没有直接选择特定节点的方法。此外,这意味着作业总是需要通过在节点之间移动大量数据来开始,这不是很有效。

【讨论】:

谢谢,如果我使用 Yarn 或 Mesos,是否可以为一项工作指明特定节点?【参考方案2】:

您可以使用文档here。 这些说明和以下文件在您使用引导节点执行集群安装时存在 您首先需要将 MESOS_ATTRIBUTES 添加为 here。 只需在 /var/lib/dcos/mesos-slave-common (或您的节点是 (slave|master|public) 下的任何类型的节点)上添加以下行并重新启动代理服务 systemctl restart dcos-mesos-slave.service

提示:可以查看单元文件/etc/systemd/system/dcos-mesos-<mesos-node-type>.service上加载的环境文件

MESOS_ATTRIBUTES=<attribute>:<value>,<attribute>:<value> ... 

然后按照文档提交您的 Spark 作业:

docker run mesosphere/spark:2.3.1-2.2.1-2-hadoop-2.6 /opt/spark/dist/bin/spark-submit --deploy-mode cluster   ... --conf spark.mesos.constraints="<attribute>:<value>" --conf spark.mesos.driver.constraints="<attribute>:<value>"  ... 

请记住:spark.mesos.constraints 用于执行者spark.mesos.driver.constraints 用于驱动程序 取决于您是否希望驱动程序或执行程序访问您想要的数据,并且将在具有您指定的属性的节点上创建 docker 图像。

【讨论】:

以上是关于如何在特定节点上运行 Spark 作业的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 Dataproc 上 pyspark 作业的每个执行程序/节点内存使用指标?

无法让 pyspark 作业在 hadoop 集群的所有节点上运行

AWS 上 DC/OS 集群上的 Spark 作业

如何在 Azure 数据工厂的 Databricks 上运行 .Net spark 作业?

在 HDIinsight 集群上运行 spark 作业时如何解决此致命错误?会话 681 意外地达到了“死亡”的最终状态。查看日志:

如何使 pyspark 作业在多个节点上正确并行化并避免内存问题?