cp -r hadoop hadoop-full 留存全分布式。更改hadoop做高可用
搭建Hadoop ha配置文件
1.修改hadoop-env.sh
用#将export HDFS_SECONDARYNAMENODE_USER=root 注释掉
增加export HDFS_ZKFC_USER=root
export HDFS_JOURNAL_USER=root
2.修改core-site.xml
将fs.defaultFS处的hdfs://hadoop1:9870一处改为 hdfs://mycluster
将hadoop.tmp.dir处实际路径的full改为ha
增加<property><name>hadoop.http.staticuser.user</name>
<value>root</value></property>
增加zk和客户端的通讯端口<property><name>ha.zookeeper.quorum</name>
<value>hadoop2:2181,hadoop3:2181,hadoop4:2181</value></property>
改变主节点
3.修改hdfs-site.xml
删除dfs.namenode.secondary.http-address所在的property
增加集群<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>hadoop1:8020</value></property>
<property><name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>hadoop2:8020</value></property>
增加超文本传输<property><name>dfs.namenode.http-address.mycluster.nn1</name>
<value>hadoop1:9870</value></property>
<property><name>dfs.namenode.http-address.mycluster.nn2</name>
<value>hadoop2:9870</value></property>
增加日志夹<property><name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop1:8485;hadoop2:8485;hadoop3:8485/mycluster</value></property>
增加日志存储位置<property><name>dfs.journalnode.edits.dir</name>
<value>/usr/local/hadoop/ha/journalnode</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.automatic-failover.enabled</name>
<value>true</value></property>
增加隔离<property><name>dfs.ha.fencing.methods</name>
<value>sshfence</value></property>
增加密钥<property><name>dfs.ha.fensing.ssh.private-key-file</name>
<value>/root/.ssh/id_rsa</value></property>
4.分发上述配置文件,自动覆盖
e.g. scp core-site.xml hdfs-site.xml hadoop-env.sh hadoop2:pwd
如果没有相互间分发密钥则需通过scp local_file remote_username@remote_ip:remote_file 然后输入对方的密码
生成及分发密钥:ssh-keygen -t rsa ; ssh-copy-id hadoop2 ;
如果ping失去连接,应使用 systemctl status network 查看网络状况。systemctl restart network重启网络服务。
在hadoop2安装Zookeeper官网下载后解压安装tar -xzvf
1.配置环境变量 vim /etc/profile
增加export ZOOKEEPER_HOME=/usr/local/zookeeper/zookeeper-3.6.0
PATH增加:$ZOOKEEPER_HOME/bin
分发profile scp /etc/profile hadoop3:/etc
2.修改 mv /usr/local/zookeeper/zookeeper-3.6.0/conf/zoo_sample.cfg zoo.cfg
vim zoo.cfg 修改 dataDir=/usr/local/zookeeper/zookeeper-3.6.0/zk 存储目录需手动创建
增加 服务器节点 一主多从的通讯端口 以及选举新主的端口
server.1=hadoop2:2888:3888
server.2=hadoop3:2888:3888
server.3=hadoop4:2888:3888
主从取决于节点编号。同时启动,最大编号是leader.
3.分发整个zookeeper至hadoop3.4
e.g. scp -r /usr/local/zookeeper/zookeeper-3.6.0 hadoop3:/usr/local/zookeeper
在hadoop2.3.4中均mkdir -p /usr/local/zookeeper/zookeeper-3.6.0/zk
增加服务器节点 e.g. echo 1 > /usr/local/zookeeper/zookeeper-3.6.0/zk/myid
运行Zookeeper(hadoop2.3.4)
在三台Zookeeper均使用zkServer.sh start 最小启动单位为过半数
zkServer.sh status
连接客户端 zkCli.sh
单个节点(1.2.3)启动journalnode
hdfs --daemon start journalnode
jps
hdfs --daemon stop journalnode
数据同步为主节点数据
在hadoop1 (未安装zk)格式化并启动namenode
/bin/hdfs namenode -format
ha启动namenode: hdfs --daemon start namenode
在hadoop2同步透穿
hdfs namenode -bootstrapStandby
zk格式化(已启动zk)
在hadoop1(未安装zk) hdfs zkfc -formatZK
需注意启动zkfc(在已启动zk,未启动hadoop集群时) hdfs --daemon start zkfc
启动hadoop集群
在hadoop1 start-dfs.sh
测试(zkfc为hadoop1.2)
在hadoop1关闭namenode hdfs --daemon stop namenode
namenode宕机,则自动实现主从切换至hadoop2
在hadoop2关闭zkfc hdfs --daemon stop zkfc
与zk通讯中断,则自动实现主从切换至hadoop1