hdfs-HA

234 阅读2分钟

FULL-> HA: 基础环境: 增加NNs的ssh免密 应用搭建 zookeeper 格式化NN 格式化ZK 启动集群 Host NN NN JNN DN ZKFC ZK node01 1 1 1 node02 1 1 1 1 1 node03 1 1 1 node04 1 1 HA模式下:有一个问题,你的NN是2台?在某一时刻,谁是Active呢?client是只能连接Active

core-site.xml fs.defaultFs -> hdfs://node01:9000

<property>
	<name>fs.defaultFS</name>
	<value>hdfs://mycluster</value>
</property>
<property>
   <name>ha.zookeeper.quorum</name>
   <value>node02:2181,node03:2181,node04:2181</value>
 </property>

hdfs-site.xml #以下是 一对多 逻辑到物理节点的映射 dfs.nameservices mycluster dfs.ha.namenodes.mycluster nn1,nn2 dfs.namenode.rpc-address.mycluster.nn1 node01:8020 dfs.namenode.rpc-address.mycluster.nn2 node02:8020 dfs.namenode.http-address.mycluster.nn1 node01:50070 dfs.namenode.http-address.mycluster.nn2 node02:50070 #以下是JN在哪里启动,数据存那个磁盘 dfs.namenode.shared.edits.dir qjournal://node01:8485;node02:8485;node03:8485/mycluster dfs.journalnode.edits.dir /var/bigdata/hadoop/ha/dfs/jn # HA角色切换的代理类和实现方法,我们用的ssh免密 dfs.client.failover.proxy.provider.mycluster org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider dfs.ha.fencing.methods sshfence dfs.ha.fencing.ssh.private-key-files /root/.ssh/id_dsa #开启自动化 启动zkfc进程 dfs.ha.automatic-failover.enabled true 流程: 基础设施 ssh免密: 1)启动start-dfs.sh脚本的机器需要将公钥分发给别的节点 2)在HA模式下,每一个NN身边会启动ZKFC,ZKFC会用免密的方式控制自己和其他NN节点的NN状态 应用搭建 HA 依赖 ZK 搭建ZK集群 修改hadoop的配置文件,并集群同步 初始化启动 1)先启动JN hadoop-daemon.sh start journalnode 2)选择一个NN 做格式化:hdfs namenode -format <只有第一次搭建做,以后不用做> 3)启动这个格式化的NN,已被另外一台同步 hadoop-daemon.sh start namenode 4)在另外一台机器中:hdfs namenode -bootstrapStandby 5)格式化ZK:hdfs zkfc -formatZK <只有第一次搭建做,以后不用做> 6)start-dfs.sh 使用 ----实操: 1)停止之前的集群 2)免密:node01,node02 node02: cd ~/.ssh ssh-keygen -t dsa -P '' -f ./id_dsa cat id_dsa.pub >> authorized_keys scp ./id_dsa.pub node01:pwd/node02.pub node01: cd /.ssh cat node02.pub >> authorized_keys 3)zookeeper 集群搭建 java语言开发 需要jdk 部署在node02,03,04 node02: tar xf zook...tar.gz mv zoo... /opt/bigdata cd /opt/bigdata/zoo... cd conf cp zoo_sample.cfg zoo.cfg vi zoo.cfg datadir=/var/bigdata/hadoop/zk server.1=node02:2888:3888 server.2=node03:2888:3888 server.3=node04:2888:3888 mkdir /var/bigdata/hadoop/zk echo 1 > /var/bigdata/hadoop/zk/myid vi /etc/profile export ZOOKEEPER_HOME=/opt/bigdata/zookeeper-3.4.6 export PATH=PATH:PATH:JAVA_HOME/bin:HADOOPHOME/bin:HADOOP_HOME/bin:HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin . /etc/profile cd /opt/bigdata scp -r ./zookeeper-3.4.6 node03:pwd scp -r ./zookeeper-3.4.6 node04:pwd node03: mkdir /var/bigdata/hadoop/zk echo 2 > /var/bigdata/hadoop/zk/myid *环境变量 . /etc/profile node04: mkdir /var/bigdata/hadoop/zk echo 3 > /var/bigdata/hadoop/zk/myid *环境变量 . /etc/profile node02node04: zkServer.sh start 4)配置hadoop的core和hdfs 5)分发配置 每一台都分发 6)初始化: 1)先启动JN hadoop-daemon.sh start journalnode 2)选择一个NN 做格式化:hdfs namenode -format <只有第一次搭建做,以后不用做> 3)启动这个格式化的NN,已被另外一台同步 hadoop-daemon.sh start namenode 4)在另外一台机器中:hdfs namenode -bootstrapStandby 5)格式化ZK:hdfs zkfc -formatZK <只有第一次搭建做,以后不用做> 6)start-dfs.sh 使用验证: 1)去看jn的日志和目录变化 2)node04 zkCli.sh ls / 启动之后可以看到锁: get /hadoop-ha/mycluster/ActiveStandbyElectorLock 3)杀死namenode 杀死zkfc kill -9 xxxx a)杀死active NN b)杀死active NN身边的zkfc c)shutdown activeNN 主机的网卡: ifconfig eth0 down 2节点一直阻塞降级 如果恢复1上的网卡 ifconfig eth0 up 最终2 变成active