我正在尝试为 Spark 流应用程序设置集中式日志记录。我的具体用例是将驱动程序和执行程序日志导出到 AWS CloudWatch 日志,但我认为我的部分问题与 CloudWatch 日志和 EMR 无关。
感谢 在 Yarn 上运行 Spark / 调试应用程序,我知道如何传入我自己的 log4j 配置文件,甚至
spark.yarn.app.container.log.dir
也可用。我已经能够让每个执行程序登录到本地文件,并在每个实例上运行 CloudWatch 日志代理,以将本地文件发布到 CloudWatch 日志中。
此设置的问题是来自所有执行器的日志是混合的。不可能知道哪个执行者产生了哪个事件。我想将执行者 ID 等内容添加到 CloudWatch 流名称或直接添加到日志中。但是我不知道如何将该信息从 Spark 注入到 log4j。
我快速查看了
ExecutorRunnable.scala
,但未能找到合适的环境变量或系统属性。您知道有什么房产可以满足我的需要吗?人们如何处理这个问题? (即使是在 ELK 堆栈或其他任何东西上)
您是否找到了将执行者 ID 之类的内容添加到 CloudWatch 流名称的解决方案?谢谢!