Yarn应用日志与Spark提交边缘节点日志区别及Yarn日志详情咨询
两类日志核心区别
- 边缘节点spark-submit重定向日志:属于提交端侧日志,内容和提交模式直接相关:如果是client模式提交Spark应用(Driver运行在边缘节点),该日志会包含提交阶段校验信息+Driver全量运行日志;如果是cluster模式提交(Driver运行在集群的Yarn容器中),该日志仅包含提交过程的输出(比如参数校验结果、Yarn连接状态、返回的应用ID信息),不会包含Driver运行时的业务日志。仅能排查提交阶段的报错,比如参数配置错误、无法连接Yarn ResourceManager、提交权限不足这类问题。
- NodeManager生成的日志:属于集群运行侧全量日志,存储在各NodeManager节点
yarn.nodemanager.log-dir配置的路径下,包含该节点上所有运行过的Yarn容器的完整输出:包括Spark Driver(cluster模式下)、所有Executor的运行日志,以及Yarn系统对容器的调度、启停记录。可以覆盖应用全生命周期的问题排查,比如Executor OOM、业务代码运行时报错、容器被Yarn强制kill等提交端日志看不到的问题,都需要从这类日志中定位根因。
Yarn应用日志详细说明
1. 存储规则
Yarn应用日志的存储分两种模式,由集群参数yarn.log-aggregation-enable控制:
- 未开启日志聚合:所有容器日志仅保留在运行该容器的NodeManager本地,默认路径为
${HADOOP_HOME}/logs/userlogs,每个应用对应独立子目录,子目录下按容器ID拆分不同日志文件,应用结束后日志按本地保留周期自动清理。 - 开启日志聚合:应用运行结束后,各NodeManager会将该应用在当前节点的所有容器日志统一上传到HDFS的指定路径(由
yarn.nodemanager.remote-app-log-dir配置),本地日志会在上传完成后删除,方便统一查询历史应用的全量日志。
2. 日志分类
每个Yarn容器的日志默认拆分三个独立文件:
stdout:记录业务代码主动打印到标准输出的内容,比如代码中调用的打印语句输出。stderr:记录业务代码抛出的未捕获异常、JVM报错(比如OOM栈信息、GC错误)、容器启动失败的报错,是排查业务运行问题最常用的日志文件。syslog:记录Yarn系统层面的容器运行信息,比如容器资源分配明细、启停时间戳、调度相关记录,通常仅排查Yarn调度层面问题时使用。
3. 常用查询命令
无需登录对应NodeManager节点,可直接在边缘节点通过Yarn自带命令查询日志:
- 查询应用全量日志:
yarn logs -applicationId <Yarn应用ID> - 仅查询Driver日志:
yarn logs -applicationId <Yarn应用ID> -containerType APPLICATIONMASTER - 仅查询Executor日志:
yarn logs -applicationId <Yarn应用ID> -containerType EXECUTOR
内容的提问来源于stack exchange,提问作者Lavanya varma
相关产品推荐
相关产品推荐

