今天登录大数据集群例行巡检突然发现出现了两个告警
查看发现是一台节点的jourmalNode webUI无法访问
俗话说:婶婶能忍叔叔也不能忍,一句话盘他
下面记录一下这次问题排查处理的过程:
- 既然说是web无法访问,那就先从前端入手,老规矩复制此链接到新的浏览器窗口打开,确实是无法访问
- 下面远程服务器命令行执行telnet 192.168.94.26 8480 测试端口号显示端口是存活的
shell> telnet 192.168.94.26 8480
- 登录这台服务命令行执行netstat -anlp |grep 8480
shell> netstat -anlp |grep 8480
看到很多进程以及需要调用JournalNodes的程序,我们来统计一下有多少进程执行命令netstat -anlp |grep 8480|wc -l
shell> netstat -anlp |grep 8480|wc -l
显示与端口8480有关联的程序存在进程数如下
4. 命令行执行jps,我们查看进程是否存在
shell> jps
发现进程是存在的
端口存活而且进程存在,但是没办法访问连接,无解。
- 排查最后一招去/var/log/hadoop/hdfs查看journalnode日志
shell> tail -n 100 hadoop-hdfs-journalnode-xxx-dev-26.log|grep ERROR
shell> tail -n 100 hadoop-hdfs-journalnode-xxx-dev-26.log|grep WARN
2020-03-05 10:34:13,321 WARN namenode.FSImage (EditLogFileInputStream.java:scanEditLog(359)) - Caught exception after scanning through 0 ops from /hadoop/hdfs/journal/xxx-ha/current/edits_inprogress_0000000000004758323 while determining its valid length. Position was 1032192
java.io.IOException: Can't scan a pre-transactional edit log.
at org.apache.hadoop.hdfs.server.namenode.FSEditLogOp$LegacyReader.scanOp(FSEditLogOp.java:4974)
at org.apache.hadoop.hdfs.server.namenode.EditLogFileInputStream.scanNextOp(EditLogFileInputStream.java:245)
at org.apache.hadoop.hdfs.server.namenode.EditLogFileInputStream.scanEditLog(EditLogFileInputStream.java:355)
at org.apache.hadoop.hdfs.server.namenode.FileJournalManager$EditLogFile.scanLog(FileJournalManager.java:551)
at org.apache.hadoop.hdfs.qjournal.server.Journal.scanStorageForLatestEdits(Journal.java:192)
at org.apache.hadoop.hdfs.qjournal.server.Journal.<init>(Journal.java:152)
at org.apache.hadoop.hdfs.qjournal.server.JournalNode.getOrCreateJournal(JournalNode.java:90)
at org.apache.hadoop.hdfs.qjournal.server.JournalNode.getOrCreateJournal(JournalNode.java:99)
at org.apache.hadoop.hdfs.qjournal.server.JournalNodeRpcServer.getEditLogManifest(JournalNodeRpcServer.java:189)
at org.apache.hadoop.hdfs.qjournal.protocolPB.QJournalProtocolServerSideTranslatorPB.getEditLogManifest(QJournalProtocolServerSideTranslatorPB.java:224)
at org.apache.hadoop.hdfs.qjournal.protocol.QJournalProtocolProtos$QJournalProtocolService$2.callBlockingMethod(QJournalProtocolProtos.java:25431)
at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:640)
at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:982)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2351)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2347)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1866)
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2345)
java.io.IOException: Can’t scan a pre-transactional edit log.
划重点找到问题原因:此节点的edit文件损坏,导致的JournalNodes Web UI无法访问
Edit文件损坏通用的解决方案是:
第一种方案
此节点的journalnode的元数据出现了问题,需要从其他正常节点的journalnode的元数据拷贝过来重启服务,同时需要注意各个文件的权限
第二种方案
先停止journalnode服务
删除此节点journalnode元数据存储路径中current文件夹中version以外的文件,重新启动journalnode
此处我们按照简单粗暴高效快速第二种方案删除处理问题。
一、在Ambari Web 界面关闭此节点的JournalNodes进程
找到此节点JournalNodes 里面选择“Turn On Maintenance Mode”然后选择“Stop”执行关闭操作
二、命令行找到此节点的edits_inprogress文件所在位置
/hadoop/hdfs/journal/xxx-ha/current/
三、小心依次对edits_inprogress、last-promised-epoch、last-writer-epoch等文件以及文件夹paxos进行删除操作
四、在Ambari Web 界面开启此节点的JournalNodes进程
找到此节点JournalNodes 选择“Start”执行开启操作,然后选择“Turn On Maintenance Mode”
五、下面见证一下我们的处理结果,这界面看着是不是就很舒服了