有什么方法可以 运行 触发脚本并与 oozie 并行存储输出吗?

Is there any way to run spark scripts and store outputs in parallel with oozie?

我有 3 个 spark 脚本,每个脚本都有 1 个 spark sql 来读取分区 table 并存储到某个 hdfs 位置。每个脚本都有不同的 sql 语句和不同的文件夹位置来存储数据。

test1.py - Read from table 1 and store to location 1.
test2.py - Read from table 2 and store to location 2.
test3.py - Read from table 3 and store to location 3.

我 运行 这些脚本在 oozie 和所有三个 运行 中使用 fork 操作。但问题是脚本没有并行存储数据。 一旦一个脚本的存储完成,另一个存储就开始了。

我的期望是将所有 3 个 table 数据并行存储到它们各自的位置。

我已经在 spark 脚本中尝试了 FAIR 调度和其他调度程序技术,但这些都不起作用。任何人都可以 help.I 从过去 2 天开始就一直坚持下去。

我正在使用 AWS EMR 5.15、Spark 2.4 和 Oozie 5.0.0。

对于容量调度器

如果您将作业提交到单个队列,则队列中最先出现的作业将获得资源。队列内抢占将不起作用。

我可以在Capacity scheduler中看到一个相关的Jira for Intraqueue preemption。 https://issues.apache.org/jira/browse/YARN-10073

你可以阅读更多https://blog.cloudera.com/yarn-capacity-scheduler/

对于公平调度器

在 yarn-site.xml 中将 "yarn.scheduler.fair.preemption" 参数设置为 "true" 可在集群级别启用抢占。默认情况下这是错误的,即没有抢占。

您的问题可能是:

1 项作业正在占用最大资源。要验证这一点,请检查 Yarn UI 和 Spark UI.

或者如果您有超过 1 个纱线队列(默认值除外)。尝试为您正在使用的队列设置 User Limit Factor > 1。