一.环境说明

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分别在node01node02两台机器上,所以我们要让node01node02互相免密码登陆

    [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用户

现在就开始了我们的hadoopHA自动主备切换的搭建

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>

/*指定NameServicexiaodai时的NameNode有哪些,这里的值也是逻辑名称,名字随便起,相互不重复即可*/

</property>

<property>

 <name>dfs.namenode.rpc-address.xiaodai.nn1</name>

 <value>node01:8020</value>/*指定node01RPC地址*/

</property>

<property>

 <name>dfs.namenode.rpc-address.xiaodai.nn2</name>

 <value>node02:8020</value> /*指定node02RPC地址*/

</property>

<property>

 <name>dfs.namenode.http-address.xiaodai.nn1</name>

 <value>node01:50070</value> /*指定node01http地址*/

</property>

<property>

<name>dfs.namenode.http-address.xiaodai.nn2</name>

 <value>node02:50070</value>/*指定node02http地址*/

</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()activenode02()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]#

 

结果如下,恭喜你配置成功


Logo

更多推荐