首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JournalNode的edits目录没有格式化异常分析

JournalNode的edits目录没有格式化异常分析

作者头像
Fayson
修改2018-04-01 18:25:46
2.5K0
修改2018-04-01 18:25:46
举报
文章被收录于专栏:Hadoop实操Hadoop实操

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 Fayson的github:https://github.com/fayson/cdhproject 提示:代码块部分可以左右滑动查看噢

1.异常描述


我们有时候通过CM启动NameNode的HA时,反正就是不知道什么原因,失败了,为了不影响集群的使用,又会通过CM把HA先取消掉。然后过了两天,又想作为一个生产系统,还是需要启用HA。于是又通过CM的界面向导想启用NameNode的HA,启用过程中,当3个JournalNode跟最开始启用失败是一样的时候,有时候在启用HA后,两个NameNode没办法正常启动,查看NameNode的日志如下:

12.10.0.51:8485: Journal Storage Directory /home/hadoop/data/dfs/jn/nameservice1 not formatted
        at org.apache.hadoop.hdfs.qjournal.server.Journal.checkFormatted(Journal.java:472)
        at org.apache.hadoop.hdfs.qjournal.server.Journal.getLastPromisedEpoch(Journal.java:245)
        at org.apache.hadoop.hdfs.qjournal.server.JournalNodeRpcServer.getJournalState(JournalNodeRpcServer.java:124)
        at org.apache.hadoop.hdfs.qjournal.protocolPB.QJournalProtocolServerSideTranslatorPB.getJournalState(QJournalProtocolServerSideTranslatorPB.java:118)
        at org.apache.hadoop.hdfs.qjournal.protocol.QJournalProtocolProtos$QJournalProtocolService$2.callBlockingMethod(QJournalProtocolProtos.java:25415)
        at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:617)
        at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1073)
        at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2217)
        at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2213)
        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:1917)
        at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2211)
        at org.apache.hadoop.hdfs.qjournal.client.QuorumException.create(QuorumException.java:81)
        at org.apache.hadoop.hdfs.qjournal.client.QuorumCall.rethrowException(QuorumCall.java:247)
        at org.apache.hadoop.hdfs.qjournal.client.AsyncLoggerSet.waitForWriteQuorum(AsyncLoggerSet.java:142)
        at org.apache.hadoop.hdfs.qjournal.client.QuorumJournalManager.createNewUniqueEpoch(QuorumJournalManager.java:183)
        at org.apache.hadoop.hdfs.qjournal.client.QuorumJournalManager.recoverUnfinalizedSegments(QuorumJournalManager.java:441)

(可左右滑动)

可以看到日志显示JN的edits目录没有格式化。此错误在你给一个HA集群想加入一个新的JournalNode,或者想迁移一个JournalNode时,都可能会出现。

2.异常解决


当你在HDFS服务中新加入一个JournalNode角色时,JournalNode角色需要的数据目录是没有被创建的。但你启用HDFS的HA后,NameNode必须需要JournalNodes都是正常的,并且可以接受edits更新,所以JN如果有问题,会直接导致NN起不来。

无论你是新装JournalNode还是迁移JournalNode角色,JN的edits目录必须格式化。格式化后会有namespace目录,并且目录里会包含正确信息的其他文件。

2.1.新装JournalNode


1.通过Cloudera Manager进入JournalNode服务,确认JN的edits目录配置,比如:

/dfs/jn

(可左右滑动)

2.登录到那台JN,备份一下旧的jn目录(如果存在)。

sudo mv /dfs/jn /dfs/jn.backup

(可左右滑动)

3.通过Cloudera Manager进入NameNode的实例界面,最好是上次那个active的NameNode。

4.执行“初始化共享Edits目录”

注意:你必须停止NameNode服务才能执行这个服务。

5.格式化JN的edits成功后,再重新启动HDFS服务。

2.2.迁移JournalNode服务


1.确认JournalNode的edits目录的位置,参数名叫dfs.journalnode.edits.dir。使用Cloudera Manager查看HDFS配置中的JournalNode可以查看该参数的配置值,如果你没有使用Cloudera Manager,则该参数一般会在hdfs-site.xml文件中。比如:

/dfs/jn

(可左右滑动)

2.登录到旧的JN节点,备份JN的edit目录,如下:

cd /dfs/jn sudo
tar czvf /tmp/jn_edits.tgz *

(可左右滑动)

3.拷贝jn_edits.tgz到新的JN节点

4.进入新的JN节点的edits目录,并解压edits文件

cd /dfs/jn 
sudo tar xzvf /tmp/jn_edits.tgz

(可左右滑动)

5.确认一下解压后文件夹,子文件夹的用户和属组,包含权限正确。

6.重启JN服务。

3.异常总结


1.请注意JN节点必须是奇数个,无论是2.1的操作还是2.2的操作,保证在所有新的JN节点上都进行了同样的操作。

2.如果你是重新启用HA,请保证之前JN节点上的旧的目录已经被你清空干净了,然后再开始重新启用HA。

提示:代码块部分可以左右滑动查看噢 为天地立心,为生民立命,为往圣继绝学,为万世开太平。 温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。

原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-03-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档