hadoop namenode ha--手动切换

在参考本手册前请确保Hadoop中HDFS组件已经成功部署并正常运行,同时系统基本环境完备,包括ssh免密码登录、/etc/hosts等。

         假设目前NameNode在服务器namenode1上运行,服务器namenode2作为standbynamenode,确保namenode2上至少已经安装了namenode服务。

         操作过程中尽量避免使用root用户操作,这里假设使用hadoop用户操作,具体部署步骤如下:

1.        关闭所有节点上的HDFS进程,主要是namenode1上的namenode和datanode进程。

2.        修改系统配置文件core-site.xmlhdfs-site.xml

  •  hdfs-site.xml中添加:

<!-- HA Setup Head !-->  

         <property>

           <name>dfs.nameservices</name>

           <value>mycluster</value>

         </property>

        

         <property>

           <name>dfs.ha.namenodes.mycluster</name>

           <value>nn1,nn2</value>

         </property>

        

         <property>

           <name>dfs.namenode.rpc-address.mycluster.nn1</name>

           <value> namenode1:8020</value>

         </property>

         <property>

           <name>dfs.namenode.rpc-address.mycluster.nn2</name>

           <value> namenode2:8020</value>

         </property>

        

         <property>

           <name>dfs.namenode.shared.edits.dir</name>

           <value>qjournal://namenode1:8485;namenode2:8485/mycluster</value>

         </property>

        

         <property>

           <name>dfs.client.failover.proxy.provider.mycluster</name>

           <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

         </property>

        

         <property>

           <name>dfs.ha.fencing.methods</name>

           <value>sshfence</value>

         </property>

         <property>

           <name>dfs.ha.fencing.ssh.private-key-files</name>

           <value>/home/hadoop/.ssh/id_rsa</value>

         </property>

    <property>

           <name>dfs.ha.fencing.ssh.connect-timeout</name>

           <value>30000</value>

         </property>

        

         <property>

           <name>dfs.journalnode.edits.dir</name>

           <value>/path/to/hdfs/jn</value>

         </property>

        

<!-- HA Setup End !-->     

  • core-site.xml中修改

fs.default

hdfs://mycluster

注意:这些更改需要更新到每个运行HDFS进程的节点。

其中,namenode1和namenode2在hdfs-site.xml中有一项配置不同:

服务器

配置项

namenode1

dfs.namenode.http-address

namenode1:50070

namenode2

dfs.namenode.http-address

namenode2:50070

3.        分别在namenode1和namenode2上启动journalnode:

$HADOOP_HOME/sbin/hadoop-daemon.sh start  journalnode

4.        在namenode1上对journalnode的共享数据进行初始化,然后启动namenode进程:

$HADOOP_HOME/bin/hdfsnamenode  -initializeSharedEdits

$HADOOP_HOME/sbin/hadoop-daemon.sh start  namenode

5.        在namenode2上同步journalnode的共享数据,然后启动namenode进程:

$HADOOP_HOME/bin/hdfsnamenode  -bootstrapStandby

$HADOOP_HOME/sbin/hadoop-daemon.sh start  namenode

6.        分别在namenode1和namenode2中启动datanode:

$HADOOP_HOME/sbin/hadoop-daemon.sh  start datanode

7.        此时如果通过网页访问两个namenode的http-address,可以看到两个namenode都是standby状态,也可以通过hadoop自带的命令行工具来查看状态:

$HADOOP_HOME/bin/hdfs  haadmin -getServiceState  nn1

注意:此处的nn1为在hdfs-site.xml中配置的namenode服务的名称。

8.        确定要转为active的namenode的id,这里将namenode1设为active,使用命令行工具进行状态切换:

$HADOOP_HOME/bin/hdfs  haadmin -failover --forcefence --forceactive  nn2  nn1

注意:此处“nn2  nn1”的顺序表示active状态由nn2转换到nn1上(虽然nn2在转化前也是standby状态)。

9.        上一步中把namenode1的状态切换为active后,系统自动把namenode2上的namenode进程关闭,再把错误原因排除后重启该namenode进程,启动后该namenode状态为standby,等待下一次namenode1出现故障时即可将namenode2状态切换为active,使用命令行工具:

$HADOOP_HOME/bin/hdfs  haadmin -failover --forcefence --forceactive  nn1  nn2

         相应的,转换完以后namenode1上的namenode进程被关闭,需要排除故障后重新启动。

 

        

参考本手册操作过程中,如遇实际错误,请自行查阅相关日志文件排除错误。
### Hadoop NameNode 主从切换相关命令 在Hadoop 2.0版本引入了NameNode高可用(HA)机制,解决了单点故障问题。通过配置Active和Standby两个NameNode实例,当Active NameNode发生故障时,可以快速切换到Standby NameNode继续提供服务[^1]。 以下是实现Hadoop NameNode主从切换的关键步骤及相关命令: #### 1. 启动ZKFC(ZooKeeper Failover Controller) ZKFC负责监控NameNode的状态并触发主从切换。需要分别在两台NameNode所在的服务器上启动ZKFC: ```bash hdfs --daemon start zkfc ``` #### 2. 手动触发主从切换 可以通过以下命令手动将当前的Active NameNode转换为Standby状态或将Standby NameNode提升为主节点: ```bash # 将指定NameNode设置为Active状态 hdfs haadmin -failover nn1 nn2 # 查看当前NameNode的状态 (Active 或 Standby) hdfs haadmin -getServiceState nn1 ``` #### 3. 自动化故障转移配置 为了支持自动化故障转移,需启用Zookeeper集群,并修改`hdfs-site.xml`中的相关参数: ```xml <property> <name>dfs.nameservices</name> <value>mycluster</value> </property> <property> <name>dfs.ha.namenodes.mycluster</name> <value>nn1,nn2</value> </property> <property> <name>dfs.namenode.rpc-address.mycluster.nn1</name> <value>bigdata01:8020</value> </property> <property> <name>dfs.namenode.rpc-address.mycluster.nn2</name> <value>bigdata02:8020</value> </property> <property> <name>dfs.client.failover.proxy.provider.mycluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> </property> <property> <name>dfs.journalnode.edits.dir</name> <value>/path/to/journalnode/edits</value> </property> ``` 上述配置中定义了多个NameNode以及它们之间的通信方式,还指定了用于同步EditLog的日志管理器路径[^4]。 #### 4. 初始化共享存储 初始化Journal Node以确保两个NameNode能够访问同一个编辑日志副本: ```bash hdfs namenode -format hdfs namenode -bootstrapStandby hdfs dfsadmin -safemode leave ``` 以上操作完成后即可完成基本的HA环境搭建工作[^3]。 ### 注意事项 - 如果Secondary NameNode被用来备份数据,则应将其部署于不同于Primary NameNode物理位置之上以防止单一硬件失效影响整个系统运行状况[^2]。 - Quorum Journal Manager(QJM)采用Paxos算法保障多份复制间的一致性更新行为。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值