我将用python编写的容器化ML作业代码放入docker容器中,并能够使用Amazon ECS作为docker服务运行。我想使用Spark-Pyspark以分布式方式运行并在Amazon EMR上部署。我可以在ECS和EMR之间建立连接吗?
答案 0 :(得分:0)
可以在此处找到配置 EC2 实例以提交到 EMR 集群的步骤:
要将 Spark 作业从远程机器提交到 EMR 集群,必须满足以下条件:
允许从远程机器到所有集群节点的网络流量。
所有 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