背景
启用HDFS的NameNode高可用时,需要指定一个nameservice ID。这个ID用来标识由2个NameNode组成的单个HDFS实例。默认情况下,在启用NameNode高可用时,这个nameservice ID使用的是nameservice1。在启用HA的时候,我们可以通过指定dfs.nameservices参数来设置nameservice ID,但我们一样可以在后期修改nameservice ID,即在已经成功启用HA的集群中。
集群规划时未考虑新旧集群互通互联的问题,故没有在NameService ID和kdc relam上做区分,该隐患会在集群数据互通时体现。比如如下场景,distcp无法通过NameService ID以高可用的方式进行数据迁移,relam的重名将会导致集群间互信的配置变得难以执行。因为本集群存在NameService ID重名问题,故本次操作只修改NameService ID。
实操步骤
1.停止集群
通过运维管理平台停止hdfs集群
2.修改hdfs配置文件
将hdfs-site.xml拷贝到nodepad++中批量处理。替换ns名称。
批量查找ctyunns1替换成dmns2,批量查找ctyunns替换成dmns1。
将hdfs-site.xml拷贝回hadoop01节点,文件为/tmp/hdfs-site.xml
执行如下命令进行文件比对
# vimdiff /tmp/hdfs-site.xml /etc/hadoop/conf/hdfs-site.xml
得到如下比对结果
根据高亮提示在翼MR运维管理平台上修改配置文件
修改完成后进行配置同步
3.jourlnode修改editlog目录
此次操作同步修改journalnode数据目录到数据盘中。
# cp -a /software/hadoop/hdfs/journal/ /data01/hadoop/hdfs/
修改edits目录对应的nameservice名称。
[root@bigdata-gx-nn-hadoop-03 journal]# cd /data01/hadoop/hdfs/journal/
[root@bigdata-gx-nn-hadoop-03 journal]# ls
ctyunns ctyunns1
[root@bigdata-gx-nn-hadoop-03 journal]# mv ctyunns dmns1
[root@bigdata-gx-nn-hadoop-03 journal]# mv ctyunns1 dmns2
[root@bigdata-gx-nn-hadoop-03 journal]# ls
重复执行如上步骤修改所有的journalnode节点。
4.通过进入ZK的CLI,来手动更新nameservice,如下。
访问zkcli
# ./zkCli.sh -server bigdata-gx-nn-hadoop-01
删除nameservice对应的znode
[zk: bigdata-gx-nn-hadoop-01(CONNECTED) 10] deleteall /hadoop-ha/ctyunns
[zk: bigdata-gx-nn-hadoop-01(CONNECTED) 11] deleteall /hadoop-ha/ctyunns1
5.格式化zkfc
分别登录两组namenode的主节点执行格式化操作。
[root@bigdata-gx-nn-hadoop-01 bin]# ./hdfs zkfc -formatZK
[root@bigdata-gx-nn-hadoop-03 bin]# ./hdfs zkfc -formatZK
提示如下信息表示格式化成功
关联集群配置更新
1.yarn集群配置更新
修改mapred-site.xml
mapreduce.job.hdfs-servers
hdfs://dmns1,hdfs://dmns2,hdfs://dfsrouter
同步配置,重启yarn集群。
2.hive集群配置更新
更新hive元数据
3.spark集群配置更新
更新
spark.yarn.access.hadoopFileSystems hdfs://dmns1,hdfs://dmns2,hdfs://dfsrouter
spark.eventLog.dir=hdfs://dmns1/spark3-history/
spark.history.fs.logDirectory=hdfs://dmns1/spark3-history/
4.trino集群配置更新
5.重启kyuubi
墨子配置
1.修改HDFS目录浏览器配置
修改tenant数据库hdfs_config表
mysql> use mozi_tenant
mysql> update hdfs_config set namespaces='["dmns1", "dmns2"]' where id=1;
2.重新启用HDFS目录浏览器