AWS EMR多个作业依赖关系争用

时间:2020-07-01 15:26:21

标签: apache-spark hadoop pyspark amazon-emr amazon-kinesis

问题

我试图在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-打包org.apache.spark:spark-streaming-kinesis-asl_2.11:2.4.5

这会导致问题,因为spark-shell仅在主节点上可用,并且引导程序尝试在所有节点上运行。

  1. 我试图将以上内容限制为只能在使用的主服务器上运行

grep-q'“ isMaster”:true'/ mnt / var / lib / info / instance.json || {回显“不在主节点上运行,无所事事” &&退出0;}

那似乎不起作用。

  1. 我试图在EMR configuration.json中添加spark配置以实现此目的

    {

    “分类”:“ spark-defaults”,

    “属性”:{

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

    }

    }

这也不起作用,似乎停止了将所有jar复制到主节点目录

/home/hadoop/.ivy2/cache

手动操作是登录到主节点并运行

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

然后不使用--packages选项手动提交作业。

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

我只希望能够成功启动所有步骤来启动集群,我们将不胜感激。

1 个答案:

答案 0 :(得分:0)

  1. 下载所需的jar并将其上传到s3。(一次)
  2. 从步骤开始运行pyspark作业时,请在火花提交中传递--jars <s3 location of jar>