一、症状表现

前些时间公司在外省机房部署了一套新hadoop集群,所有机子都装的是centos,跑了一个礼拜莫名其妙的出现了计算节点的心跳间隔变得越来越大,最终导致计算节点挂掉,遇到问题第一时间就是看日志...

二、解决思路

(1)看NameNode日志,一切正常。

(2)看心跳间隔大的节点上的taskTracker日志,转到计算节点一切正常。

(3)看心跳间隔大的节点上的dataNode日志,转到计算节点,并没有任何异常。

我就纳了闷啦,所有节点上日志看不出有任何异常。于是去看syslog日志信息,截了一段如下(节点一的信息slave01):

都是一些系统内核运行日志,也没有任务异常信息。继续查,用lsof看看计算节点打开的文件数目,这下子惊呆了,严重超标,竟然达到了385433。打开文件数远远超出系统设定的值81920:

具体看看具体打开的都是一些什么文件(部分截图):

相当奇怪,打开的几乎都是socket文件,而且打开的socket文件数只增不减。按照正常没有任何其它占socket连接的运行程序跑的情况下各个计算节点打开的socket文件数目应该为:1(TaskTracker数)+1(dataNode数)+Child数(正在节点上运行的task数)。以节点二为例,有一个Task在跑,如下图,打开的socket文件数就应该为:1+1+1=3个。

为什么会出现这种情况,是有人写的mapreduce程序打开socket没有关闭?为了排除这种情况,在集群中用hive进行一个简单的sql查询,再观察打开的socket文件数,结果一查打开的socket文件数还是只增不减,现在可以排除人为性打开socket不关闭的情况了。回头再瞄了一眼之前那个节点一打开socket文件的截图,这时候发现这些socket文件的进程号都和节点一上的datanode进程号是一样的,一个datanode打开了这么多socket文件?。一开始以为是bug,但是其他公司用我们hadoop1.2版本的就没有这个问题,这点应该可以排除掉。

hadoop日志木有任何异常信息,系统日志木有任何信息!第一次见到种问题。上网查了下,发现有一个错误说法蛮像的,连接:http://my.oschina.net/JJREN/blog/78351,说是和centos的驱动版本有关系,于是毫不犹豫地将一台计算节点的网卡驱动升级了,再测,还是一个鸟样。这是要闹哪样啊!!!hadoop1.2在我们公司的另外一个装ubuntu集群中运行得没有任何问题,为何部署到centos上就会出现这种问题?难道是系统问题,这个一定不可能发生的,n家公司都是这个用,都没有问题。再到计算节点看看JDK版本是否一致,结果都是一致的,但是....这里高潮来了。发现了一个奇怪的问题,所有节点的JDK都是ea版的!!如图:

正常线上集群怎么装的是ea版的,这个相当不合理啊!!于是去问之前装系统的同事。他说这个JDK安装文件和另外一个部署在ubuntu的hadoop集群时的安装文件是一样的。于是,立马上上部署在ubuntu上的集群看JDK版本,一看主版本号都一样,但不是ea版本并且构建版本号不同。如图:

我就奇怪啦,同一个JDK安装文件在centos和ubuntu上安装会产生不同的版本号??(其实我怀疑是安装的同事忘了,安装文件应该是不一样的)于是将ubuntu上已经安装好的JDK复制到部署在centos上的集群,配置hadoop-env.sh文件,将hadoop的JDK环境指向新更新后非ea版的JDK。重启集群,跑任务,测试,一切正常。看打开的socket文件数,如下:

打开的socket文件数=1(DateNdoe)+7(child)+1(TaskTracker)=9个,打开的socket文件数完全正常了,并且进程号都对上了,集群也恢复正常!!!搞定收工!!!!!

三、总结

对于像这种非常规性集群出错并且没有任何日志异常信息的情况,真的不容易找到问题原因。但是解决问题的思路都是一样的,先查hadoop日志看能不能查到原因,如果查不到原因就要看借助linux自带的工具了,如lsof,strace,systat,netstat等。另外,syslog中的信息也是十分重要的,如果只看hadoop的log4j日志有可能永远都找不到故障原因,因为log4j所记录的是hadoop服务层的日志信息,它无法记录更加底层的日志信息。最后,一个程序猿的直觉也是十分重要的,在你用尽了所有你能想到的方法,查遍了网络上所有有关的信息都无法找到故障原因时,这种直觉往往会其到重要的作用,它会引导你往另外一个可能找到问题原因的方向去思考。但是我觉得这种直接不是凭空而来的,而是从日常的工作经验中积累的。

