HDFS高可用完全分布式搭建步骤

一、准备阶段

  • 分布式思想

HA分布式思想

  • 分布式集群规划

主机名 IP地址 NN-1 NN-2 DN ZK ZKFC JNN
Hadoop1 192.168.23.133
Hadoop2 192.168.23.130
Hadoop3 192.168.23.132
Hadoop4 192.168.23.131

二、操作步骤

1、搭建zookeeper集群

(1)先在节点2上解压zookeeper-3.4.10.tar.gz
(2)修改conf目录下的zoo_sample.cfg的名称,改为zoo.cfg

mv zoo_sample.cfg zoo.cfg

(3)在2、3、4节点上创建/var/hpe/zookeeper,修改zoo.cfg

dataDir=/var/hpe/zookeeper
server.1=Hadoop2:2888:3888
server.2=Hadoop3:2888:3888
server.3=Hadoop4:2888:3888

(4)在dataDir目录下创建一个myid文件,在这个文件中写上当前节点ID号
(5)将配置好的zookeeper安装包发送到Hadoop3 Hadoop4
(6)发送完毕后,在各自节点上创建myid号,ID号要依次递增

2、搭建HA完全分布式

(1)查看每个节点的防火墙状态,若防火墙服务启动,则关闭防火墙服务

service iptables status	  				   //查看防火墙状态
iptables: Firewall is not running.         //说明没有开启
service iptables stop      			       //关闭防火墙服务。
chkconfig iptables off                     //禁止防火墙开机自启。

(2)在每个节点上执行以下命令,用来存放所需文件

mkdir -p /hpe/hadoop

(3)解压Hadoop-2.4.5.gz、jdk.gz、zookeeper-3.4.10.tar.gz

tar -zxvf Hadoop-2.4.5.gz
tar -zxvf jdk.gz
tar -zxvf zookeeper-3.4.10.tar.gz 

(4)分别配置四台节点的Hadoop环境变量和jdk
输入 vim ~/.bashrc在文件中添加如下代码:

//配置Hadoop环境变量
export HADOOP_HOME=/hpe/hadoop/Hadoop-2.6.5
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

//配置JDK环境变量
export JAVA_HOME=/hpe/hadoop/jdk1.8.0_151
export PATH=$PATH:$JAVA_HOME/bin

(5)为了不产生数据延迟首先使4个节点的时间同步
①各个节点安装ntp :

yum install ntp

②安装完成后每个节点都执行如下命令从而达到时间同步

/*ntp1.aliyun.com为阿里的时间服务器*/
ntpdate ntp1.aliyun.com

(6)配置hosts文件

vi /etc/hosts

// 实现主机名映射
192.168.23.133Hadoop1
192.168.23.130Hadoop2
192.168.23.132Hadoop3
192.168.23.131Hadoop4

(7)配置免密登录

Hadoop1->Hadoop1、Hadoop1->Hadoop2、Hadoop1->Hadoop3 Hadoop1->Hadoop4、Hadoop2->Hadoop1(主备切换)
①在所有节点执行以下命令

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

②在Hadoop1节点执行以下命令,将Hadoop1的公钥加入到其他节点的白名单中

ssh-copy-id -i ~/.ssh/id_rsa.pub root@Hadoop1
ssh-copy-id -i ~/.ssh/id_rsa.pub root@Hadoop2
ssh-copy-id -i ~/.ssh/id_rsa.pub root@Hadoop3
ssh-copy-id -i ~/.ssh/id_rsa.pub root@Hadoop4

③在Hadoop2节点执行以下命令,将Hadoop2的公钥加入到Hadoop1节点的白名单中

ssh-copy-id -i ~/.ssh/id_rsa.pub root@Hadoop1

④验证免密是否成功ssh Hadoop2
(8)修改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>Hadoop1:8020</value>
</property>
<property>
  <name>dfs.namenode.rpc-address.mycluster.nn2</name>
  <value> Hadoop2:8020</value>
</property>
<property>
  <name>dfs.namenode.http-address.mycluster.nn1</name>
  <value> Hadoop1:50070</value>
</property>
<property>
  <name>dfs.namenode.http-address.mycluster.nn2</name>
  <value> Hadoop2:50070</value>
</property>
<property>
  <name>dfs.namenode.shared.edits.dir</name>
  <value>qjournal://Hadoop1:8485; Hadoop2:8485; Hadoop3: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>

(9)修改core-site.xml配置文件

<property>
   <name>fs.defaultFS</name>
   <value>hdfs://mycluster</value>
</property>
<property>
   <name>ha.zookeeper.quorum</name>
   <value>Hadoop2:2181,Hadoop3:2181,Hadoop4:2181</value> //设置zookeeper启动的节点位置
</property>

(10)修改slaves配置文件

Hadoop2
Hadoop3
Hadoop4

(11)在Hadoop1节点上将配置好的HDFS安装包发送到Hadoop2 Hadoop3 Hadoop4

scp -r hadoop-2.6.5 root@Hadoop2:/opt/software/hadoop/
scp -r hadoop-2.6.5 root@Hadoop3:/opt/software/hadoop/
scp -r hadoop-2.6.5 root@Hadoop4:/opt/software/hadoop/

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

  • ①在Hadoop1、Hadoop2、Hadoop3分别执行如下命令
1)	hadoop-daemon.sh start journalnode			 //启动JNN

- ②随机选择一台NameNode执行

1)	hdfs namenode -format
2)	hadoop-daemon.sh start namenode

- ③另外一台NameNode节点执行

1)	hdfs namenode  -bootstrapStandby

(13)在Hadoop1和Hadoop2上分别执行以下命令,格式化zookeeper

hdfs zkfc -formatZK

(14)关闭所有节点上的进程

stop-dfs.sh

(15)启动HDFSstart-dfs.sh
(16)在每台节点上查看进程
Hadoop1上启动的进程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
说明每个进程在节点上启动成功。
若界面如下图所示,则证明HA分布式搭建成功
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

三、搭建过程中遇见的错误

(1)在搭建完全分布式的时候,防火墙状态是临时关闭的,所以系统重启后,防火墙状态又重新开启,导致集群内通信出现问题。
(2)slaves文件忘记配置。
(3)由于多次格式化的时候选择覆盖,出现clusterId不一致的问题,导致部分DataNode节点无法正常启动。查看clusterId后,修改为一致,即可解决。
(4)zookeeper集群没最先启动便在节点一二上执行hdfs zkfc -formatZK,导致报错。

猜你喜欢

转载自blog.csdn.net/qq_42825815/article/details/83034868