登 录
注 册
< 大 数 据
Flink
Hadoop
Spark
Hive
HBase
Kafka
其他框架
Kerberos服务介绍与部署
Hadoop HA简介
HDFS手动故障转移
HDFS手动故障转移示例
HDFS自动故障转移
YARN自动故障转移
Hadoop白名单与扩容
HDFS存储优化-纠删码
HDFS冷热存储分离
HDFS慢磁盘监控
HDFS小文件归档
源码分析-NN启动(一)
源码分析-NN启动(二)
源码分析-NN启动(三)
热门推荐>>>
中台架构
中台建设与架构
HBase
HBased对接Hive
Linux
Nginx高可用
Python
数据导出工具
Flink
3分钟搭建Flink SQL测试环境
Kafka
Kafka对接Flume
深度学习
卷积神经网络
数据结构与算法
选择合适的算法
MySQL
数据备份恢复
计算机系统
信号量同步线程
Hive
Hive调优参数大全
其他框架
Azkaban Flow1.0与2.0
ClickHouse
表引擎-其他类型
技术成长
最好的职业建议
精选书单
技术成长书单—机器学习
技术资讯
数据在线:计算将成为公共服务
开发工具
IntelliJ IDEA 20年发展回顾(二)
系统工具
Mac命令行工具
虚拟化
内存虚拟化概述
云原生
云原生构建现代化应用
云服务
一文搞懂公有云、私有云...
Java
Spring Boot依赖注入与Runners
Go
Go函数与方法
SQL
SQL模板
安全常识
一文读懂SSO
当前位置:
首页
>>
Hadoop
>>
HDFS手动故障转移
HDFS手动故障转移
2020-07-03 13:48:58 星期五 阅读:2161
以下所有配置均来自Hadoop官网:https://hadoop.apache.org/docs/r2.7.2/ Hadoop版本:2.7.2 官网原话:在高可用集群中,standby节点也可以做NameNode命名空间状态的checkpoint,所以没必须再配置Secondary Namenode。即HA集群中不需要配置Secondary NameNode进程。 ####配置HDFS `vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml` ``` <!-- HDFS复制系数 --> <property> <name>dfs.replication</name> <value>3</value> </property> <!-- 对外暴露的hdfs服务名称 --> <property> <name>dfs.nameservices</name> <value>mycluster</value> </property> <!--指定集群中两个namenode的名称--> <property> <name>dfs.ha.namenodes.mycluster</name> <value>nn1,nn2</value> </property> <!--指定两台NameNode通信地址--> <property> <name>dfs.namenode.rpc-address.mycluster.nn1</name> <value>machine1.example.com:8020</value> </property> <property> <name>dfs.namenode.rpc-address.mycluster.nn2</name> <value>machine2.example.com:8020</value> </property> <!--指定两台NameNode的web端口--> <property> <name>dfs.namenode.http-address.mycluster.nn1</name> <value>machine1.example.com:50070</value> </property> <property> <name>dfs.namenode.http-address.mycluster.nn2</name> <value>machine2.example.com:50070</value> </property> <!--指定两台NameNode的共享edits文件路径(至少三台journal node)--> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://node1:8485;node2:8485;node3:8485/mycluster</value> </property> <!--当一个NameNode挂掉后,启动另一个NameNode所需要的代理类--> <property> <name>dfs.client.failover.proxy.provider.mycluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <!-- 配置两台NameNode隔离机制 --> <property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> </property> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/home/exampleuser/.ssh/id_rsa</value> </property> <!-- 关闭权限检查(在公司中不会这么做,而是针对具体的Linux用户配置权限) --> <property> <name>dfs.permission.enable</name> <value>false</value> </property> ``` ####文件系统配置 `vim $HADOOP_HOME/etc/hadoop/core-site.xml` ``` <!-- 指定NameNode的地址,注意mycluster名字要与上面一致 --> <property> <name>fs.defaultFS</name> <value>hdfs://mycluster</value> </property> <!-- 指定Hadoop运行时产生文件的存储目录(包括集群格式化信息) --> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/service/hadoop/HA/hadoop2.7.2/data/tmp</value> </property> <!-- edits文件保存到本地文件系统的路径 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/usr/local/service/hadoop/HA/hadoop2.7.2/data/tmp/jn</value> </property> ``` #### 其他配置文件 其他配置文件与单节点搭建时配置的一样 包括: yarn-site.xml salves mapred-site.xml文件等 ####将配置文件分发到其他节点 ####启动Journalnode服务 每台journalnode节点都需要启动 ``` # node1 cd $HADOOP_HOME sbin/hadoop-daemon.sh start journalnode # node2 cd $HADOOP_HOME sbin/hadoop-daemon.sh start journalnode # node3 cd $HADOOP_HOME sbin/hadoop-daemon.sh start journalnode ``` ####格式化Hadoop集群并启动nn1 注意:不需要在两台NameNode节点上都格式化 ``` # 在nn1节点上格式化并启动 cd $HADOOP_HOME bin/hadoop namenode -format sbin/hadoop-daemon.sh start namenode ``` ####在nn2上同步nn1的元数据 ``` # 注意一定要在nn2上执行 cd $HADOOP_HOME bin/hdfs namenode --bootstrapStandby ``` ####启动nn2节点的NameNode进程 ``` cd $HADOOP_HOME sbin/hadoop-daemon.sh start namenode ``` ####启动所有DataNode ``` # nn1节点操作 sbin/hadoop-daemons.sh start datanode ``` ####将nn1切换为active状态 注意:此时,nn1和nn2都处于standby状态,无法对外提供服务,需要手动切换一台NameNode节点的状态 ``` # 在nn1和nn2节点操作都可以,这里选择nn1 cd $HADOOP_HOME bin/hdfs haadmin -transitionToActive nn1 ``` ####获取NameNode节点的状态信息 ``` cd $HADOOP_HOME bin/hdfs haadmin -getServiceState nn1 ```