博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hadoop系列 第一坑: hdfs JournalNode Sync Status
阅读量:4952 次
发布时间:2019-06-11

本文共 5813 字,大约阅读时间需要 19 分钟。

今天早上来公司发现cloudera manager出现了hdfs的警告,如下图:

 

解决的思路是:
1、首先解决简单的问题,查看警告提示的设置的阀值时多少,这样就可以快速定位到问题在哪了,果然JournalNode Sync Status提示最先消去;
2、然后解决Sync Status问题,首先找到提示语的解释,在官网上可见。然后查看配置参数有无问题,没问题就看log,果然在log中看到了报错信息;
3、最后可定位到该提示是由于JournalNode节点间同步文件没有保持一致,那么使用修复(优雅)或是拷贝(不优雅)的方式即可解决;
4、针对一个问题,解决的方法有多种,有的是“优雅的办法”,有的是“不优雅的办法”,不幸的是我使用了“不优雅的办法”解决了该问题。
如果哪位朋友知道怎么可以初始化JournalNode下的dfs.journalnode.edits.dir目录(把某个namenode上的namespace元数据同步到JournalNode节点上),可以告诉我哦,先谢了!
 
下面是解决问题的整个过程:
第一反应是肯定是JournalNode在同步namespace的镜像和edit log时出现了点问题,很显然是108和109两个节点上的JournalNode同步出现了问题。
我这里时配置了五个节点的JournalNode,现在有2个JournalNode出现了问题,理论上应该是warning,而不是critical。
当出现"Sync Status"、"JournalNode Sync Status"这一类提示的时候,在cloudera官网上时能找到相关解释的,例如:关于namenode的health check在的提示语在下面链接中是能找到相关说明的:
英文地址(推荐):
中文地址(有少量缺失):
我们可以找到short name为JournalNode Sync Status的描述如下:
接着在CM里找到了相关参数的设置:
HDFS --->  Configuration ---> View and Edit ---> Monitoring,在Search表单里写入"namenode_out_of_sync_journal_nodes_thresholds",可以看到配置为
 
现在的配置为从来不提示warning,只要出现JournalNode同步出现问题提示Critical,我们设置如下:
 
现在JournalNode Sync Status的警告没有了,但是Sync Status的警告还在。刚刚处理的是修改了NameNode health check的警告提示符。
 
下面来处理Sync Status警告问题:
同样的,我们找到了它的相关描述http://www.cloudera.com/content/cloudera/en/documentation/core/latest/topics/cm_ht_journalnode.html
 
