我正在使用 EMR 步骤来运行我的作业。
通常,当我想分析作业的性能或了解失败的原因时,我会查看 Spark 历史服务器以获取 DAG 可视化和作业错误等。
例如,如果作业由于堆错误或 Fetchfailed 等原因失败,我可以在 spark 历史服务器中看到它明确指定。
但是,当我查看写入 LOG URI S3 存储桶的 stderr 日志文件时,似乎无法找到此类描述。
有没有办法获得这样的信息?
我使用 pyspark
并将日志级别设置为
sc = spark.sparkContext
sc.setLogLevel('DEBUG')
对我做错了什么有任何见解吗?
答案 0 :(得分:1)
我还没有真正测试过这个,但由于评论有点长,我把它贴在这里作为答案。
就像我在评论中指出的那样,您使用 Spark History Server UI 查看的日志与从 EMR 保存到 S3 的 Spark driver logs 不同。
要将 Spark 历史服务器日志写入 S3,您必须向集群添加一些额外的配置。 Spark 文档的 Monitoring and Instrumentation 部分描述了这些配置选项。
在 AWS EMR 中,您可以尝试将这样的内容添加到您的集群配置中:
...
{
'Classification': 'spark-defaults',
'Properties': {
'spark.eventLog.dir': 's3a://your_bucket/spark_logs',
'spark.history.fs.logDirectory': 's3a://your_bucket/spark_logs',
'spark.eventLog.enabled': 'true'
}
}
...
我发现这个有趣的 post 描述了如何为 Kubernetes 集群设置它,您可能需要查看它以获取更多详细信息。