AWS EMR 多个作业依赖性争用

AWS EMR Multiple Jobs Dependency Contention

问题

我正在尝试 运行 EMR 中的 2 个 pyspark 步骤都使用 KinesisUtils 从 Kinesis 读取。这个需要依赖库,spark-streaming-kinesis-asl_2.11.

我正在使用 Terraform 建立 EMR 集群并使用 args 调用步骤:

--包org.apache.spark:spark-streaming-kinesis-asl_2.11:2.4.5

从 maven 下载 jar 并导致校验和失败的两个步骤在启动时似乎存在争用。

尝试的事情

  1. 我尝试使用以下方法将 jar 的下载移动到 bootstrap bash 脚本:

sudo spark-shell --packages org.apache.spark:spark-streaming-kinesis-asl_2.11:2.4.5

这会导致问题,因为 spark-shell 仅在主节点上可用,而 bootstrap 尝试在所有节点上 运行。

  1. 我已经尝试使用
  2. 将上述内容限制为仅 运行 在 master 上

grep-q'"isMaster":true'/mnt/var/lib/info/instance.json ||{echo "Not 运行ning on masternode,nothing further to do" && exit 0; }

这似乎没有用。

  1. 我试图在 EMR 中添加 spark 配置来执行此操作 configuration.json

    {

    "分类": "spark-defaults",

    “属性”:{

    "spark.jars.packages": "org.apache.spark:spark-streaming-kinesis-asl_2.11:2.4.5"
    

    }

    }

这也没有用,似乎阻止了所有 jar 被复制到主节点目录

/home/hadoop/.ivy2/cache

手动工作的是登录到主节点和 运行ning

sudo spark-shell --packages org.apache.spark:spark-streaming-kinesis-asl_2.11:2.4.5

然后在不使用 --packages 选项的情况下手动提交作业。

目前,我需要做的就是分别手动启动失败的作业(在 AWS 控制台中执行克隆步骤),然后一切正常 运行。

我只是希望能够成功启动所有步骤的集群,任何帮助将不胜感激。

  1. 下载所需的jar并上传到s3。(一次)
  2. 虽然 运行 您的 pyspark 作业来自步骤,但在您的 spark-submit
  3. 中传递 --jars <s3 location of jar>