在EMR集群上安装应用程序软件后运行引导操作



安装应用程序软件(例如:spark(后,是否有运行引导操作的方法?我的目的是用我定制的火花罐替换一个AWS火花罐,这必须在AWS安装原始火花后完成。

我之所以不通过正常步骤执行此操作,是因为我想在集群的所有节点上执行此替换,而不仅仅是在主节点上。

虽然这个问题很老,但我还是解决了,并为仍然需要帮助的人添加了答案。正如在上面的评论中所说,我测试它的配置是:

发布标签:emr-5.30.1 Hadoop发行版:Amazon 2.8.5应用程序:spark 2.4.5

真正的问题是,在安装Spark等软件之前,AWS EMR上的引导程序会被执行。

解决方案:分两步完成

  1. 添加一个引导脚本,将第二个脚本作为后台进程运行。这完成了引导,并使您能够等待安装。下面的示例脚本使用两个参数,S3存储桶路径和环境前缀,并显示了如何将它们传递给下一个脚本。

    #!/bin/bash
    aws s3 cp $1/$2/some/path/to/second/script/emr_second_script.sh .
    chmod +x emr_second_script.sh
    nohup ./emr_second_script.sh $1 $2 &>/dev/null &
    
  2. 编写第二个脚本,第一个脚本在后台运行。在此脚本中,检查是否显示安装目录,否则请等待/睡眠。一旦满足了这个条件,就施展你所需要的魔法。下面的示例脚本使用两个参数,S3存储桶路径和环境前缀。

    #!/bin/bash
    while [ ! -e /lib/spark/jars/ ]
    do
    echo "Spark installation not found, waiting..."
    sleep 15
    done
    echo "Spark installation found."
    # Do your actual scripting work here. e.g. Copy jars from S3.
    enter code here
    sudo aws s3 cp $1/$2/path/to/my/jar/my-jar-1.0.jar --region us-east-1 /lib/spark/jars    
    exit(0)
    

您可以在这里找到相同的解决方案来解决略有不同的问题。

最新更新