我正在使用纱线作为主集群和集群部署模式运行 AWS EMR 集群。我读过的所有教程都使用类似于以下内容的命令在所谓的"Spark Steps"中使用 AWS CLI 运行 Spark-submit:
aws emr add-steps --cluster-id j-2AXXXXXXGAPLF --steps Type=Spark,Name="Spark Program",ActionOnFailure=CONTINUE,Args=[--class,org.apache.spark.examples.SparkPi,/usr/lib/spark/lib/spark-examples.jar,10]
我的教授建议我通过SCP将文件移动到主节点,然后通过SSH运行应用程序来提交我的Spark应用程序:
ssh hadoop@ec2-xx-xxx-xxx-xx.compute-1.amazonaws.com
然后我会通过shell将数据文件放入HDFS中。最后我会简单地运行火花提交:
spark-submit --master yarn --deploy-mode cluster my_spark_app.py my_hdfs_file.csv
通过 AWS CLI 提交"Spark 步骤"与通过 SSH 在主节点中运行spark-submit
有什么区别?通过从主节点提交作业,我的 Spark 应用程序是否仍会以分布式方式运行?
提交 EMR 步骤是使用 Amazon 的自定义构建步骤提交流程,这是一个相对轻量级的包装器抽象,本身称为 spark-submit。从根本上说,几乎没有区别,但如果您希望与平台无关(不锁定到亚马逊(,请使用SSH策略或尝试更高级的提交策略,例如远程提交或我最喜欢的一种,使用Livy。