Yarn聚合日志, 过期清除配置不生效

Yarn聚合日志, 过期清除配置不生效,第1张

在Yarn上开启了日志聚合, 并设置了过期清除的时间, 但是没有生效, 导致在HDFS上聚合后的日志数据过大( /tmp/logs/hdfs/logs ), 造成磁盘空间不足

前提: 配置了Jobhistory Server, 并处于启动中

Jobhistory Server使用的是mapred用户

hadoop fs chown -R mapred:supergroup /tmp/logs/hdfs

原本怀疑是Flink的log4j的配置问题, 错误日志太多导致无法回滚(这个问题在低版本的logback有出现过), 事实验证并不是

那么是否是Yarn运行中的application出现了异常, 而异常重启的次数配置的比较大, 导致不断启动新的container, 通过模拟的确会出现这个问题, 在Yarn NodeManager的 /yarn/container-logs 可看到, 但是该文件会在application停止之后进行清除, 所以也可以暂时忽略这个问题

yarn的组成可以从两个角度看待:

其中,在master node上运行 ResourceManager

每个datanode上运行一个 NodeManager

并把该dataNode上的所有计算资源(CPU、内存)视为一个/多个 Container ,而Container可以被分配执行一个task(ApplicationMaster、map task、reduce task等)。

具体可看下图:

可结合上文的理解

Container是Yarn框架的计算单元,是具体执行应用task(如map task、reduce task)的基本单位。

Container和集群节点的关系是: 一个节点会运行多个Container,但一个Container不会跨节点

一个Container就是一组分配的系统资源,现阶段只包含两种系统资源(之后可能会增加磁盘、网络等资源):

既然一个Container指的是具体节点上的计算资源,这就意味着Container中必定含有计算资源的位置信息:计算资源位于哪个机架的哪台机器上。 所以我们在请求某个Container时,其实是向某台机器发起的请求,请求的是这台机器上的CPU和内存资源

任何一个job或application必须运行在一个或多个Container中 。在Yarn框架中,ResourceManager只负责告诉ApplicationMaster哪些Containers可以用,ApplicationMaster还需要去找NodeManager请求分配具体的Container。

NodeManager进程运行在集群中的节点上,每个节点都会有自己的NodeManager。NodeManager是一个slave服务:

通过和ResourceManager配合,NodeManager负责整个Hadoop集群中的资源分配工作。

NodeManager只负责管理自身的Container,它并不知道运行在它上面应用的信息。负责管理应用信息的组件是ApplicationMaster,在后面会讲到。

ResourceManager主要有两个组件:Scheduler和ApplicationManager。

另一个组件ApplicationManager的功能如下:

ApplicationMaster运行在Container中。

ApplicationMaster的主要作用是 向ResourceManager申请资源并和NodeManager协同工作来运行应用的各个任务 然后跟踪它们状态及监控各个任务的执行,遇到失败的任务还负责重启它。

1client向yarn提交job,首先找ResourceManager分配资源,

2ResourceManager开启一个Container,在Container中运行一个Application manager

3Application manager找一台nodemanager启动Application master,计算任务所需的计算

4Application master向Application manager(Yarn)申请运行任务所需的资源

5Resource scheduler将资源封装发给Application master

6Application master将获取到的资源分配给各个nodemanager

7各个nodemanager得到任务和资源开始执行map task

8map task执行结束后,开始执行reduce task

9map task和 reduce task将执行结果反馈给Application master

10Application master将任务执行的结果反馈pplication manager。

各个组件的功能

一个Job的提交过程

>

右键 我的电脑/计算机/这台电脑>属性;进入高级系统设置>启动和故障恢复里的设置;取消勾选 将事件写入系统日志;在发生系统错误的时候,就不会有日志产生了。注:过多的系统日志说明电脑当前由于 硬件 or 软件 错误处在异常状态,关闭系统日志并不能根除 运行卡顿 的问题,推荐使用安全软件的系统修复功能,查看是否系统存在异常;另外推荐进入 控制面板\所有控制面板项\管理工具,点击 事件查看器,查看 错误 项的日志描述的是哪方面问题,方便对症下药。

如何收集SparkSteaming运行日志实时进入kafka中

我是攻城师

用过sparkstreaming的人都知道,当使用sparkstreaming on yarn模式的时候,如果我们想查看系统运行的log,是没法直接看的,就算能看也只是一部分。

这里的log分:

(1)Spark本身运行的log

(2)代码里面业务产生的log

spark on yarn模式,如果你的Hadoop集群有100台,那么意味着你的sparkstreaming的log有可能会随机分布在100台中,你想查看log必须登录上每台机器上,一个个查看,如果通过Hadoop的8088页面查看,你也得打开可能几十个页面才能看到所有的log,那么问题来了?

能不能将这个job运行所有的log统一收集到某一个目录里面呢? 如果收集到一起的话排查log就非常方便了。

答案是很遗憾,在sparkstreaming里面没法做到,因为sparkstreaming程序永远不停机,就算你开启hadoop的log聚合也没用,只有当sparkstreaming程序停掉,hadoop的log聚合才能把所有的log收集到一个目录里面,所以其他的非sparkstreaming程序,比如MR,Spark 运行完后,如果开启log聚合,hadoop会负责把运行在各个节点上的log给统一收集到HDFS上,这样的话我们查看log就非常方便了。

现在的问题是sparkstreaming不能停机,那么还能集中收集log到指定的地方吗?答案是可以的,我们使用log4j收集日志然后异步发送至kafka里面,最后再通过logstash收集kafka里面的日志进入es即可,这样一条龙服务打通之后,出现任何异常都可以非常快和方便的在es中排查问题,效率提升。至于使用logstash从kafka收集到es里面,不是本文的重点,有兴趣的参考散仙前面的文章:>

以上就是关于Yarn聚合日志, 过期清除配置不生效全部的内容,包括:Yarn聚合日志, 过期清除配置不生效、yarn详解、怎么spark on yarn的日志写文件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9439877.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存