重磅 解决 hadoop job 卡死 根源问题

重磅 解决 hadoop job 卡死 根源问题,第1张

做大数据&&算法 其实最重要的三件事 ,就是 管理数据 和集群运维 模型训练,一旦 远离这三个主题,大数据都无法发挥它应用的作用。

废话不多说,这几天主要是采坑了。我认为现在碰到的最要命的就是 碰到 集群 掉链此粗子 无法使用,导致 其他 同事无法运行 任务。

这几天,碰到了两次 hadoop mapreduce 卡死的现象 ,主要就是停留在 job 那里 无法进行,或者map 0 reduce 0.第一次 碰到时没有找到原因,用网上最粗暴的方法 重启了hadoop集群,暂时解决了问题

今天又碰到了同样的问题,因为 logstash一直在往hdfs上写数据,一旦重启集群可能会丢失数据,所以 一直非常谨慎,不敢 行事。希望找到最主要的原因。通过在网上查找,其实大部分是三种

1.原先配置有严重错误问题,因为之前我的集群 运行良好,现在 卡死,可能是 最近 集群状态除了问题可以排除这一条,还有就是程序本身有问题,因为同一个程序运行小数据量的正常出了结果,大数据量就job卡死掉了,说明程序本身没有问题

2.剩下的两天就是 磁盘不足了和内存 不足了

先说磁盘不足 ,其实这个是半真半假的事情,我们三个 DataNode节点的 各有 12T 的数据存放 磁盘,12块1024G的磁盘构成,但是 系统盘 只有区区 60G,

内存不足 ,也是一个半真半假的事情,每个节点 12G 内存,三个节点36G,每个节点 cpu 六核。

为了确定问题的根源,只能先看 hadoop的logs 日志,Master 和 DataNode的logs 都看了,但是都没有找到具体的原因,有点沮丧,后来 就去手烂分析 job 执行 的网页状态,job状态也没有发现太多问题,因为 job卡死,很多job 就直接被 hadoop job -kill job_id 掉了

后来就看 集群状态图,发现一些猫腻。 CPU total 变成0 了,memery也是 0,接着再看,发现 node unhealthy 出现了 3,

点开一看,三个数据节点都是unhealthy的。

那么 这个unhealthy 是一个更明晰的问题特征,

接着就跟着往深里 找原因,出现 unhealthy 两种原因,1. 节点通信故障 ,因为hdfs 一直在写数据 很正常,可以排除

2。磁盘 真的 不足了,但是我的节点12个磁盘都是在没有超过80%呀,只有系森薯镇统盘超过了90%,难道hadoop 连系统盘都算是检查的盘,好吧,可能是,之后就按网上的以解决磁盘不足导致job卡死。

主要是 hadoop 默认检查 磁盘状况,一旦超过默认的90%就会 导致 数据节点拒绝执行mapreduce,通过在yarn-site.xml 设置 更大的阈值,延迟 节点拒绝mapreduce的情况。通过在其中添加

<property><name>yarn.nodemanager.disk-health-checker.min-healthy-disks</name><value>0.0</value></property><property><name>yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage</name><value>100.0</value></property>

集群也没有重启,Master和数据节点 四个机器都修改了,然后就生效。所以说 有些配置可以不重启集群实现的。

如果要重启,网上给出 只用重启 NodeManager 和Resourcemannager

`

3.1 重启nodemanager:

/usr/local/goldmine/hadoop/default/sbin/yarn-daemon.sh stop nodemanager

/usr/local/goldmine/hadoop/default/sbin/yarn-daemon.sh start nodemanager

3.2 重启resourcemanager,(否则会导致修改的节点状态错乱)

/usr/local/goldmine/hadoop/default/sbin/yarn-daemon.sh stop resourcemanager

/usr/local/goldmine/hadoop/default/sbin/yarn-daemon.sh start resourcemanager

3.3 刷新 http://hadoop/cluster/nodes/unhealthy 页面: 可以看到不健康的nodemanager已经消失在列表了。3.4 命令显示yarn各节点状态:

yarn node -list -all

`

也定位到了原来是系统磁盘惹得鬼,下次在建hadoop集群,系统磁盘也一定要足够大,不然会严重影响集群的稳定。

