hadoop+zookeeper(ha架构搭建)
hdfs的HA机制:NameNode服务器一台是ACTIVE,另一台是STANDBY。通过Qjournal(日志管理系统) 使用zkfc(基于zookeeper失败切换控制),管理集群的主节点的失败切换,防止集群单个主节点的宕机问题。一、在数据节点slave1、slave2、slave3的hadoop的安装目录下新建app目录,在该app目录下新建zookeeper目录,用于放置zookeep
hdfs的HA机制:NameNode服务器一台是ACTIVE,另一台是STANDBY。通过Qjournal(日志管理系统) 使用zkfc(基于zookeeper失败切换控制),管理集群的主节点的失败切换,防止集群单个主节点的宕机问题。
一、在数据节点slave1、slave2、slave3的hadoop的安装目录下新建app目录,在该app目录下新建zookeeper目录,用于放置zookeeper的安装目录,或者放置以后需要扩展的hive等目录:
二、在数据节点slave1、slave2、slave3上安装zookeeper
1、将下载好的zookeeper-3.4.5.tar.gz移动到/home/Hadoop/Hadoop-2.6.0/app/zookeeper下,将其解压后,进入到其安装目录下的conf目录下,将该目录下的zoo_sample.cfg复制一份为zoo.cfg:
mv zookeeper-3.4.5.tar.gz /home/Hadoop/Hadoop-2.6.0/app/zookeeper
cd /home/Hadoop/Hadoop-2.6.0/app/zookeeper
tar -zxvf zookeeper-3.4.5.tar.gz
cd zookeeper-3.4.5/conf
cp zoo_sample.cfg zoo.cfg
2、配置zoo.cfg文件
3、在dataDir下新建myid文件,myid文件里就写一个数字,即zoo.cfg文件里所配置
server.X = slaveN:2888:3888中,节点N所对应的数字X。因此slave1、slave2、slave3中myid文件内容分别是数字1,2,3。
vim myid
注意:上述配置可以在一台数据节点机器上配置完成,然后通过scp命令远程传输到另外两台数据节点机器上,只需修改myid文件里的对应的数字即可。例如我在slave1上配置完成的,传输至slave2、slave3:
scp –r zookeeper/ hadoop@slave2:/home/Hadoop/Hadoop-2.6.0/app/
scp –r zookeeper/ hadoop@slave3:/home/Hadoop/Hadoop-2.6.0/app/
4、配置环境变量
vim ~/.bashrc
5、使环境变量生效
source ~/.bashrc
三、配置两台主节点(master、master1)机器免密登陆,由于原先的集群中,master那台主节点已经与三台数据节点实现免密登陆,接下来要实现新加入的master1主节点与三台数据节点的免密登陆。(注意,因为是在虚拟机中搭建,这里的master1是从master完整复制来的)
1、修改master1的ip(125.216.242.191)和hostname(master1)
sudo vim /etc/hostname
sudo vim /etc/hosts
2、将master1原有的~/.ssh目录删除,重新生成新的~/.ssh目录;查看~/.ssh权限,若为700,则不做任何操作,否则执行sudochmod 700 ~/.ssh修改权限;进入到.ssh目录,复制该目录下的id_rsa.pub为authorized_keys文件
ssh-keygen –t rsa –P ‘’
ls –al ~
cd ~/.ssh
cp id_rsa.pub authorized_keys
sudo chmod 600 authorized_keys
3、在master1中执行
scp id_rsa.pub hadoop@master:~/.ssh/key_from_master1
scp id_rsa.pub hadoop@slave1:~/.ssh/key_from_master1
scp id_rsa.pub hadoop@slave2:~/.ssh/key_from_master1
scp id_rsa.pub hadoop@slave3:~/.ssh/key_from_master1
4、在master、slave1、slave2、slave3中执行:
catkey_from_master1 >> authorized_keys
rm key_from_master1
注意:以上步骤实现了节点(master、slave1、slave2、slave3)单向免密登录节点(master1),但节点(master1)并不能免密登录节点(master、slave1、slave2、slave3)
5、在master中执行:scpid_rsa.pub hadoop@master:~/.ssh/key_from_master
在slave1执行:scpid_rsa.pub hadoop@slave1:~/.ssh/key_from_slave1
在slave2执行:scpid_rsa.pub hadoop@slave2:~/.ssh/key_from_slave2
在slave3执行:scpid_rsa.pub hadoop@slave3:~/.ssh/key_from_slave3
6、在master1中执行:
cat key_from_ master>>authorized_keys
cat key_from_ slave1>> authorized_keys
cat key_from_ slave2>>authorized_keys
cat key_from_ slave3>>authorized_keys
rm key_from_ master
rm key_from_ slave1
rm key_from_ slave2
rm key_from_ slave3
这样就实现了双向通信了。若master1还是不能免密连接,则在所有机器中执行ssh-add。
三、hadoop-2.6.0节点配置
1、进入hadoop的配置目录,修改相关配置文件
cd~/hadoop-2.6.0/etc/hadoop/
2、core-site.xml配置
3、hdfs-site.xml配置
4、mapred-site.xml
5、yarn-site.xml
6、slaves
注意:上述的配置只需在一台主节点机器上配置完成即可,然后使用scp命令将配置好的文件远程传输至其他机器上。例如我是在主节点(master)上配置的,将其远程传输至master1、slave1、slave2、slave3上,下面只以master1远程传输为例,其他依此类推。
scp core-site.xml hadoop@master1:/home/hadoop/hadoop-2.6.0/etc/hadoop/
scp hdfs-site.xmlhadoop@master1:/home/hadoop/hadoop-2.6.0/etc/hadoop/
scpmapred-site.xml hadoop@master1:/home/hadoop/hadoop-2.6.0/etc/hadoop/
scp yarn-site.xmlhadoop@master1:/home/hadoop/hadoop-2.6.0/etc/hadoop/
scp slaves hadoop@master1:/home/hadoop/hadoop-2.6.0/etc/hadoop/
四、集群启动过程
1、启动zookeeper集群,分别在slave1、slave2、slave3中输入zkServer.shstart开启服务,开启后使用jps查看是否有QuorumPeerMain进程,若有,则成功开启了,或者输入zkServer.sh status查看服务状态。
2、启动journalnode,分别在slave1、slave2、slave3中输入hadoop-daemon.shstart journalnode 同理,运行jps命令检验是否多了JournalNode进程
3、格式化namenode,由于我是将之前搭建的非HA集群转换成HA集群,所以不需要重新format namenode,如果是第一次新配置的集群,则在其中一台主节点上(master)执行hadoop namenode -format命令。(注意:该步骤由始至终只执行一次,执行多次可能造成集群启动不了)
4、格式化成功后,根据core-site.xml中的hadoop.tmp.dir配置生成的目录文件,这里我配置的是/home/hadoop/hdfs/tmp,然后将其远程传输至另一台主节点master1的/home/hadoop/hdfs下。
scp -r tmp/ hadoop@master1:/home/hadoop/hdfs/
或者也可以这样:在master1中执行hdfsnamenode –bootstrapStandby命令,做备份启动准备(建议)(注意:该步骤只需在第一次配置ha架构时使用,成功后,集群日后的启动可掠过该步骤)
4、只需在master一台机器上执行hdfszkfc –formatZK,格式化zkfc(注意:该步骤只需在第一次配置ha架构时使用,成功后,集群日后的启动可掠过该步骤)
5、在master和master1中都需要输入hadoop-daemon.shstart zkfc启动zkfc,同理,使用jps检验DFSZKFailoverController进程是否存在,存在,则成功启动zkfc了。
6、启动hdfs。在其中一台主节点(如:master)执行start-dfs.sh命令即可,在主节点输入jps命令检测Namenode是否启动,在数据节点输入jps命令,检测Datanode是否启动。
7、启动yarn,在其中一台主节点(如:master)执行start-yarn.sh命令即可,在主节点输入jps命令检测ResourceManager是否启动,在数据节点输入jps命令,检测NodeManager是否启动。
五、集群启动验证
如果是在master中启动的话,那么默认的浏览窗口会是这样: master1是Active状态,master是Standby状态。
1、打开浏览器,分别输入125.216.242.200:50070和125.216.242.191:50070,会查看到master是standby的,master1是active的。
2、在上述成功情况下,如果你去master1里面把这个namenode进程(输入kill 4250命令,其中4250是根据jps查询时匹配到的Namenode进程号)杀死的话,使用jps可以检测namenode进程不存在了,打开浏览器,会发现master自动切换为Active,master1变成无法连接。
3、此时,如果在master1节点中,输入hadoop-daemon.shstart namenode命令,启动死去的主节点namenode。打开浏览器,会发现:master1是standby的,master是active的。
更多推荐
所有评论(0)