记一则神秘JDK版本引发的hadoop集群慢性崩溃”血案“相关推荐

  1. [零基础]用docker搭建Hadoop集群

    目录 前言:为什么要用docker搭建Hadoop集群? 准备:下载VMware.VMwareTools(或Xftp.Xshell).Ubuntu或者CentOS映像文件.Hadoop和jdk压缩包 ...

  2. VMware Workstation 9下基于Ubuntu 12.10服务器版本的Hadoop集群的配置

    (主要参照http://os.51cto.com/art/201211/363116.htm) 一.概述 其实,网上关于Hadoop集群的配置的资料不可谓不少,但是,细细找来,多半是在有图形桌面的环境 ...

  3. CDH版本Hadoop集群环境搭建详解

    CDH版本Hadoop集群搭建 1.CDH版本hadoop重新编译 1.1 为什么要编译? 1.2 编译环境的准备 1.3 进行编译 2.CDH版本的zookeeper环境搭建 2.1 zookeep ...

  4. Hadoop集群搭建教程(超级版本2.0)

    需要的安装包: 1.jdk压缩包 2.hadoop压缩包 百度云盘链接 开始搭建hadoop集群 1 集群规划 安装VMware,使用三台虚拟机进行集群搭建,下面是每台虚拟机的规划: 2 网络配置 2 ...

  5. 不看就亏系列!这里有完整的 Hadoop 集群搭建教程,和最易懂的 Hadoop 概念!| 附代码...

    作者 | chen_01_c 责编 | Carol 来源 | CSDN 博客 封图 | CSDN付费下载于视觉中国 hadoop介绍 Hadoop 是 Lucene 创始人 Doug Cutting, ...

  6. 大数据Hadoop集群搭建

    大数据Hadoop集群搭建 一.环境 服务器配置: CPU型号:Intel® Xeon® CPU E5-2620 v4 @ 2.10GHz CPU核数:16 内存:64GB 操作系统 版本:CentO ...

  7. Hadoop集群搭建教程(详细)

    需要的安装包: 1.jdk压缩包 2.hadoop压缩包 请前往百度云上上下载相关安装包(密码:8op1) 开始搭建hadoop集群 一.使用VMvare创建两个虚拟机,我使用的是ubuntu16.0 ...

  8. docker 安装oracle_阿里云使用Docker搭建Hadoop集群

    摘要 吐血整理,搭建了两遍,亲测可用!!! 我买的是阿里云2C4G的服务器,使用的是CentOS 7.7版本.在搭建过程中踩了不少坑,本篇文章希望对大家有用 CentOS 7.7安装Docker 查看 ...

  9. 【Big Data】HADOOP集群的配置(一)

    Hadoop集群的配置(一) 摘要: hadoop集群配置系列文档,是笔者在实验室真机环境实验后整理而得.以便随后工作所需,做以知识整理,另则与博客园朋友分享实验成果,因为笔者在学习初期,也遇到不少问 ...

最新文章

  1. ImportError: DLL load failed: 找不到指定的模块。 TensorFlow 1.13
  2. 使用Jenkins持续集成Vue项目配置Sonar任务
  3. 美国康普SYSTIMAX iPatch智能配线系统介绍
  4. SppNet 多尺度训练
  5. 涡流探伤仪计算机软件,册亨通过式涡流探伤仪涡流探伤仪保养
  6. oracle创建表空间、用户
  7. 【ElasticSearch】Es 源码之 NodeConnectionsService 源码解读
  8. 从入门到入土:FIND 企鹅好友 WHERE
  9. GT传奇3服务器架设全攻略~!(新手篇)(转)
  10. 剁手节致敬!听当年的老人讲述阿帕网(互联网前身)诞生的故事
  11. 20行代码教你如何批量提取图片中文字
  12. 正宇丨你选择了开始,就不要轻言放弃
  13. 12312312312332
  14. linux卡住重启_linux df -h 命令卡住 解决方法
  15. Android Studio 支持安卓手机投屏
  16. Firefox(火狐浏览器)丰富的Web开发辅助插件
  17. sql集合.联合查询
  18. [渝粤教育] 江西财经大学 数据新闻可视化 参考 资料
  19. c语言 is函数,关于C语言回调函数的详解~
  20. Cadence Allegro PCB设计88问解析(十四) 之 Allegro中库路径设置方法

热门文章

  1. c 字符串数组_redis为什么不直接使用C字符串,而要自定义简单动态字符串?
  2. 2020-12-28 Matlab自动化控制-Adrc自抗扰控制
  3. python中二进制文件_Python学习基础篇 -6: Python中的文件操作
  4. sess.run()详解
  5. concat函数java_MySql中CONCAT(str1,str2,...)函数
  6. java spring 上传图片,springboot 上传图片并回显
  7. android画廊效果的轮播图,轮播图(3d画廊效果)
  8. MyBatis 源码分析 - 内置数据源
  9. 七大排序算法的个人总结(二)
  10. Xftp使用教程——问答方式