运行 来自 ECS Docker 容器的 EMR 作业

Running EMR job from ECS Docker container

我已将用 python 编写的 ML 作业代码容器化到 docker 容器中,并能够使用 Amazon ECS 运行 作为 docker 服务。我想 运行 使用 Spark - Pyspark 以分布式方式部署并在 Amazon 上部署 EMR.Can 我在 ECS 和 EMR 之间建立连接?

配置服务:

可以在此处找到配置 EC2 实例以提交到 EMR 集群的步骤:

AWS 中 docker 运行ning 采用上述 link 的缩短版本:

要从远程计算机向 EMR 集群提交 Spark 作业,必须满足以下条件:

  1. 允许从远程计算机到所有群集节点的网络流量。

  2. 所有 Spark 和 Hadoop 二进制文件都安装在远程机器上。

  3. 远程机器上的配置文件指向EMR集群。

分辨率

确认允许从远程计算机到所有群集节点的网络流量

如果您将 EC2 实例用作远程机器或边缘节点:允许从该实例的安全组到每个集群节点的安全组的入站流量。 如果您使用自己的机器:允许从您机器的 IP 地址到每个集群节点的安全组的入站流量。 在远程机器上安装 Spark 和其他依赖的二进制文件

正在安装二进制文件

要安装二进制文件,请从 EMR 集群的主节点复制文件,如以下步骤所述。这是确保在 EMR 集群和远程计算机上安装相同版本的最简单方法。

  1. 选择合适的Docker 基本图像。

  2. 将以下文件从 EMR 集群的主节点复制到 docker 映像。不要更改文件夹结构或文件名。

/etc/yum.repos.d/emr-apps.repo
/var/aws/emr/repoPublicKey.txt
  • 这些文件将提供对 AWS 软件存储库的访问权限
  1. 运行 按照 docker 映像中的命令安装 Spark 和 Hadoop 二进制文件:
sudo yum install -y hadoop-client
sudo yum install -y hadoop-hdfs
sudo yum install -y spark-core
sudo yum install -y java-1.8.0-openjdk
  • 如果以上任何一项失败,请尝试从 EMR 主机复制 /etc/yum.repod.d/ 并重新 运行 它们。
  1. 运行 以下命令在 Docker 图像中创建文件夹结构:
sudo mkdir -p /var/aws/emr/
sudo mkdir -p /etc/hadoop/conf
sudo mkdir -p /etc/spark/conf
sudo mkdir -p /var/log/spark/user/
sudo chmod 777 -R /var/log/spark/

  1. 将配置从 EMR 主机传输到您的 Docker 容器
EMR master           Docker container
/etc/spark/conf -->  /etc/spark/conf 
/etc/hadoop/conf/ --> /etc/hadoop/conf/
  1. 在运行时间,为将Spark作业提交到EMR集群的用户创建HDFS主目录。在以下命令中,将 spark 用户替换为您的用户名。
hdfs dfs –mkdir /user/sparkuser
hdfs dfs -chown sparkuser:sparkuser /user/sparkuser

此时,如果您按照这些步骤操作,您应该能够从 Docker 容器中 运行,它将在您的 EMR 集群上执行。

spark-submit --master yarn --deploy-mode cluster --class org.apache.spark.examples.SparkPi /usr/lib/spark/examples/jars/spark-examples.jar