之后执行job 完美执行了,再看系统盘也恢复到40%一下,刚才主要是系统盘有一些【临时文件】导致的。

之后发现 job 又卡死了,但是这次是卡死在 map12 reduce0中,好诡异,之前 发生了一件事情,map60% 后,竟然回滚了到了map 0,接着卡死。再次查看系统盘,又 飙到了97% 99% 96%,因为系统盘无法 扩容,这可咋整。

那我们就要想想 为什么 系统盘会突然猛增大量的临时文件 挤占磁盘空间,为什么 为什么!!!!!!,想了半天我终于知道了,这和hadoop的mapreduce 原理有关,如果是spark就不会出现这种情况,更多的是内存不足,hadoop 的mapreduce 在map的中间结果会保留在磁盘上,而spark的中间结果会放在内存里,所以更快更吃内存。

正是因为hadoop的中间结果保存在了磁盘上,导致猛增大量临时文件。好,现在问题的根源找到了,就是mapreduce 的中间文件太大影响了 磁盘空间 导致节点拒绝服务,内存 和CPU 拒绝提供 都为 0, 导致 没有资源,job 卡死。也说明了,为啥 小数据量程序正常,大数据量了反而 job卡死,正是因为 数据量越大 中间结果就更多,挤占磁盘就更多。

但是我们 执行mapreduce就是要产生中间文件的,这个是源码规定 适合hadoop运行保障的,不可以修改,那么 既然中间临时文件必须产生,主要就是把中间文件放在哪里,可以保障 挤占磁盘的百分比更小,当然是更大的磁盘了,我们的最小磁盘是系统盘,所以最容易增长百分比,job卡死,所以我们要用最大的盘 保留 中间结果,我们最大的盘是1024G,就用这个就可以了,然后就是设置 mapreduce中间结果路径,在配置文件里,到这里,问题就等于从根源上解决了。

hadoop 2.8.1 需要在 mapred-site.xml 设置 map.local.dir 和

map.tmp.dir 属性对应的 磁盘目录

1,启动失败

问题描州激述:在master上运行start-all.sh之后提示Caused by: java.net.URISyntaxException: Illegal character in authority at index 7: hdfs://master:9000,导致secondarynamenode无法启动。

问题原因:core-site.xml中<value>hdfs://master:9000 </value>多了一个空格。

解决方法:去掉多余空格。记得更新到其他slave节点,否则slave节点的相关进程会无法启动。

2,停止失败

问题描述:运行stop-all.sh之后使用jps依然能查看到jobtracker、namenode等进程。

问题原因:/tmp目录下有以前使用其他版本留下的文件没有删除。

解决方法:su到root用户,删除tmp目录下的所有文件。

3,启动失败

问题描述:在master上运行start-all.sh之后提示java.net.BindException。

问题原因:端口被占。

解决方法:lsof -i:9000等在conf中配置的端口,如果弯大找到相应的进程,用kill命令杀掉即可。

4,启动失败

问题描述:slave上的datanode和tasktracker无法成功启动,日志中提示册闹袜No route to host。

问题原因:master上的防火墙阻止连接。

解决办法:

1. turn off the firewall

sudo service iptables stop

2. allow the traffic in port 9000

sudo iptables -A INPUT -p tcp --dport 9000 -j ACCEPT

sudo /etc/rc.d/init.d/iptables save

sudo service iptables restart

5,使用失败

问题描述:用hadoop fs -put file命令时,提示could only be replicated to 0 nodes, instead of 1

问题原因:slave上的防火墙阻止连接

解决办法:同4,注意:用sudo命令运行service时密码是当前用户的密码。

6,使用失败

问题描述:slave的reduce一直在copy数据,不能动。

问题原因:/etc/hosts配置中被系统自动加入一行192.168.100.134slave1 # Added by NetworkManager,覆盖了手动配置的映射。

解决办法:注释该配置即可

1、果断看你的后台在master.....log日志文件中的日志输出,拦衡它会告诉你原因。

2、学hadoop的时候,配置项和知识点很多,个人遇到的也不一样,但解决问题不变的原简孙做则就是出现问题先找日志。只要细心和专业点,都能独立凯乎解决点这个问题。


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

原文地址: http://outofmemory.cn/yw/12235129.html

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

发表评论

登录后才能评论

评论列表(0条)

保存