HDFS HA(高可用的)完全分布式搭建

本次尝试了HDFS HA完全分布式集群搭建,集群规划如下:

返回
返回
监视
监视
ZKFC-node1
ZK-node2,3,4
ZKFC-node2
NN1-node1
NN2-node2
JNN-node1,2,3
DN-node2,3,4

以下是本人成功搭建HDFS HA集群的步骤及踩过的坑

1在配置好JAVA JDK的前提下搭建zookeeper集群

①在node2节点下解压zookeeper包到node1节点虚拟机的某一目录(我尝试的和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

效果如下,如果成功启动会多一条如下进程

2配置免密登陆

① 所有节点执行 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
此步骤踩过的坑详见上一篇博文

3修改hdfs-site.xml配置文件

将此配置文件中加入如下内容

<property>
		    <name>dfs.nameservices</name>
		    <value>mycluster</value>
</property>
<property>
 <name>dfs.ha.namenodes.mycluster</name>
 <value>nn1,nn2</value>
</property>
<property>
 <name>dfs.namenode.rpc-address.mycluster.nn1</name>
 <value>node1:8020</value>
</property>
<property>
 <name>dfs.namenode.rpc-address.mycluster.nn2</name>
 <value>node2:8020</value>
</property>
<property>
 <name>dfs.namenode.http-address.mycluster.nn1</name>
 <value>node1:50070</value>
</property>
<property>
 <name>dfs.namenode.http-address.mycluster.nn2</name>
 <value>node2:50070</value>
</property>
<property>
 <name>dfs.namenode.shared.edits.dir</name>
 <value>qjournal://node1:8485;node2:8485;node3:8485/mycluster</value>
</property>
<property>
 <name>dfs.journalnode.edits.dir</name>
 <value>/var/sxt/hadoop/ha/jn</value>
</property>
<property>
 <name>dfs.client.failover.proxy.provider.mycluster</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.ha.automatic-failover.enabled</name>
  <value>true</value>
</property>

4修改core-site.xml配置文件

将此配置文件中加入如下内容

<property>
  <name>fs.defaultFS</name>
  <value>hdfs://mycluster</value>
</property>
<property>
  <name>ha.zookeeper.quorum</name>
  <value>node2:2181,node3:2181,node4:2181</value>
</property>

5修改slaves配置文件

将此配置文件修改为node2 node3 node4
注意:要竖着写,行末不能留空格

6将配置好的HDFS安装包拷贝到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错误。我删除目录之后重新拷贝解决了此问题。

7格式化NameNode(创建目录以及文件)

① 在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

8关闭所有节点上的进程

stop-dfs.sh

9启动HDFS

 start-dfs.sh

成功启动的效果图如下
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Andrea_null/article/details/83019723