assert 1 == 2
上运行了一个非常简单的Python脚本。该脚本将失败,并带有AssertionError
。日志中包含包含AssertionError
的跟踪记录,该跟踪将包含(如果启用了日志)在我在设置中指定的S3存储桶中,然后当这些日志放入S3中时,我可以读取包含AssertionError
的日志。但是,这些日志在[[之前哪里存在,它们被放入S3? 我假设它们将存在于运行特定脚本的EC2实例上。假设我已经连接到该EC2实例,并且脚本运行所在的EMR步骤具有ID s-EXAMPLE
。如果我这样做:[n1c9@mycomputer cwd]# gzip -d /mnt/var/log/hadoop/steps/s-EXAMPLE/stderr.gz
[n1c9@mycomputer cwd]# cat /mnt/var/log/hadoop/steps/s-EXAMPLE/stderr
然后,我将获得一个输出,其中包含可以在EMR上访问的20/01/22 17:32:50 INFO Client: Application report for application_1 (state: ACCEPTED)
日志文件中的典型stderr
:
所以我的问题是:日志([我还浏览了stdout
)在哪里查看实际提出的AssertionError
?它被放置在我的S3存储桶中,指示脚本失败/完成后大约5-7分钟进行记录,那么在此之前它在EC2中存在什么位置?我问是因为在将这些错误日志放到S3上之前先获取这些错误日志可以节省大量时间-基本上每次我写一个失败的脚本时需要5分钟,这比我想承认的要多得多!到目前为止,我已经尝试过:
我已经尝试在上面的代码示例中的路径中检查EC2计算机上的stdout
,但是stdout
文件始终为空:] >[我要努力理解的是,如果S3分钟后有
stdout
回溯可用,AssertionError
文件如何为空(我误解了此过程的工作原理?)。我也尝试在PySpark构建的一些临时文件夹中查找,但也没有运气。另外,我已经打印了在EMR上运行的EC2实例的控制台的输出,包括核心和主控,但是它们似乎都没有我想要的相关信息。
boto3
的一些EMR方法,并尝试了此处记录的describe_step
方法:https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/emr.html#EMR.Client.describe_step-对于失败的步骤,具有FailureDetails
json dict响应。不幸的是,它仅包含一个链接到S3上LogFile
文件的stderr.gz
键(即使该文件尚不存在)和一个包含通用Message
消息的Exception in thread..
键,而不包含stdout
]。我是否对这些日志的存在有误解?如果您需要更多信息,请随时告诉我!
问题:假设我在EMR上运行了一个非常简单的Python脚本-断言1 ==2。此脚本将失败,并显示AssertionError。日志中包含回溯,该回溯包含AssertionError将是...