我正在尝试构建一个apachespark应用程序,用于规范hdfs中的csv文件(更改分隔符,修复虚线)。我使用log4j进行日志记录,但是所有的日志只是打印在执行器中,所以我可以检查它们的唯一方法是使用yarn logs-applicationid命令。是否有任何方法可以将所有日志(从驱动程序和执行程序)重定向到我的网关节点(启动spark作业的节点),以便在执行期间检查它们?
hivapdat1#
根据https://spark.apache.org/docs/preview/running-on-yarn.html#configuration,yarn有两种模式用于在应用程序完成后处理容器原木。如果日志聚合已打开(使用 yarn.log-aggregation-enable 配置输入 yarn-site.xml 容器日志被复制到hdfs并在本地计算机上删除。您还可以使用hdfsshell或api直接在hdfs中查看容器日志文件。它们所在的目录可以通过查看您的配置来找到( yarn.nodemanager.remote-app-log-dir 以及 yarn.nodemanager.remote-app-log-dir-suffix 在 yarn-site.xml ).我不确定工作节点的日志聚合是否实时发生!!
yarn.log-aggregation-enable
yarn-site.xml
yarn.nodemanager.remote-app-log-dir
yarn.nodemanager.remote-app-log-dir-suffix
jckbn6z72#
您应该将executors log4j props配置为编写本地文件。流回到驱动程序将导致不必要的处理延迟。如果您计划能够以近乎实时的方式“跟踪”日志,则需要使用splunk或elasticsearch等解决方案,并使用splunk forwarders、fluentd或filebeat等工具,这些工具是每个框上的代理,专门监视所有配置的日志路径,并将数据推送到目标索引器,它将解析和提取日志字段数据。现在,还有其他替代方法,如streamset、nifi或knime(全开源),它们提供了更多用于收集事件处理失败的工具,并有效地允许“死信队列”以特定的方式处理错误。我喜欢那些工具的一部分-不需要编程。
qnakjoqk3#
我认为这是不可能的。当您在本地模式下执行spark时,您可以在控制台中看到它。否则,必须更改日志文件路径的log4j属性。
3条答案
按热度按时间hivapdat1#
根据https://spark.apache.org/docs/preview/running-on-yarn.html#configuration,
yarn有两种模式用于在应用程序完成后处理容器原木。如果日志聚合已打开(使用
yarn.log-aggregation-enable
配置输入yarn-site.xml
容器日志被复制到hdfs并在本地计算机上删除。您还可以使用hdfsshell或api直接在hdfs中查看容器日志文件。它们所在的目录可以通过查看您的配置来找到(
yarn.nodemanager.remote-app-log-dir
以及yarn.nodemanager.remote-app-log-dir-suffix
在yarn-site.xml
).我不确定工作节点的日志聚合是否实时发生!!
jckbn6z72#
您应该将executors log4j props配置为编写本地文件。流回到驱动程序将导致不必要的处理延迟。
如果您计划能够以近乎实时的方式“跟踪”日志,则需要使用splunk或elasticsearch等解决方案,并使用splunk forwarders、fluentd或filebeat等工具,这些工具是每个框上的代理,专门监视所有配置的日志路径,并将数据推送到目标索引器,它将解析和提取日志字段数据。
现在,还有其他替代方法,如streamset、nifi或knime(全开源),它们提供了更多用于收集事件处理失败的工具,并有效地允许“死信队列”以特定的方式处理错误。我喜欢那些工具的一部分-不需要编程。
qnakjoqk3#
我认为这是不可能的。当您在本地模式下执行spark时,您可以在控制台中看到它。否则,必须更改日志文件路径的log4j属性。