我在AWS EMR中运行PySpark作业。最近,我升级了(AWS EMR 6.4,Spark 3.1.2),并切换到在Docker容器中运行作业。从那以后,stdout日志中出现了以Full thread dump OpenJDK 64-Bit Server VM (25.312-b07 mixed mode)
开头的零星线程转储。
我一直无法弄清楚它们为什么会发生。stderr中没有相关的错误或警告,作业不受影响。然而,这些线程转储使得阅读标准输出日志变得困难,我一直无法弄清楚为什么会发生这些情况。我尝试过的东西包括使用AWS/EMR的早期版本和更简单的EMR配置,因为我怀疑AWS EMR正在发送SIGQUIT
,因为我在Spark源代码中没有找到任何东西可以做到这一点(除了Spark UI启动的线程转储和Spark任务读取器,它被禁用)。
在不知所措的情况下,我会辞职,指示JVM重定向这些线程转储,甚至忽略它们的信号,如果这是一个选项的话。我愿意接受其他建议。
我知道-Xrs
,但我怀疑它不是我想要的,因为它可能会杀死第一个SIGQUIT
上的进程。
1条答案
按热度按时间v6ylcynt1#
我有一个解决方案来查看示例本身或其他Unix环境上的日志。
通过将输出通过
mawk
过滤器,我们可以在阅读或跟踪日志时删除堆栈跟踪。在AWS Linux上,这要求您从Epel存储库安装
mawk
软件包。创建一个函数,创建一个tmp文件名,跟踪和过滤输入文件,并将其写入tmp文件。然后使用
less
打开tmp文件,并在用户关闭less
时删除该tmp文件。过滤器删除^Full thread dump
和^\[[0-9
之间的所有行,这对我很有效,因为我的日志以[2023-09-7 ...
开头您现在可以像这样查看日志
资料来源: