本文共 4862 字,大约阅读时间需要 16 分钟。
namenode1: 192.168.103.4namenode2: 192.168.103.8datanode1:192.168.103.15datanode2: 192.168.103.5 datanode3: 192.168.103.3操作系统: ubuntu-16.04-x64hadoop版本: apache-hadoop-2.6.5jdk版本:1.8
jdk的安装过程此处不赘述,不熟悉的话可以参考网上的资料。
zookeeper集群的搭建过程可以参考,本例中zookeeper集群搭建在datanode1, datanode2,datanode3节点上。
为了方便配置信息的维护,我们在hadoop配置文件中使用主机名来标识一台主机,那么我们需要在集群中配置主机与ip的映射关系。
修改集群中每台主机/etc/hosts文件,添加如下内容。192.168.103.4 namenode1192.168.103.8 namenode2192.168.103.15 datanode1192.168.103.5 datanode2192.168.103.3 datanode3
集群在启动的过程中需要ssh远程登录到别的主机上,为了避免每次输入对方主机的密码,我们需要对namenode1和namenode2配置免密码登录
在namenode1上生成公钥ssh-keygen
一路enter确认即可生成对应的公钥。
将namenode1的公钥拷贝到namenode2, datanode1, datanode2, datanode3节点上。ssh-copy-id -i ~/.ssh/id_rsa.pub root@namenode2ssh-copy-id -i ~/.ssh/id_rsa.pub root@datanode1ssh-copy-id -i ~/.ssh/id_rsa.pub root@datanode2
在namenode2上生成公钥后,并将namenode2的公钥拷贝到namenode1, datanode1, datanode2, datanode3节点上。具体的命令可以参考namenode1上的操作命令。
下载hadoop 安装包,点击这里获取hadoop-2.6.5。
解压安装包
tar xf hadoop-2.6.5.tar.gz
修改etc/hadoop/hadoop-env.sh
export JAVA_HOME=/opt/jdk1.8.0_91
修改etc/hadoop/core-site.xml
fs.defaultFS hdfs://mycluster hadoop.tmp.dir file:/opt/hadoop-2.6.5/tmp ha.zookeeper.quorum datanode1:2181,datanode2:2181,datanode3:2181
ha.zookeeper.quorum为zookeeper集群的地址
修改etc/hadoop/hdfs-site.xml
dfs.namenode.name.dir file:/opt/hadoop-2.6.5/tmp/dfs/name dfs.datanode.data.dir file:/opt/hadoop-2.6.5/tmp/dfs/data dfs.replication 3 dfs.nameservices mycluster dfs.ha.namenodes.mycluster nn1,nn2 dfs.namenode.rpc-address.mycluster.nn1 namenode1:9000 dfs.namenode.http-address.mycluster.nn1 namenode1:50070 dfs.namenode.rpc-address.mycluster.nn2 namenode2:9000 dfs.namenode.http-address.mycluster.nn2 namenode2:50070 dfs.ha.automic-failover.enabled.cluster true dfs.namenode.shared.edits.dir qjournal://datanode1:8485;datanode2:8485;datanode3:8485/mycluster dfs.client.failover.proxy.provider.mycluster org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider dfs.ha.fencing.methods shell(/bin/true) dfs.ha.fencing.ssh.private-key-files /root/.ssh/id_rsa dfs.ha.fencing.ssh.connect-timeout 30000 dfs.journalnode.edits.dir /opt/hadoop-2.6.5/tmp/journal
修改etc/hadoop/slaves
datanode1datanode2datanode3
将配置好的hadoop安装包拷贝到namenode2和其余的datanode上
scp -r hadoop-2.6.5 root@namenode2:/opt scp -r hadoop-2.6.5 root@datanode1:/opt scp -r hadoop-2.6.5 root@datanode2:/opt scp -r hadoop-2.6.5 root@datanode3:/opt
启动zookeeper集群
在datanode1,datanode2, datanode3节点执行如下命令:./bin/zkServer.sh start
格式化zk集群
namenode1上执行:/bin/hdfs zkfc -formatZK
启动journalnode集群
datanode1, datanode2, datanode2上执行:./sbin/hadoop-daemon.sh start journalnode
格式化namenode
namenode1上执行:./bin/hdfs namenode -format
启动datanode
datanode1, datanode2, datanode3上执行:./sbin/hadoop-daemon.sh start datanode
启动namenode
namenode1:./sbin/hadoop-daemon.sh start namenode
namenode2:
./bin/hdfs namenode -bootstrapStandby./sbin/hadoop-daemon.sh start namenode
此时namenode1和namenode2同时处于standby状态。
启动zkfc服务
在namenode1和namenode2上同时执行如下命令:./sbin/hadoop-daemon.sh start zkfc
启动zkfc服务后,namenode1和namenode2会自动选举出active节点
root# ./bin/hdfs dfs -mkdir /testroot# ./bin/hdfs dfs -ls /Found 1 itemsdrwxr-xr-x - root supergroup 0 2018-06-01 13:49 /testroot# ./bin/hdfs dfs -put /root/a.txt /testroot# ./bin/hdfs dfs -cat /test/a.txt hello world
此时namenode1处于active状态,namenode2处于standby状态。模拟namenode1节点namenode服务挂掉。
namenode1:root# jps21235 DFSZKFailoverController21116 Jps20014 NameNoderoot# kill -9 20014
我们再查看namenode2的节点状态
namenode2由standby状态切换到active状态,HA故障自动切换成功。