AWS EMR星火Python记录

问题描述 投票:14回答:3

我跑在AWS EMR一个非常简单的Spark的工作,似乎无法从我的脚本中的任何日志输出。

我试着打印到标准错误:

from pyspark import SparkContext
import sys

if __name__ == '__main__':
    sc = SparkContext(appName="HelloWorld")
    print('Hello, world!', file=sys.stderr)
    sc.stop()

并采用火花记录器如图所示here

from pyspark import SparkContext

if __name__ == '__main__':
    sc = SparkContext(appName="HelloWorld")

    log4jLogger = sc._jvm.org.apache.log4j
    logger = log4jLogger.LogManager.getLogger(__name__)
    logger.error('Hello, world!')

    sc.stop()

EMR给我的作业运行后两个日志文件:controllerstderr。无论日志包含"Hello, world!"字符串。这是我的理解stdout被重定向的火花stderr。该stderr日志显示作业被接受,运行和顺利完成。

所以我的问题是,我在哪里可以查看我的脚本日志的输出?或者我应该在我的脚本改变什么才能正确登录?

编辑:我用这个命令提交下列步骤:

aws emr add-steps --region us-west-2 --cluster-id x-XXXXXXXXXXXXX --steps Type=spark,Name=HelloWorld,Args=[--deploy-mode,cluster,--master,yarn,--conf,spark.yarn.submit.waitAppCompletion=true,s3a://path/to/simplejob.py],ActionOnFailure=CONTINUE
python apache-spark emr
3个回答
11
投票

我发现,电子病历的记录为特定的步骤几乎从来没有在得到拉一起在AWS控制台步,控制器或标准错误日志卷起。

通常我找到我想要在作业的集装箱日志(通常它在标准输出)。

这些通常是在像s3://mybucket/logs/emr/spark/j-XXXXXX/containers/application‌​_XXXXXXXXX/container‌​_XXXXXXX/...的路径。您可能需要application_...内的各种container_...containers目录内闲逛。

这最后一个容器目录下应该有一个stdout.logstderr.log


0
投票

为了捕捉脚本的输出,你可以尝试类似下面还有

/usr/bin/spark-submit --master yarn --num-executors 300 myjob.py param1 > s3://databucket/log.out 2>&1 &

这会写脚本输出到日志文件在S3位置。


0
投票

对于什么是值得的。让j-XXX是EMR集群的ID和假设它被配置为使用logs_bucket对S3持续日志。如果你想找到你的代码发出的日志,做到以下几点:

  1. 在AWS控制台中,找到您要查看步骤
  2. 去的是stderr和搜索application_。请记你找到完整的名字,它应该像application_15489xx175355_0yy5
  3. 转到s3://logs_bucket/j-XXX/containers并找到该文件夹​​application_15489xx175355_0yy5
  4. 在此文件夹,你会发现一个名为application_15489xx175355_0yy5_ww_vvvv至少一个文件夹。在这些文件夹,你会发现一个名为stderr.gz包含您的代码发出的日志文件。
© www.soinside.com 2019 - 2024. All rights reserved.