Hadoop-2.6.0下HDFS的集群HA的主备自动切换搭建
一.环境说明1.1 安装环境说明及安装包 1). 操作系统为CentOS6.6 2). Hadoop版本为Hadoop-2.6.0 hadoop-2.6.0.tar.gz(64位) 3).JDK版本为 1.7 jdk-7u75-linux-x64.gz 4). zookeeper-3.4.6.tar.gz现有四台机器配置分布如下主机
一.环境说明
1.1 安装环境说明及安装包
1). 操作系统为CentOS6.6
2). Hadoop版本为Hadoop-2.6.0 hadoop-2.6.0.tar.gz(64位)
3).JDK版本为 1.7 jdk-7u75-linux-x64.gz
4). zookeeper-3.4.6.tar.gz
架构
现有四台机器配置分布如下
主机名 | 主机IP | NameNode | DataNode | Zookeeper | ZKFC | JournalNade |
Node01 | 10.25.100.166 | 1 |
| 1 | 1 |
|
Node02 | 10.25.100.167 | 1 | 1 | 1 | 1 | 1 |
Node03 | 10.25.100.168 |
| 1 | 1 |
| 1 |
Node04 | 10.25.100.169 |
| 1 |
|
| 1 |
二.修改主机名
1). [root@localhost ~]# vi /etc/hosts 修改并增加后为
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1 localhost
10.25.100.166 node01
10.25.100.167 node02
10.25.100.168 node03
10.25.100.169 node04
2). [root@localhost ~]# vi /etc/sysconfig/network 将/etc/syscinfig/network 下的HOSTNAME改为node01
NETWORKING=yes
HOSTNAME=node01
3).再使用hostname命令指定一次
[root@localhost ~]# hostname node01
只要重新登入(重启),命令提示字串就会改成[root@node01 ~]#
同理(1,2,3步骤)修改其它几台机器
三.制作ssh无密码登录
1).先分别制作每台主机的无密码登录
[root@node01 ~]# ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
[root@node01 ~]# cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
[root@node01 ~]# ssh node01
Last login: Wed Jul 29 18:52:44 2015 from localhost
[root@node01 ~]#
同理其它三台机器也同上做相同的配置
2). 在/root下 生成一个.ssh文件夹
[root@node01 ~]# cd .ssh/
[root@node01 .ssh]# ls
authorized_keys id_dsa id_dsa.pub known_hosts
[root@node01 .ssh]#
3).然后将authorized_keys文件拷贝到其它几台机器的/root下
[root@node01 .ssh]# scp authorized_keys root@node02:~/
[root@node01 .ssh]# scp authorized_keys root@node03:~/
[root@node01 .ssh]# scp authorized_keys root@node04:~/
4).分别进入其它几台机器将拷贝过来的文件进行重定向
[root@node02 ~]# cat authorized_keys >> ~/.ssh/authorized_keys
同理在其它三台机器上做相同的操作
5). 此时,就完成了ssh无密码登录,是不是很简单呢,我们可以做一个测试
在node01主机下登录node04
[root@node01 .ssh]# ssh node04
Last login: Wed Jul 29 18:48:13 2015 from 10.25.100.100
[root@node04 ~]#
6).如果退出连接输入exit
[root@node04 ~]# exit
Logout
Connection to node04 closed.b
[root@node01 .ssh]#
7). 以上只是node01连接到其它几台机器免密码登陆,因为我们要实现HA的主备自动切换,而且主备NameNode分别在node01,node02两台机器上,所以我们要让node01和node02互相免密码登陆
[root@node02 .ssh]# scp authorized_keys root@node01:~/
[root@node01 ~]# cat authorized_keys >> ~/.ssh/authorized_keys
四.安装jdk,此处使用jdk1.7
1). 换目录到/usr 目录下, cd /usr
2). 创建java 目录 , mkdir java
3). 将jkd复制到/usr/java目录 cp jdk-7u75-linux-x64.gz /usr/java
4). 解压jdk, tar -zxvf jdk-7u75-linux-x64.gz
5). 配置环境变量 vi /etc/profile
增加记录 :
exportJAVA_HOME=/usr/java/jdk1.7.0_75
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$PATH:$JAVA_HOME/bin
6). 使环境变量生效 source /etc/profile
7). 验证是否生效 java -version
[root@node01 ~]# java -version
java version "1.7.0_75"
Java(TM) SE Runtime Environment (build1.7.0_75-b13)
Java HotSpot(TM) 64-Bit Server VM (build24.75-b04, mixed mode)
[root@node01 ~]#
同理配置其它三台机器
五.hadoop安装 此操作在node01机上进行,用root用户
现在就开始了我们的hadoop的HA自动主备切换的搭建
1). 首先在/home下建立一个hadoop文件夹
2). 将hadoop安装包hadoop-2.6.0.tar.gz拷贝到/root下进行解压 tar -zxvf hadoop-2.6.0.tar.gz
3). 建立一个软链
[root@node01 ~]# ln -sf /root/hadoop-2.6.0/home/hadoop/
同理,在其它几台机器上做1,2,3的步骤
4).修改配置文件 [root@node01 home]# cd hadoop/
5). [root@node01 hadoop]# cd hadoop-2.6.0/etc/hadoop/
6).修改配置文件 core-site.xml
[root@node01 hadoop]# vi core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://xiaodai</value>
/*这里的值指的是默认的HDFS路径,用户的集群名称*/
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop-2.6</value>
/*这里的路径默认是NameNode,DataNode,JournalNode等存放数据的公共目录。防止后面需要每一次重新格式化,这个目录不需要手动建立,运行时会自动建立*/
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>node01:2181,node02:2181,node03:2181</value>
/*这里是ZooKeeper集群的地址和端口。注意,数量一定是奇数,且不少于三个节点*/
</property>
</configuration>
7). 修改hdfs-site.xml
[root@node01 hadoop]# vi hdfs-site.xml
<configuration>
<property>
<name>dfs.nameservices</name>
<value>xiaodai</value>
/*给HDFS集群起了个别名,名字可以随便起,但要唯一*/
</property>
<property>
<name>dfs.replication</name>
<value>3</value> //datanode的节点个数,默认的为3个
</property>
<property>
<name>dfs.ha.namenodes.xiaodai</name>
<value>nn1,nn2</value>
/*指定NameService是xiaodai时的NameNode有哪些,这里的值也是逻辑名称,名字随便起,相互不重复即可*/
</property>
<property>
<name>dfs.namenode.rpc-address.xiaodai.nn1</name>
<value>node01:8020</value>/*指定node01的RPC地址*/
</property>
<property>
<name>dfs.namenode.rpc-address.xiaodai.nn2</name>
<value>node02:8020</value> /*指定node02的RPC地址*/
</property>
<property>
<name>dfs.namenode.http-address.xiaodai.nn1</name>
<value>node01:50070</value> /*指定node01的http地址*/
</property>
<property>
<name>dfs.namenode.http-address.xiaodai.nn2</name>
<value>node02:50070</value>/*指定node02的http地址*/
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node02:8485;node03:8485;node04:8485/xiaodai</value>
/*指定集群的两个NameNode共享edits文件目录时,使用JournalNode集群信息*/
</property>
<property>
<name>dfs.client.failover.proxy.provider.xiaodai</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
/*指定集群出故障时,哪个实现类负责执行故障切换*/
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
/*一旦需要NameNode切换,使用ssh方式进行操作*/
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_dsa</value>
/*如果使用ssh进行切换,使用ssh通信时用的密钥存储的位置*/
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/journal/data</value>
/*指定JournalNode集群在对NameNode的目录进行共享时,自己存储数据的磁盘路径*/
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>/*指定集群是否启动自动故障恢复,即当NameNode出故障时,是否自动切换到另一台NameNode*/
</property>
</configuration>
8).配置运行环境 vi hadoop-env.sh
[root@node01 hadoop]# vi hadoop-env.sh在最后添加下面一句话
export JAVA_HOME=/usr/java/jdk1.7.0_75
9). 配置slaves
[root@node01 hadoop]# vi slaves
修改文件里的内容为 datanode的节点
node02
node03
node04
10). 拷贝安装配置的hadoop到其它几台机器
将/home/hadoop/hadoop-2.6.0/etc/hadoop/目录下的所有文件拷贝到其它几台机器的/home/hadoop/hadoop-2.6.0/etc/hadoop/下
[root@node01 hadoop-2.6.0]# scp -r/home/hadoop/hadoop-2.6.0/etc/hadoop/*root@node02:/home/hadoop/hadoop-2.6.0/etc/hadoop/
同理拷贝到其它几台机器上
六.安装ZooKeeper
1).在/root下解压zookeeper-3.4.6.tar.gz并建立软链
[root@node01 ~]# tar -zxvfzookeeper-3.4.6.tar.gz
ln -sf /root/zookeeper-3.4.6 /home/zookeeper
2).修改zookeeper的配置文件
[root@node01 ~]# cd /home/zookeeper/conf/
[root@node01 conf]# cp -a zoo_sample.cfgzoo.cfg
[root@node01 conf]# vi zoo.cfg
在文件大概12行处修改zookeeper存储数据的路径,防止重启后数据丢失
dataDir=/opt/zookeeper
然后在文件的最后添加如下,zookeeper也是个集群,也要配置奇数个
server.1=node01:2888:3888
server.2=node02:2888:3888
server.3=node03:2888:3888
3).手动创建配置文件[root@node01conf]# mkdir /opt/zookeeper并在文件夹下建立一个文件myid,内容为1,同理其它三台的myid分别为2,3
[root@node01 zookeeper]# vi myid
4).. 将zookeeper配置文件分别拷贝到node02,node03上
[root@node01 opt]# scp -r /opt/zookeeper/root@node02:/opt/
[root@node01 opt]# scp -r /opt/zookeeper/root@node03:/opt/并分别修改文件myid内容为2,3
5). 将zookeeper分别拷贝到node02,node03上
[root@node01 ~]# scp -r zookeeper-3.4.6root@node02:~/
[root@node01 ~]# scp -r zookeeper-3.4.6root@node03:~/
并分别建立软链
[root@node02 ~]# ln -sf /root/zookeeper-3.4.6//home/zookeeper
[root@node03 ~]# ln -sf /root/zookeeper-3.4.6//home/zookeeper
6). 在node01上配置zookeeper的环境变量
[root@node01 ~]# vi /etc/profile
export PATH=$PATH:/home/zookeeper/bin
[root@node01 ~]# source /etc/profile
同理配置其它三台机器
7). 分别关闭所有机器的防火墙并分别启动三个机器上的zookeeper
service iptables stop
[root@node01 ~]# zkServer.sh start
七.启动
1).首先分别启动node02,node03,node04上的JournalNode
[root@node02 ~]# cd /home/hadoop/hadoop-2.6.0/sbin/
[root@node02 sbin]# ./hadoop-daemon.sh start journalnode
2). 在其中一台NameNode上格式化NameNode
[root@node01 hadoop-2.6.0]# bin/hdfs namenode-format
3). 将第一个NameNode上初始化的元数据文件拷贝到第二个NameNode上,要先启动第一个NameNode
[root@node01 hadoop-2.6.0]# sbin/hadoop-daemon.sh startnamenode
[root@node02 hadoop-2.6.0]# bin/hdfs namenode –bootstrapStandby
4).在第一个NameNode上关闭所有hdfs服务
[root@node01 hadoop-2.6.0]# sbin/stop-dfs.sh
5). 初始化zookeeper
[root@node01 hadoop-2.6.0]# bin/hdfs zkfc-formatZK
6).启动HDFS
[root@node01 hadoop-2.6.0]# sbin/start-dfs.sh
八.结果截图
在windows中浏览器中输入一下网址
http://node01:50070/dfshealth.jsp
http://node02:50070/dfshealth.jsp
结果如下所示:
Node01(主)是active而node02(备)是standby
我们向hadoop中上传一个文件,并查看是否上传成功
首先我们要先在hadoop上建立一个文件夹,然后再上传文件到hadoop
[root@node01 hadoop-2.6.0]# bin/hdfs dfs -mkdir-p /usr/file
[root@node01 hadoop-2.6.0]# bin/hdfs dfs -put/root/1.jpg /usr/file
然后我们查看第一个NameNode的进程号并将其杀死,以制造宕机,看第二个NameNode是否会自动切换
[root@node01 hadoop-2.6.0]# jps
5115 Jps
4601 NameNode
3236 QuorumPeerMain
4878 DFSZKFailoverController
[root@node01 hadoop-2.6.0]# kill -9 4601
[root@node01 hadoop-2.6.0]# jps
3236 QuorumPeerMain
5136 Jps
4878 DFSZKFailoverController
[root@node01 hadoop-2.6.0]#
结果如下,恭喜你配置成功
更多推荐
所有评论(0)