我可以使用以下命令在AWS EMR上提交spark任务。如何获取Spark作业的stdout?
aws emr add-steps --cluster-id ${CLUSTERID} \
--output json \
--steps Type=spark,Name=${JOB_NAME},Args=[--deploy-mode,cluster,--master,yarn,--conf,spark.yarn.submit.waitAppCompletion=true,--conf,spark.eventLog.enabled=true,--num-executors,1,--executor-cores,1,--executor-memory,2g,--conf,spark.eventLog.dir=${LOG_DIR},s3://bucket/${FILE_NAME},s3://bucket/${FILE_NAME}],ActionOnFailure=CONTINUE
1条答案
按热度按时间7y4bm7vi1#
在EMR上查看Spark作业的stdout时,您有几个选项。您可以在集群主节点或S3上的viewing log files上的EMR文档中查看详细信息。
编程访问
如果要以编程方式查看输出,而不连接到EMR主节点本身,则需要确保为集群启用了S3日志归档,并且您有权访问该S3位置。有两个选项。
1.您可以在
client
模式下运行Spark应用程序,并在同步后在S3中查看步骤日志。例如,如果您将EMR集群配置为将日志发送到s3://${S3_BUCKET}/logs/emr
,则步骤日志将位于s3://${S3_BUCKET}/logs/emr/${CLUSTER_ID}/steps/${STEP_ID}/
中。然后您可以将stdout.gz
复制到您的系统并gunzip
。1.如果你的Spark应用运行在
cluster
模式下,它会变得有点困难,因为你必须从Step日志中找出Yarn应用ID,然后查看发送到S3的Yarn容器日志。这仍然是可行的,你只需要多几个步骤。这些容器日志也需要更长的时间才能在S3中显示出来。第二个命令假定作业已在第一个容器上调度,并且没有失败或再次重试,因此可能需要进行调整。
控制台访问
如果您想在EMR控制台上查看日志,也有一些选项。
1.如果您使用
client
模式提交作业并且您启用了S3日志记录,则可以在EMR集群的步骤选项卡中查看步骤stdout
日志。如果您尚未启用S3日志记录,则可以使用托管应用UI。
1.集群上的应用程序UI-当集群运行时,您可以从集群的应用程序选项卡访问Spark UI。这将启动Spark历史服务器,您可以导航到您的作业,然后是Executors选项卡,然后是驱动程序的Logs列中的
stdout
链接。1.持久化应用UI-无论是在集群运行期间,还是在集群终止后的30天内,您都可以通过选择持久化应用UI选项,从集群的应用选项卡访问Spark UI。
Amazon EMR CLI访问
感谢这篇文章,我刚刚对Amazon EMR CLI做了一个修改,这使得简单的PySpark脚本很容易做到这一点。使用新的
--show-stdout
标志,你可以在EMR上运行一个本地PySpark脚本,它会显示stdout
。