如何修改启用了高可用HDFS的NameService ID

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

Fayson的github:https://github.com/fayson/cdhproject

提示:代码块部分可以左右滑动查看噢

1.文档编写目的


启用HDFS的NameNode高可用时,需要指定一个nameservice ID。这个ID用来标识由2个NameNode组成的单个HDFS实例。默认情况下,在启用NameNode高可用时,这个nameservice ID使用的是nameservice1。在启用HA的时候,我们可以通过指定dfs.nameservices参数来设置nameservice ID,但我们一样可以在后期修改nameservice ID,即在已经成功启用HA的集群中。本文Fayson就主要介绍如何修改启用了高可用HDFS的NameService ID。因为假设你有多个集群环境的话,nameservice ID都设置为一样的,有时候往往会造成困扰。

  • 测试环境

1.RedHat7.4

2.CM/CDH5.14.2

3.集群已经启用HDFS高可用

4.集群未启用Kerberos

2.操作步骤


1.操作前我们先记录HDFS的50070页面的block数量,方便后面进行比对

2.首先我们准备好一个启用了HDFS高可用正常的集群,并查看nameservice ID当前状态是nameservice2。

一个运行正常的集群如下:

查看HDFS的nameservice ID

3.去HDFS配置项里修改nameservice ID,注意有两个地方需要修改,Fayson的环境现有的是nameservice2,我们修改为nameservice3

保存配置

4.回到CM主页,发现所有服务都需要重启,按照提示要求进行部署配置并重启所有服务。

5.等待重启完成,回到CM主页发现大量报错,主要是HDFS服务的两个FC服务都没启动成功,实际就是HDFS不可用,导致其他所有的服务都异常。

6.我们先去HDFS配置那里确认nameservice修改成功了,见下图,已经是nameservice3。

7.为什么HDFS启动失败,是因为Zookeeper里注册的HA的nameservice信息没更新的原因,我们通过进入ZK的CLI,来手动更新nameservice,如下。

/opt/cloudera/parcels/CDH/lib/zookeeper/bin/zkCli.sh
ls /hadoop-ha
rmr /hadoop-ha/nameservice2

(可左右滑动)

注意:如果删除的时候碰到以下错误

Authentication is not valid : /hadoop-ha/nameservice1/ActiveBreadCrumb

(可左右滑动)

可以在Zookeeper CLI执行以下命令:

addauth digest hdfs-fcs:PASSWORD

(可左右滑动)

如何获取该命令中的PASSWORD呢?先ssh到NameNode节点

cd /var/run/cloudera-scm-agent/process
ls -d *FAILOVERCONTROLLER

(可左右滑动)

有多个文件,进入任意一个目录都可以。

cd 689-hdfs-FAILOVERCONTROLLER/

(可左右滑动)

在core-site.xml中搜索ha.zookeeper.auth,它的值类似

digest:hdfs-fcs:Rf4qxbgoODa96rO3Zb31ND5fSOGx8g

(可左右滑动)

digers:hdfs-fcs后面你看不到的那一部分就是Zookeeper需要的PASSWORD。这里是Rf4qxbgoODa96rO3Zb31ND5fSOGx8g

然后使用addauth digest hdfs-fcs:Rf4qxbgoODa96rO3Zb31ND5fSOGx8g登录Zookeeper来删除,执行以下命令:

rmr /hadoop-ha/<nameservice_id>

(可左右滑动)

8.选择HDFS服务,选择FC角色,执行“在Zookeeper中初始化高可用状态”,HDFS > Instances > Failover Controller role > Actions >"Initialize High Availability State in Zookeeper"

选择任意一台FC服务即可。

等待执行成功

9.再次登录Zookeeper客户端可以发现已经注册了我们修改的nameservice3

10.再次重启HDFS,发现还是会报错,JournalNode的edits没有格式化。

启动失败

发现是NameNode启动失败

查看任意一个NameNode的日志,发现有以下报错。

Error: recoverUnfinalizedSegments failed for required journal (JournalAndStream(mgr=QJM to [172.31.5.38:8485, 172.31.7.193:8485, 172.31.8.230:8485], stream=null))
org.apache.hadoop.hdfs.qjournal.client.QuorumException: Got too many exceptions to achieve quorum size 2/3. 3 exceptions thrown:
172.31.8.230:8485: Journal Storage Directory /jn/nameservice3 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:2281)
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2277)
    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:1920)
    at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2275)

(可左右滑动)

11.继续在这个NameNode页面下执行操作“初始化共享编辑目录”,也可以参考Fayson之前写的文章《JournalNode的edits目录没有格式化异常分析

执行成功

12.回到CM主页再次重启HDFS服务,这次启动成功

13.注意还要更新一下Hive的元数据,先停止Hive服务。

启动Hive服务

所有集群服务恢复正常

3.修改nameservice ID后前后HDFS数据比较


再次进入HDFS的50070查看,block数量还是对的,与之前的一致。

进入命令行测试HDFS与Hive

都正常,表明修改nameservice ID成功。

提示:代码块部分可以左右滑动查看噢

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

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

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

原文发布于微信公众号 - Hadoop实操(gh_c4c535955d0f)

原文发表时间:2018-05-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Albert陈凯

Hadoop系统架构与简单介绍

Hadoop系统架构 一、Hadoop系统架构图 ? Hadoop1.0与hadoop2.0架构对比图 ? YARN架构: ResourceM...

43470
来自专栏Hadoop实操

如何使用StreamSets从MySQL增量更新数据到Hive

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 Fayson的github:https://github.com/fayson/cdhproje...

5.6K130
来自专栏实用工具入门教程

如何部署 Hadoop 集群

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。...

49420
来自专栏Hadoop实操

如何在CDH集群外配置Kerberos环境的Spark2和Kafka客户端环境

29130
来自专栏Hadoop实操

CDH高可用集群误删NameNode故障恢复

在已启用HA的CDH集群中,误删Standby Namenode服务,导致集群异常,无法再次通过CM启用HA。异常如下

881110
来自专栏个人分享

Hadoop系统架构

步骤1 用户向YARN 中提交应用程序, 其中包括ApplicationMaster 程序、启动ApplicationMaster 的命令、用户程序等。

82630
来自专栏个人分享

Hadoop on Yarn 各组件详细原理

  运行在独立的节点上的ResourceManager和NodeManager一起组成了yarn的核心,构建了整个平台。ApplicationMaster和相应...

16510
来自专栏简单聊聊Spark

Spark性能调优篇二之重构RDD架构及RDD持久化

上一篇介绍了一些关于提交Spark任务参数的调优,本片文章来聊聊一个Spark作业中RDD的重构,以及一些复用的RDD持久化的常用策略。

9620
来自专栏星汉技术

原 Spark的架构

34250
来自专栏我是攻城师

如何管理Spark Streaming消费Kafka的偏移量(一)

80070

扫码关注云+社区

领取腾讯云代金券