本次尝试了HDFS HA完全分布式集群搭建,集群规划如下:
以下是本人成功搭建HDFS HA集群的步骤及踩过的坑
①在node2节点下解压zookeeper包到node2节点虚拟机的某一目录(我尝试的和hadoop目录在一个目录)
tar -zxvf zookeeper-3.4.10
②修改conf目录下的zoo_sample.cfg的名称,改为zoo.cfg
mv zoo_sample.cfg zoo.cfg
③修改zoo.cfg文件,添加如下内容(如果节点名不同需要做相应修改)
dataDir=/var/Andrea/zookeeper
server.1=node2:2888:3888
server.2=node3:2888:3888
server.3=node4:2888:3888
此处设置的server.之后的数字代表相应节点的ID号
④在dataDir目录下创建一个myid文件,在这个文件中写上当前节点ID号
此dataDir目录也就是zoo.cfg里dataDir后面设置的目录
如果没有这个目录,需要先创建这个目录
在/var下执行
mkdir -p Andrea/zookeeper
之后进入这个目录,用cat指令输入相应节点的ID号
⑤将配置好的zookeeper安装包拷贝到node3 node4
在zookeeper-3.4.10的父目录执行以下两条指令实现拷贝
scp -r zookeeper-3.4.10 root@node3:`pwd`
scp -r zookeeper-3.4.10 root@node4:`pwd`
在\var目录执行以下两条指令实现拷贝
scp -r Andrea root@node3:`pwd`
scp -r Andrea root@node4:`pwd`
⑥修改node3和node4的myid文件中的ID号为当前节点的ID号
⑦进入zookeeper-3.4.10\bin将每个节点启动zookeeper测试配置成果
使用以下指令分别进行启动和停止
./zkServer.sh start
./zkServer.sh stop
① 所有节点执行 ssh-keygen -t rsa -P ‘’ -f ~/.ssh/id_rsa生成公钥
② 在node01节点执行以下命令,将node01的公钥加入到其他节点的白名单中
ssh-copy-id -i ~/.ssh/id_rsa.pub root@node1
ssh-copy-id -i ~/.ssh/id_rsa.pub root@node2
ssh-copy-id -i ~/.ssh/id_rsa.pub root@node3
ssh-copy-id -i ~/.ssh/id_rsa.pub root@node4
③ 在node02节点执行以下命令,将node02的公钥加入到node1节点的白名单中
ssh-copy-id -i ~/.ssh/id_rsa.pub root@node1
此步骤踩过的坑详见上一篇博文
将此配置文件中加入如下内容
dfs.nameservices
mycluster
dfs.ha.namenodes.mycluster
nn1,nn2
dfs.namenode.rpc-address.mycluster.nn1
node1:8020
dfs.namenode.rpc-address.mycluster.nn2
node2:8020
dfs.namenode.http-address.mycluster.nn1
node1:50070
dfs.namenode.http-address.mycluster.nn2
node2:50070
dfs.namenode.shared.edits.dir
qjournal://node1:8485;node2:8485;node3:8485/mycluster
dfs.journalnode.edits.dir
/var/sxt/hadoop/ha/jn
dfs.client.failover.proxy.provider.mycluster org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
dfs.ha.fencing.methods
sshfence
dfs.ha.fencing.ssh.private-key-files
/root/.ssh/id_rsa
dfs.ha.automatic-failover.enabled
true
将此配置文件中加入如下内容
fs.defaultFS
hdfs://mycluster
ha.zookeeper.quorum
node2:2181,node3:2181,node4:2181
将此配置文件修改为node2 node3 node4
注意:要竖着写,行末不能留空格
在hadoop-2.6.5的父目录执行如下指令进行拷贝
scp -r hadoop-2.6.5 root@node2:`pwd`
scp -r hadoop-2.6.5 root@node3:`pwd`
scp -r hadoop-2.6.5 root@node4:`pwd`
注意:如果之前搭建过完全分布式系统,需要把其它节点的这个目录删除再进行拷贝。否则会出现The authenticity of host ‘node1 (192.168.112.130)’ can’t be established错误。我删除目录之后重新拷贝解决了此问题。
① 在node1、node2、node3分别执行如下命令
hadoop-daemon.sh start journalnode
② 随机选择一台NameNode执行:
hdfs namenode -format
hadoop-daemon.sh start namenode
③ 另外一台NameNode节点执行:
hdfs namenode -bootstrapStandby
④在zkfc的两个节点执行
hdfs zkfc -formatZK
stop-dfs.sh
start-dfs.sh