从ECS Docker容器运行EMR作业

aks*_*kar 9 amazon-ecs amazon-emr

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

小智 2

配置服务:

\n

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

\n\n

AWS 中运行的 docker 采用上述链接的缩短版本:

\n

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

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

    \n
  2. \n
  3. 所有 Spark 和 Hadoop 二进制文件都安装在远程计算机上。

    \n
  4. \n
  5. 远程机器上的配置文件指向EMR集群。

    \n
  6. \n
\n

解决

\n

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

\n

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

\n

安装二进制文件

\n

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

\n
    \n
  1. 选择合适的 Docker 基础镜像。

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

    \n
  4. \n
\n
/etc/yum.repos.d/emr-apps.repo\n/var/aws/emr/repoPublicKey.txt\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  • \xe2\x80\x8b 这些文件将允许访问 AWS 软件存储库
  • \n
\n
    \n
  1. 在 docker 镜像中运行以下命令来安装 Spark 和 Hadoop 二进制文件:
  2. \n
\n
sudo yum install -y hadoop-client\nsudo yum install -y hadoop-hdfs\nsudo yum install -y spark-core\nsudo yum install -y java-1.8.0-openjdk\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  • 如果上述任何操作失败,请尝试/etc/yum.repod.d/从 EMR master 复制并重新运行它们。
  • \n
\n
    \n
  1. 运行以下命令在 Docker 镜像中创建文件夹结构:
  2. \n
\n
sudo mkdir -p /var/aws/emr/\nsudo mkdir -p /etc/hadoop/conf\nsudo mkdir -p /etc/spark/conf\nsudo mkdir -p /var/log/spark/user/\nsudo chmod 777 -R /var/log/spark/\n\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  1. 将配置从 EMR master 传输到 Docker 容器
  2. \n
\n
sudo yum install -y hadoop-client\nsudo yum install -y hadoop-hdfs\nsudo yum install -y spark-core\nsudo yum install -y java-1.8.0-openjdk\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  1. 在运行时,为将 Spark 作业提交到 EMR 集群的用户创建 HDFS 主目录。在以下命令中,将 Spark 用户替换为您的用户名。
  2. \n
\n
hdfs dfs \xe2\x80\x93mkdir /user/sparkuser\nhdfs dfs -chown sparkuser:sparkuser /user/sparkuser\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
spark-submit --master yarn --deploy-mode cluster --class org.apache.spark.examples.SparkPi /usr/lib/spark/examples/jars/spark-examples.jar\n
Run Code Online (Sandbox Code Playgroud)\n