通过查看这个,并没有解决服务本身问题的描述,同步时间设置为180秒,查看网络io,并没有出现负载偏高的情况。下面只有查看服务的log了:
IPC Server handler 3 on 8485, call org.apache.hadoop.hdfs.qjournal.protocol.QJournalProtocol.getEditLogManifest from 172.31.13.29:56789: error: org.apache.hadoop.hdfs.qjournal.protocol.JournalNotFormattedException: Journal Storage Directory /hadop-cdh-data/jddfs/nn/journalhdfs1 not formattedorg.apache.hadoop.hdfs.qjournal.protocol.JournalNotFormattedException: Journal Storage Directory /hadop-cdh-data/jddfs/nn/journalhdfs1 not formatted at org.apache.hadoop.hdfs.qjournal.server.Journal.checkFormatted(Journal.java:451)  at org.apache.hadoop.hdfs.qjournal.server.Journal.getEditLogManifest(Journal.java:634)      at org.apache.hadoop.hdfs.qjournal.server.JournalNodeRpcServer.getEditLogManifest(JournalNodeRpcServer.java:178)    at org.apache.hadoop.hdfs.qjournal.protocolPB.QJournalProtocolServerSideTranslatorPB.getEditLogManifest(QJournalProtocolServerSideTranslatorPB.java:196)    at org.apache.hadoop.hdfs.qjournal.protocol.QJournalProtocolProtos$QJournalProtocolService$2.callBlockingMethod(QJournalProtocolProtos.java:14094)  at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:453)       at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1002)     at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1760)     at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1756)     at java.security.AccessController.doPrivileged(Native Method)       at javax.security.auth.Subject.doAs(Subject.java:396)       at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1438)     at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1754)
IPC Server handler 4 on 8485, call org.apache.hadoop.hdfs.qjournal.protocol.QJournalProtocol.heartbeat from 172.31.9.109:53202: error: java.io.FileNotFoundException: /hadop-cdh-data/jddfs/nn/journalhdfs1/current/last-promised-epoch.tmp (No such file or directory)java.io.FileNotFoundException: /hadop-cdh-data/jddfs/nn/journalhdfs1/current/last-promised-epoch.tmp (No such file or directory)  at java.io.FileOutputStream.open(Native Method)     at java.io.FileOutputStream.
(FileOutputStream.java:194) at java.io.FileOutputStream.
(FileOutputStream.java:145) at org.apache.hadoop.hdfs.util.AtomicFileOutputStream.
(AtomicFileOutputStream.java:56) at org.apache.hadoop.hdfs.util.PersistentLongFile.writeFile(PersistentLongFile.java:75) at org.apache.hadoop.hdfs.util.PersistentLongFile.set(PersistentLongFile.java:61) at org.apache.hadoop.hdfs.qjournal.server.Journal.updateLastPromisedEpoch(Journal.java:311) at org.apache.hadoop.hdfs.qjournal.server.Journal.checkRequest(Journal.java:414) at org.apache.hadoop.hdfs.qjournal.server.Journal.heartbeat(Journal.java:397) at org.apache.hadoop.hdfs.qjournal.server.JournalNodeRpcServer.heartbeat(JournalNodeRpcServer.java:148) at org.apache.hadoop.hdfs.qjournal.protocolPB.QJournalProtocolServerSideTranslatorPB.heartbeat(QJournalProtocolServerSideTranslatorPB.java:146) at org.apache.hadoop.hdfs.qjournal.protocol.QJournalProtocolProtos$QJournalProtocolService$2.callBlockingMethod(QJournalProtocolProtos.java:14086) at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:453) at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1002) at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1760) at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1756) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:396) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1438) at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1754)
此时可以看见存放同步文件的目录/hadop-cdh-data/jddfs/nn/journalhdfs1找不到,ssh远程连入该节点查看果然没有这个目录。
到这里,基本上可以定位到问题了,解决的办法有2种:一是通过相关命令来初始化这个目录(我觉得这种方法才是解决该问题的正确方法),二是直接拷贝正常journalnode上的文件过来。
本人使用的是方法二,这里有一点需要注意,就是复制的时间不能过长,应该是不能超过journalnode_sync_status_startup_tolerance设置的值(个人理解),因为第一次打zip包下载在传到其它节点上后使用就超时了,第二次使用scp直接拷贝就可以了,命令如下:
rm -rf journalhdfs1
scp -r -i /root/xxxxxxx.pem root@ip-xxx-xx-xx-111:/hadop-cdh-data/jddfs/nn/journalhdfs1 ./
chown -R hdfs:hdfs journalhdfs1
注:在namespace元数据过大时,需要注意dfs.image.transfer.bandwidthPerSec参数的设置,它是同步数据时的带宽限制。
然后重启了这两个JournalNode(也可以先关闭,文件复制好之后启动)节点,问题解决。
 
另外,我建了个QQ群:305994766,希望对大数据、算法研发、系统架构感兴趣的朋友能够加入进来,大家一起学习,共同进步(进群请说明自己的公司-职业-昵称)

转载于:https://www.cnblogs.com/leocook/p/hadoop_faq001.html

你可能感兴趣的文章
教练技术的小应用
查看>>
.net Tuple特性
查看>>
Java基础常见英语词汇
查看>>
iOS并发编程笔记【转】
查看>>
泛型 T的定义<1>
查看>>
thinkphp dispaly和fetch的区别
查看>>
08号团队-团队任务5:项目总结会
查看>>
mybatis 插入数据 在没有commit时 获取主键id
查看>>
SQL2005 删除空白行null
查看>>
lightoj 1030 概率dp
查看>>
重新注册.NET
查看>>
Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结
查看>>
Vagrant入门
查看>>
python and 我爱自然语言处理
查看>>
第3讲:导入表的定位和读取操作
查看>>
echarts-柱状图绘制
查看>>
mysql备份与恢复
查看>>
混沌分形之迭代函数系统(IFS)
查看>>
VS2013试用期结束后如何激活
查看>>
边框圆角Css
查看>>