Hadoop-Namenode
# 如何通过 Ambari 配置 Hadoop Namenode 高可用
在本篇文章中,我们将通过 Ambari 配置 Hadoop Namenode 高可用 (HA)。Namenode 高可用是 HDFS 中确保高可用性的关键步骤,可以避免单点故障,确保 Hadoop 集群的持续运行。我们将通过以下步骤完成配置。
# 1. 进入 HDFS 服务
首先,进入 Ambari 管理界面,找到 HDFS 服务并点击进入。
提示
确保你的集群已经安装并配置好 HDFS 服务。如果没有,可以参考其他相关文档进行安装。
# 2. 点击开启 Namenode HA
在 HDFS 页面右上角,找到并点击 Actions 按钮,在下拉菜单中选择 Enable Namenode HA(开启 Namenode 高可用)。
注意
开启 Namenode HA 时,集群将会经历一段时间的停机,请提前规划并通知相关人员。
# 3. 配置 Nameservice ID
在弹出的 Namenode HA Wizard 页面中,输入 Nameservice ID,通常我们可以使用类似 TT-Bigdata
的命名。输入完毕后,点击 Next。
提示
如果你的集群中没有安装 HBase,可以直接跳过相关步骤,进入下一步。
# 4. 配置节点
在选择节点页面,你需要为 Current NameNode 和 Additional NameNode 选择合适的节点。确保为你的集群选择一个额外的 NameNode 节点,并为 JournalNode 节点配置对应的机器。
警告
确保为每个节点配置正确的角色,避免由于配置错误导致集群无法正常运行。
# 5. 配置检查点
系统会提示你手动创建检查点。在创建检查点之前,请先确保你的 NameNode 处于 SafeMode 状态,然后运行以下命令:
su hdfs
hdfs dfsadmin -safemode enter
hdfs dfsadmin -saveNamespace
2
3
执行成功后,界面上的按钮将会更新为 "Checkpoint created",然后你可以继续下一步。
# 6. 初始化 JournalNode
在 Namenode HA Wizard 页面中,你将看到 JournalNode 未初始化的提示。你需要在 hadoop1 节点上执行以下命令来初始化:
su hdfs
hdfs namenode -initializeSharedEdits
2
执行后,界面上的提示会更新为 JournalNode initialized。
# 7. 启动组件
当所有配置完成并且检查点创建成功后,你可以点击 Start Components 按钮,启动 ZooKeeper 和 NameNode 服务。确保它们的状态为 Started。
# 8. 格式化 ZooKeeper 和 Namenode
在 hadoop1 节点上,你需要格式化 ZooKeeper:
su hdfs
hdfs zkfc -formatZK
2
此时,你会看到 ZooKeeper 格式化成功的日志。
23/03/02 18:17:10 INFO zookeeper.ClientCnxn: Opening socket connection to server hadoop1/192.168.3.1:2181. Will not attempt to authenticate using SASL (unknown error)
23/03/02 18:17:10 INFO zookeeper.ClientCnxn: Socket connection established, initiating session, client: /192.168.3.1:54620, server: hadoop1/192.168.3.1:2181
23/03/02 18:17:10 INFO zookeeper.ClientCnxn: Session establishment complete on server hadoop1/192.168.3.1:2181, sessionid = 0x100006b97c70000, negotiated timeout = 10000
23/03/02 18:17:10 INFO ha.ActiveStandbyElector: Session connected.
23/03/02 18:17:10 INFO ha.ActiveStandbyElector: Successfully created /hadoop-ha/TT-Bigdata in ZK.
23/03/02 18:17:10 INFO zookeeper.ZooKeeper: Session: 0x100006b97c70000 closed
23/03/02 18:17:10 WARN ha.ActiveStandbyElector: Ignoring stale result from old client with sessionId 0x100006b97c70000
23/03/02 18:17:10 INFO zookeeper.ClientCnxn: EventThread shut down for session: 0x100006b97c70000
23/03/02 18:17:10 INFO tools.DFSZKFailoverController: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down DFSZKFailoverController at hadoop1/192.168.3.1
************************************************************/
2
3
4
5
6
7
8
9
10
11
12
# 9. 初始化 Standby NameNode
接下来,在 hadoop2 节点上,你需要运行以下命令来初始化 Standby NameNode:
su hdfs
hdfs namenode -bootstrapStandby
2
执行此命令后,Standby NameNode 将会初始化,状态会更新为 Standby。
23/03/02 18:21:01 INFO namenode.NameNode: createNameNode [-bootstrapStandby]
23/03/02 18:21:01 INFO ha.BootstrapStandby: Found nn: nn1, ipc: hadoop1/192.168.3.1:8020
23/03/02 18:21:02 INFO common.Util: Assuming 'file' scheme for path /hadoop/hdfs/namenode in configuration.
23/03/02 18:21:02 INFO common.Util: Assuming 'file' scheme for path /hadoop/hdfs/namenode in configuration.
=====================================================
About to bootstrap Standby ID nn2 from:
Nameservice ID: TT-Bigdata
Other Namenode ID: nn1
Other NN's HTTP address: http://hadoop1:50070
Other NN's IPC address: hadoop1/192.168.3.1:8020
Namespace ID: 283775065
Block pool ID: BP-606524264-192.168.3.1-1743931892386
Cluster ID: CID-d7e4b39a-f835-40ac-915f-b1ccbbd9607f
Layout version: -66
isUpgradeFinalized: true
=====================================================
23/03/02 18:21:02 INFO common.Storage: Storage directory /hadoop/hdfs/namenode has been successfully formatted.
23/03/02 18:21:02 INFO common.Util: Assuming 'file' scheme for path /hadoop/hdfs/namenode in configuration.
23/03/02 18:21:02 INFO common.Util: Assuming 'file' scheme for path /hadoop/hdfs/namenode in configuration.
23/03/02 18:21:02 WARN common.Storage: set restore failed storage to true
23/03/02 18:21:02 INFO namenode.FSEditLog: Edit logging is async:true
23/03/02 18:21:02 INFO namenode.TransferFsImage: Opening connection to http://hadoop1:50070/imagetransfer?getimage=1&txid=8&storageInfo=-66:283775065:1743931892386:CID-d7e4b39a-f835-40ac-915f-b1ccbbd9607f&bootstrapstandby=true
23/03/02 18:21:02 INFO common.Util: Combined time for file download and fsync to all disks took 0.00s. The file download took 0.00s at 0.00 KB/s. Synchronous (fsync) write to disk of /hadoop/hdfs/namenode/current/fsimage.ckpt_0000000000000000008 took 0.00s.
23/03/02 18:21:02 INFO namenode.TransferFsImage: Downloaded file fsimage.ckpt_0000000000000000008 size 624 bytes.
23/03/02 18:21:02 INFO ha.BootstrapStandby: Skipping InMemoryAliasMap bootstrap as it was not configured
23/03/02 18:21:02 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at hadoop2/192.168.3.2
************************************************************/
[hdfs@hadoop2 root]$
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 10. 完成设置
等待所有服务启动并完成初始化后,你会看到 Namenode HA 设置完成的提示。此时,你可以点击 Done 按钮完成配置。
# 11. 验证高可用性
回到 Ambari 首页,你会看到 HDFS 服务的 Active NameNode 和 Standby NameNode 都已成功启动,并且高可用配置已经生效。
至此,我们已经成功完成了 Hadoop Namenode 高可用 配置,确保了 HDFS 的高可用性。