【发布时间】:2017-10-26 02:01:45
【问题描述】:
我已将用 python 编写的 ML 作业代码容器化到一个 docker 容器中,并且能够使用 Amazon ECS 作为 docker 服务运行。我想使用 Spark - Pyspark 以分布式方式运行并部署在 Amazon EMR 上。我可以在 ECS 和 EMR 之间建立连接吗?
【问题讨论】:
标签: amazon-emr amazon-ecs
我已将用 python 编写的 ML 作业代码容器化到一个 docker 容器中,并且能够使用 Amazon ECS 作为 docker 服务运行。我想使用 Spark - Pyspark 以分布式方式运行并部署在 Amazon EMR 上。我可以在 ECS 和 EMR 之间建立连接吗?
【问题讨论】:
标签: amazon-emr amazon-ecs
可在此处找到配置 EC2 实例以提交到 EMR 集群的步骤:
要从远程机器向 EMR 集群提交 Spark 作业,必须满足以下条件:
允许从远程机器到所有集群节点的网络流量。
所有 Spark 和 Hadoop 二进制文件都安装在远程计算机上。
远程机器上的配置文件指向 EMR 集群。
确认允许从远程机器到所有集群节点的网络流量
如果您将 EC2 实例用作远程机器或边缘节点:允许从该实例的安全组到每个集群节点的安全组的入站流量。 如果您使用自己的计算机:允许从您的计算机 IP 地址到每个集群节点的安全组的入站流量。 在远程机器上安装 Spark 和其他依赖的二进制文件
要安装二进制文件,请从 EMR 集群的主节点复制文件,如以下步骤所述。这是确保 EMR 集群和远程计算机上安装相同版本的最简单方法。
选择合适的 Docker 基础镜像。
amazonlinux:2 镜像,可以在这里找到https://hub.docker.com/_/amazonlinux。将以下文件从 EMR 集群的主节点复制到 docker 映像。不要更改文件夹结构或文件名。
/etc/yum.repos.d/emr-apps.repo
/var/aws/emr/repoPublicKey.txt
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
/etc/yum.repod.d/ 并重新运行它们。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/
EMR master Docker container
/etc/spark/conf --> /etc/spark/conf
/etc/hadoop/conf/ --> /etc/hadoop/conf/
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
【讨论】: