一、 配置非高可用的HDFS(用到了四台虚拟机分为node1、node2、node3、node4)
1、 下载hadoop-2.7.4.tar
2、 下载jdk-8u121-linux-x64.tar
3、 配置java环境变量
修改~/.bash_profile(开机就会读取这个文件,进行配置)
export JAVA_HOME=/opt/soft/jdk1.8.0_121/
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
4、 将hadoop-2.7.4.tar上传到/opt/soft/并解压到当前文件夹
(5-9这在一台虚拟机上进行修改)
5、 修改hadoop-2.7.4中的etc/hadoop/ hadoop-env.sh
将JAVA_HOME进行修改
6、 修改hadoop-2.7.4中的etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop-2.5</value>
</property>
</configuration>
7、 修改hadoop-2.7.4中的etc/hadoop/ hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node3:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
8、 vi编辑 hadoop-2.7.4中的etc/hadoop/ slaves
node3
node4
node5
9、 vi编辑 hadoop-2.7.4中的etc/hadoop/ masters
node2
10、修改/etc/hosts(四台虚拟机都要改)
192.168.1.10 node1
192.168.1.11 node2
192.168.1.12 node3
192.168.1.13 node4
11、配置互信ssh
ssh-keygen -t rsa -P ‘’ -f ~/.ssh/id_rsa生成密钥(公钥和私钥)
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys(自己互信)
ssh-copy-id 主机名
12、将5-9修改的文件拷贝到其他虚拟机
例如: scp –r /opt/hadoop-2.7.4 node2:/opt/(拷贝文件夹)
scp /etc/.bash_profile node2:/etc/
13、进入到/opt/soft/hadoop-2.7.4/执行sbin/start-dfs.sh启动hdfs集群。
输入jps,在node1上应显示namenode在其他虚拟机显示datanode。
二、 配置zookeeper集群
1、 下载zookeeper-3.4.10.tar
2、 将zookeeper-3.4.10.tar上传到/opt/soft/并解压到当前文件夹
3、 在/opt/soft/ zookeeper-3.4.10/conf下进行vi zoo.cfg
tickTime=2000
dataDir=/opt/zookeeper
clientPort=2181
initLimit=5
syncLimit=2
server.1=node2:2888:3888
server.2=node3:2888:3888
server.3=node4:2888:3888
4、 在/opt/zookeeper(dataDir)文件夹下vi myid
node2虚拟机的myid为1
node3虚拟机的myid为2
node4虚拟机的myid为3
5、 分别在三台虚拟机的/opt/soft/zookeeper-3.4.10/bin执行./zkServer.sh start启动zookeeper服务
6、 jps显示QuorumPeerMain
三、 配置hdfs的HA
1、 在四台虚拟机上执行 rm /opt/soft/Hadoop-2.7.4/etc/hadoop/masters
2、修改/opt/soft/Hadoop-2.7.4/etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://bjsxt</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop-2.7.4</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>node4:2181,node2:2181,node3:2181</value>
</property>
</configuration>
3、修改/opt/soft/hadoop-2.7.4/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.nameservices</name>
<value>bjsxt</value>
</property>
<property>
<name>dfs.ha.namenodes.bjsxt</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.bjsxt.nn1</name>
<value>node1:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.bjsxt.nn2</name>
<value>node4:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.bjsxt.nn1</name>
<value>node1:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.bjsxt.nn2</name>
<value>node4:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node2:8485;node3:8485;node4:8485/bjsxt</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.bjsxt</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/hadoop-2.7.4/data</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
</configuration>
4、在node2、node3和node4上启动journalnode,
在/opt/soft/hadoop-2.7.4/执行
sbin/hadoop-daemon.sh start journalnode(此种方法可用于启动单个节点的某个服务,服务名替换journalnode即可)
5、在任意一个namenode下进行格式化,这里的namenode有node1和node4,
/opt/soft/hadoop-2.7.4/线执行bin/hdfs zkfc -formatZK (格式化zookeeper)之后执行bin/hdfs namenode –format(格式化namenode),将/opt/hadoop-2.7.4/dfs拷到另外一个namenode节点上,否则另外那个节点会因为格式化不成功而导致启动失败。
7、 在任意一个namenode的/opt/soft/hadoop-2.7.4/进行sbin/start-dfs.sh(启动hdfs集群)
jps:
node1下
3989 DFSZKFailoverController
3851 NameNode
node2下
4192 DataNode
3970 QuorumPeerMain
4037 JournalNode
node3下
4936 DataNode
4734 QuorumPeerMain
4782 JournalNode
node4下
4498 DataNode
4163 JournalNode
4100 QuorumPeerMain
4788 DFSZKFailoverController
4906 NameNode
四、 测试
http://192.168.1.10:50070
node1显示active
http://192.168.1.13:50070
node4显示standby
在node1上执行killall java,你会发现并不能访问http://192.168.1.10:50070,但能访问
http://192.168.1.13:50070,此时standby变为active。