从ECS Docker容器运行EMR作业

时间:2017-05-25 12:05:09

标签: amazon-emr amazon-ecs

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

1 个答案:

答案 0 :(得分:0)

配置服务:

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

上面链接中为在 AWS 中运行的 docker 所采用的缩短版本:

要将 Spark 作业从远程机器提交到 EMR 集群,必须满足以下条件:

  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