隐藏

完整版基于3台服务器搭建Hadoop3.x集群

发布:2022/12/16 16:36:05作者:管理员 来源:本站 浏览次数:761

一、  服务器规划


Hadoop之——基于3台服务器搭建Hadoop3.x集群(实测完整版)_Hadoop3.x

二、Hadoop集群环境的准备


搭建Hadoop集群环境之前,需要为搭建Hadoop集群环境做一些相关的准备工作,以达到正确安装Hadoop集群的目的。

1.添加hadoop用户身份


以root身份登录每台虚拟机服务器,在每台服务器上执行如下操作。


groupadd hadoop

useradd -r -g hadoop hadoop

passwd hadoop

Changing password for user hadoop.

New password: 新密码

Retype new password: 确认新密码

passwd: all authentication tokens updated successfully.

chown -R hadoop.hadoop /usr/local/

chown -R hadoop.hadoop /tmp/

chown -R hadoop.hadoop /home/

vim /etc/sudoers

找到

root    ALL=(ALL)       ALL

下面添加

hadoop    ALL=(ALL)       ALL


 


2.关闭防火墙


以root身份登录虚拟机服务器,在每台服务器上执行如下命令:


#查看防火墙状态

service iptables status

#关闭防火墙

service iptables stop

#关闭防火墙开机启动

chkconfig iptables off

#查看防火墙状态

service iptables status


  


3.设置静态IP


为每台服务器设置静态IP,这里以服务器binghe201(192.168.175.201)为例,修改配置文件“/etc/sysconfig/network-scripts/ifcfg-eth0”文件,如下:


DEVICE=eth0

TYPE=Ethernet

UUID=11e3b288-72da-4cc6-898d-ee2bf0b44d77

ONBOOT=yes

NM_CONTROLLED=yes

BOOTPROTO=static

IPADDR=192.168.175.201

NETMASK=255.255.255.0

BROADCAST=192.168.175.255

GATEWAY=192.168.175.2

DNS1=114.114.114.114

DNS2=8.8.8.8

DEFROUTE=yes

IPV4_FAILURE_FATAL=yes

IPV6INIT=no

NAME="System eth0"

HWADDR=00:0C:29:7F:45:21

PEERDNS=yes

PEERROUTES=yes

LAST_CONNECT=1561336045


 


下面,分别列出每台服务器上“/etc/sysconfig/network-scripts/ifcfg-eth0”文件修改过的部分。


   binghe202(192.168.175.202)


BOOTPROTO=static

IPADDR=192.168.175.202

NETMASK=255.255.255.0

BROADCAST=192.168.175.255

GATEWAY=192.168.175.2

DNS1=114.114.114.114

DNS2=8.8.8.8



   binghe203(192.168.175.203)


BOOTPROTO=static

IPADDR=192.168.175.203

NETMASK=255.255.255.0

BROADCAST=192.168.175.255

GATEWAY=192.168.175.2

DNS1=114.114.114.114

DNS2=8.8.8.8


 


设置完静态IP之后,在每台服务器上执行如下命令重启网络。


service network restart


 


4.设置主机名


设置主机名需要在文件“/etc/sysconfig/network”中进行配置。如果需要修改当前会话的主机名需要使用命令“hostname 主机名”的方式进行设置。


下面,分别列出每台服务器上“/etc/sysconfig/network”文件的配置和执行的命令。


   binghe201(192.168.175.201)


hostname binghe201

vim /etc/sysconfig/network

NETWORKING=yes

HOSTNAME=binghe201



   binghe202(192.168.175.202)


hostname binghe202

vim /etc/sysconfig/network

NETWORKING=yes

HOSTNAME=binghe202



   binghe203(192.168.175.203)


hostname binghe203

vim /etc/sysconfig/network

NETWORKING=yes

HOSTNAME=binghe203


  


5.设置主机名与IP地址的映射关系


在每台服务器上修改“/etc/hosts”文件,添加如下配置:


192.168.175.201   binghe201

192.168.175.202   binghe202

192.168.175.203   binghe203


 


6.集群环境下配置SSH免密码登录


注意:配置SSH免密码登录,使用hadoop身份登录虚拟机服务器,进行相关的操作。


(1)生成SSH免密码登录公钥和私钥


在每台虚拟机服务器上执行如下命令,在每台服务器上分别生成SSH免密码登录的公钥和私钥。


ssh-keygen -t rsa

cat /home/hadoop/.ssh/id_rsa.pub >> /home/hadoop/.ssh/authorized_keys



(2)设置目录和文件权限


在每台虚拟机服务器上执行如下命令,设置相应目录和文件的权限。


chmod 700 /home/hadoop/

chmod 700 /home/hadoop/.ssh

chmod 644 /home/hadoop/.ssh/authorized_keys

chmod 600 /home/hadoop/.ssh/id_rsa



(3)将公钥拷贝到每台服务器


在每台虚拟机服务器上执行如下命令,将生成的公钥拷贝到每台虚拟机服务器上。


ssh-copy-id -i /home/hadoop/.ssh/id_rsa.pub  binghe201

ssh-copy-id -i /home/hadoop/.ssh/id_rsa.pub  binghe202

ssh-copy-id -i /home/hadoop/.ssh/id_rsa.pub  binghe203


  


执行完上面的命令之后,每台服务器之间都可以通过“ssh 服务器主机名”进行免密码登录了。


注意:执行每条命令的时候,都会提示类似如下信息。


Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added 'binghe101,192.168.175.101' (RSA) to the list of known hosts.

hadoop@binghe101's password:


在“是否确认继续连接”的地方输入“yes”,提示输入密码的地方输入相应服务器的登录密码即可,后续使用“ssh 主机名”登录相应服务器就不用再输入密码了。

三、集群环境下的JDK安装


(1)安装JDK并配置系统环境便令


在每台服务器上执行安装JDK的操作,同样是将JDK安装在CentOS虚拟机的“/usr/local”目录下,即JAVA_HOME安装目录为“/usr/local/jdk1.8.0_212”。在文件“/etc/profile”中配置的系统环境变量如下:


JAVA_HOME=/usr/local/jdk1.8.0_212

CLASS_PATH=.:$JAVA_HOME/lib

PATH=$JAVA_HOME/bin:$PATH

export JAVA_HOME CLASS_PATH PATH



(2)使系统环境变量生效


在每台服务器上执行如下命令使JDK系统环境变量生效。


source /etc/profile


(3)验证JDK是否安装配置


具体验证方式如下:


-bash-4.1$ java -version

java version "1.8.0_212"

Java(TM) SE Runtime Environment (build 1.8.0_212-b10)

Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)



可以看到输出了Java版本,说明JDK安装配置成功。

四、搭建并配置Zookeeper集群


安装配置完JDK后,就需要搭建Zookeeper集群了,根据对服务器的规划,现将Zookeeper集群搭建在“binghe201”、“binghe202”、“binghe203”三台服务器上。


注意:步骤1-4是在“binghe201”服务器上进行的操作。

1.下载Zookeeper


在“binghe201”上执行如下命令下载Zookeeper。


wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.5.5/apache-zookeeper-3.5.5-bin.tar.gz


2.安装并配置Zookeeper系统环境变量


这里,将Zookeeper安装在虚拟机的“/usr/local”目录下,即ZOOKEEPER_HOME安装目录为“/usr/local/zookeeper-3.5.5”。


结合配置JDK后,文件“/etc/profile”文件中添加的内容如下:


JAVA_HOME=/usr/local/jdk1.8.0_212

ZOOKEEPER_HOME=/usr/local/zookeeper-3.5.5

CLASS_PATH=.:$JAVA_HOME/lib

PATH=$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$PATH

export JAVA_HOME ZOOKEEPER_HOME CLASS_PATH PATH


 


3.配置Zookeeper


首先,需要将“$ZOOKEEPER_HOME/conf”(“$ZOOKEEPER_HOME”为Zookeeper的安装目录)目录下的zoo_sample.cfg文件修改为zoo.cfg文件。具体命令如下:


cd /usr/local/zookeeper-3.5.5/conf/

mv zoo_sample.cfg zoo.cfg



接下来修改zoo.cfg文件,修改后的具体内容如下:


tickTime=2000

initLimit=10

syncLimit=5

dataDir=/usr/local/zookeeper-3.5.5/data

dataLogDir=/usr/local/zookeeper-3.5.5/dataLog

clientPort=2181

server.1=binghe201:2888:3888

server.2=binghe202:2888:3888

server.3=binghe203:2888:3888



在Zookeeper的安装目录下创建“data”和“dataLog”两个文件夹。


mkdir -p /usr/local/zookeeper-3.5.5/data

mkdir -p /usr/local/zookeeper-3.5.5/dataLog


  


切换到新建的data目录下,创建myid文件,具体内容为数字“1”,如下所示:


echo "1" >> /usr/local/zookeeper-3.5.5/data/myid


将数字“1”写入到文件myid。

4.复制Zookeeper和系统环境变量到其他服务器


将“binghe201”上安装的Zookeeper和系统环境变量文件拷贝到“binghe202”和“binghe203”服务器,具体操作如下:


scp -r /usr/local/zookeeper-3.5.5/ binghe202:/usr/local/

scp -r /usr/local/zookeeper-3.5.5/ binghe203:/usr/local/

sudo scp /etc/profile binghe202:/etc

sudo scp /etc/profile binghe203:/etc


 



注意:拷贝系统环境变量文件“/et/profile”文件的时候,如果提示要求输入密码,根据相应的提示输入密码即可。


5.修改myid文件内容


   将“binghe202”服务器上Zookeeper的myid文件内容修改为数字2。


在“binghe202”上执行如下命令:


-bash-4.1$ echo "2" > /usr/local/zookeeper-3.5.5/data/myid

-bash-4.1$ cat /usr/local/zookeeper-3.5.5/data/myid

2


可以看到Zookeeper文件的内容被成功修改为数字2了。


   将“binghe203”服务器上Zookeeper的myid文件内容修改为数字3。


在“binghe203”服务器上执行如下命令:


-bash-4.1$ echo "3" > /usr/local/zookeeper-3.5.5/data/myid

-bash-4.1$ cat /usr/local/zookeeper-3.5.5/data/myid

3


可以看到Zookeeper文件的内容被成功修改为数字3了。

6.使环境变量生效


分别在“binghe201”、“binghe202”和“binghe203”上执行如下操作,使系统环境变量生效。


source /etc/profile


五、搭建并配置Hadoop集群


注意:1-5步是在“binghe201”服务器上执行的操作。

1.下载Hadoop


在“binghe201”上执行如下命令下载Hadoop。


wget mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.2.0/hadoop-3.2.0.tar.gz


2.解压并配置系统环境变量


(1)解压Hadoop


输入如下命令对Hadoop进行解压。


tar -zxvf hadoop-3.2.0.tar.gz


(2)配置Hadoop系统环境变量


同样,Hadoop的系统环境变量也需要在“/etc/profile”文件中进行相应的配置,通过如下命令打开“/etc/profile”文件并进行相关设置。


sudo vim /etc/profile


上述命令可能要求输入密码,根据提示输入密码即可。


在“/etc/profile”文件中添加如下配置:


HADOOP_HOME=/usr/local/hadoop-3.2.0

PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

export HADOOP_HOME PATH

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

export HADOOP_COMMON_HOME=$HADOOP_HOME

export HADOOP_HDFS_HOME=$HADOOP_HOME

export HADOOP_MAPRED_HOME=$HADOOP_HOME

export HADOOP_YARN_HOME=$HADOOP_HOME

export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native



结合之前配置的JDK和Zookeeper系统环境变量,整体配置信息如下:


JAVA_HOME=/usr/local/jdk1.8.0_212

ZOOKEEPER_HOME=/usr/local/zookeeper-3.5.5

HADOOP_HOME=/usr/local/hadoop-3.2.0

CLASS_PATH=.:$JAVA_HOME/lib

PATH=$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

export JAVA_HOME ZOOKEEPER_HOME HADOOP_HOME CLASS_PATH PATH

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

export HADOOP_COMMON_HOME=$HADOOP_HOME

export HADOOP_HDFS_HOME=$HADOOP_HOME

export HADOOP_MAPRED_HOME=$HADOOP_HOME

export HADOOP_YARN_HOME=$HADOOP_HOME

export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native


(3)使系统环境变量生效


source /etc/profile


(4)验证Hadoop系统环境变量是否配置成功


具体验证方式如下所示:


hadoop version      

Hadoop 3.2.0

Source code repository https://github.com/apache/hadoop.git -r e97acb3bd8f3befd27418996fa5d4b50bf2e17bf

Compiled by sunilg on 2019-01-08T06:08Z

Compiled with protoc 2.5.0

From source with checksum d3f0795ed0d9dc378e2c785d3668f39

This command was run using /usr/local/hadoop-3.2.0/share/hadoop/common/hadoop-common-3.2.0.jar



也就是在命令行输入“hadoop version”命令,可以看到输出了Hadoop的版本号“Hadoop 3.2.0”,说明Hadoop系统环境变量配置成功。

3.修改Hadoop配置文件


Hadoop集群环境的搭建流程基本和Zookeeper集群的搭建流程相同,除了要解压安装包和配置系统环境变量外,还需要对自身框架进行相关的配置。


(1)配置hadoop-env.sh


在hadoop-env.sh文件中,需要指定JAVA_HOME的安装目录,具体如下:


cd /usr/local/hadoop-3.2.0/etc/hadoop/

vim hadoop-env.sh

export JAVA_HOME=/usr/local/jdk1.8.0_212




(2)配置core-site.xml


具体配置信息如下:


<configuration>

 <property>

   <name>fs.defaultFS</name>

   <value>hdfs://ns/</value>

 </property>

 <property>

   <name>hadoop.tmp.dir</name>

   <value>/usr/local/hadoop-3.2.0/tmp</value>

 </property>

 <property>

   <name>ha.zookeeper.quorum</name>

   <value>binghe201:2181,binghe202:2181,binghe203:2181</value>

 </property>

</configuration>



(3)配置hdfs-site.xml


具体配置信息如下:


<configuration>

 <property>

   <name>dfs.nameservices</name>

   <value>ns</value>

 </property>

 <property>

   <name>dfs.ha.namenodes.ns</name>

   <value>nn1,nn2</value>

 </property>

 <property>

   <name>dfs.namenode.rpc-address.ns.nn1</name>

   <value>binghe201:9000</value>

 </property>

 <property>

   <name>dfs.namenode.http-address.ns.nn1</name>

   <value>binghe201:9870</value>

 </property>

 <property>

   <name>dfs.namenode.rpc-address.ns.nn2</name>

   <value>binghe202:9000</value>

 </property>

 <property>

   <name>dfs.namenode.http-address.ns.nn2</name>

   <value>binghe202:9870</value>

 </property>

 <property>

   <name>dfs.namenode.shared.edits.dir</name>

   <value>qjournal://binghe201:8485;binghe202:8485;binghe203:8485/ns</value>

 </property>

 <property>

   <name>dfs.journalnode.edits.dir</name>

   <value>/usr/local/hadoop-3.2.0/journaldata</value>

 </property>

 <property>

   <name>dfs.ha.automatic-failover.enabled</name>

   <value>true</value>

 </property>

 <property>

   <name>dfs.client.failover.proxy.provider.ns</name>

   <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

 </property>

 <property>

   <name>dfs.ha.fencing.methods</name>

   <value>

     sshfence

     shell(/bin/true)

   </value>

 </property>

 <property>

   <name>dfs.ha.fencing.ssh.private-key-files</name>

   <value>/home/hadoop/.ssh/id_rsa</value>

 </property>

 <property>

   <name>dfs.ha.fencing.ssh.connect-timeout</name>

   <value>30000</value>

 </property>

</configuration>



(4)配置mapred-site.xml


具体配置信息如下:


<configuration>

 <property>

   <name>mapreduce.framework.name</name>

   <value>yarn</value>

 </property>

 <property>

   <name>yarn.app.mapreduce.am.env</name>

   <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>

 </property>

 <property>

   <name>mapreduce.map.env</name>

   <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>

 </property>

 <property>

   <name>mapreduce.reduce.env</name>

   <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>

 </property>

</configuration>


(5)配置yarn-site.xml


具体配置信息如下:


<configuration>

   <property>    

       <name>yarn.nodemanager.aux-services</name>    

       <value>mapreduce_shuffle</value>    

   </property>  

   <property>

       <name>yarn.resourcemanager.hostname</name>

       <value>binghe203</value>

     </property>

</configuration>



(6)修改workers文件


这个文件主要是用来存放DataNode节点用的。在Hadoop3.0之前的版本中,这个文件叫作“slaves”。


具体配置信息如下:


binghe201

binghe202

binghe203


4.将配置好的Hadoop拷贝到其他节点


将在“binghe101”上安装并配置好的Hadoop复制到其他服务器上,具体操作如下:


scp -r /usr/local/hadoop-3.2.0/ binghe202:/usr/local/

scp -r /usr/local/hadoop-3.2.0/ binghe203:/usr/local/


 


5.将配置好的Hadoop系统环境变量拷贝到其他节点


sudo scp /etc/profile binghe202:/etc/

sudo scp /etc/profile binghe203:/etc/



6.使系统环境变量生效


在所有服务器上执行如下命令,使系统环境变量生效,并验证Hadoop系统环境变量是否配置成功。


source /etc/profile

hadoop version


可以看到,输入“hadoop version”命令之后,命令行输出了如下信息:


Hadoop 3.2.0

Source code repository https://github.com/apache/hadoop.git -r e97acb3bd8f3befd27418996fa5d4b50bf2e17bf

Compiled by sunilg on 2019-01-08T06:08Z

Compiled with protoc 2.5.0

From source with checksum d3f0795ed0d9dc378e2c785d3668f39

This command was run using /usr/local/hadoop-3.2.0/share/hadoop/common/hadoop-common-3.2.0.jar


  



说明,Hadoop系统环境变量配置成功。

六、启动Zookeeper集群


在三台服务器上分别执行如下命令启动Zookeeper进程。


zkServer.sh start


  


在每台服务器上查看是否存在Zookeeper进程。


   “binghe201”服务器


-bash-4.1$ jps

1476 QuorumPeerMain

1514 Jps



   “binghe202”服务器


-bash-4.1$ jps

1507 Jps

1462 QuorumPeerMain


   “binghe203”服务器


-bash-4.1$ jps

1460 QuorumPeerMain

1498 Jps


可以看到每天服务器上都启动了Zookeeper进程。


查看每台服务器上Zookeeper的运行模式,具体如下所示。


   “binghe201”服务器


-bash-4.1$ zkServer.sh status

ZooKeeper JMX enabled by default

Using config: /usr/local/zookeeper-3.5.5/bin/../conf/zoo.cfg

Client port found: 2181. Client address: localhost.

Mode: follower


   “binghe202”服务器


-bash-4.1$ zkServer.sh status

ZooKeeper JMX enabled by default

Using config: /usr/local/zookeeper-3.5.5/bin/../conf/zoo.cfg

Client port found: 2181. Client address: localhost.

Mode: leader


   “binghe203”服务器


-bash-4.1$ zkServer.sh status

ZooKeeper JMX enabled by default

Using config: /usr/local/zookeeper-3.5.5/bin/../conf/zoo.cfg

Client port found: 2181. Client address: localhost.

Mode: follower



可以看到,在“binghe202”服务器上运行的Zookeeper为“leader”,在“binghe201”和“binghe203”服务器上运行的Zookeeper为“follower”,说明:Zookeeper集群搭建并启动成功。

七、启动Hadoop集群


启动搭建的精简版的Hadoop集群,同样需要启动journalnode进程、格式化HDFS、格式化ZKFC、启动HDFS和启动YARN。具体操作步骤如下(注意:需要严格按照以下步骤启动Hadoop集群)。

1.启动并验证journalnode进程


(1)启动journalnode进程


在“binghe201”服务器上执行如下命令启动journalnode进程。


hdfs --workers --daemon start journalnode



注意:在Hadoop 3.0以前是输入如下命令启动journalnode进程。


hadoop-daemons.sh start journalnode



(2)验证journalnode进程是否启动成功


在三台服务器上分别执行“jps”命令查看是否存在journalnode进程,以此确认journalnode进程是否启动成功。


   “binghe201”服务器


-bash-4.1$ jps

1476 QuorumPeerMain

1669 Jps

1640 JournalNode



   “binghe202”服务器


-bash-4.1$ jps

1633 Jps

1462 QuorumPeerMain

1594 JournalNode


   “binghe203”服务器


-bash-4.1$ jps

1585 JournalNode

1460 QuorumPeerMain

1624 Jps


可以看到,三台服务器均启动了journalnode进程,说明journalnode进程启动成功。

2.格式化HDFS


在“binghe201”服务器上执行如下命令格式化HDFS。


hdfs namenode -format


格式化成功之后,会输出“common.Storage: Storage directory /usr/local/hadoop-3.2.0/tmp/dfs/name has been successfully formatted.”信息,并在HADOOP_HOME(/usr/local/hadoop-3.2.0/)目录下自动创建tmp目录。具体如图所示。


Hadoop之——基于3台服务器搭建Hadoop3.x集群(实测完整版)_Hadoop_02

3.格式化ZKFC


在“binghe201”服务器上执行如下命令格式化ZKFC。


hdfs zkfc -formatZK


格式化成功之后,会输出“ha.ActiveStandbyElector: Successfully created /hadoop-ha/ns in ZK.”信息。具体如图所示。


Hadoop之——基于3台服务器搭建Hadoop3.x集群(实测完整版)_Hadoop3.x_03

4.启动NameNode并验证


(1)启动NameNode


在“binghe201”服务器上执行如下命令启动NameNode。


hdfs --daemon start namenode



注意:在Hadoop3.0以前的版本启动NameNode是输入如下的命令:


hadoop-daemon.sh start namenode


(2)验证NameNode是否启动成功


在“binghe201”服务器上输入“jps”命令查看是否存在NameNode进程,以此确认NameNode是否启动成功,具体如下:


-bash-4.1$ jps

1892 Jps

1476 QuorumPeerMain

1640 JournalNode

1852 NameNode



从输出结果可以看出,存在“NameNode”进程,说明NameNode启动成功。

5.同步元数据信息


在“binghe202”服务器上执行如下命令进行元数据信息的同步操作。


hdfs namenode -bootstrapStandby


Hadoop之——基于3台服务器搭建Hadoop3.x集群(实测完整版)_Hadoop_04


同步元数据信息的时候输出了“common.Storage: Storage directory /usr/local/hadoop-3.2.0/tmp/dfs/name has been successfully formatted.”信息,说明同步元数据信息成功。


6.启动并验证备用NameNode


(1)启动备用NameNode


在“binghe202”服务器上执行如下命令启动备用NameNode。


hdfs --daemon start namenode

注意:在Hadoop3.0以前的版本启动NameNode是输入如下的命令:

hadoop-daemon.sh start namenode



(2)验证备用NameNode是否启动成功


在“binghe202”服务器上输入“jps”命令查看是否存在NameNode进程,以此确认备用NameNode是否启动成功,具体如下:


-bash-4.1$ jps

1750 NameNode

1462 QuorumPeerMain

1816 Jps

1594 JournalNode



从输出结果可以看出,存在“NameNode”进程,说明备用NameNode启动成功。

7.启动并验证DataNode


(1)启动DataNode


在“binghe201”服务器上执行如下命令启动DataNode。


hdfs --workers --daemon start datanode

注意:在Hadoop3.0以前的版本启动DataNode是输入如下的命令:

hadoop-daemons.sh start datanode


(2)验证DataNode是否启动成功


在三台服务器分别输入“jps”命令,查看是否存在“DataNode”进程,以此确认DataNode是否启动成功。


   “binghe201”服务器


-bash-4.1$ jps

2145 DataNode

1476 QuorumPeerMain

2231 Jps

1640 JournalNode

1852 NameNode



   “binghe202”服务器


-bash-4.1$ jps

1750 NameNode

1462 QuorumPeerMain

1962 DataNode

1594 JournalNode

2063 Jps



   “binghe203”服务器


-bash-4.1$ jps

1585 JournalNode

1460 QuorumPeerMain

1703 DataNode

1771 Jps


由输出结果可以看出,三台服务器中均启动了“DataNode”进程,说明DataNode启动成功。

8.启动并验证YARN


(1)启动YARN


在“binghe203”服务器上执行如下命令启动YARN。


start-yarn.sh


(2)验证YARN是否启动成功


在三台服务器上执行“jps”命令来验证YARN是否启动成功。


   “binghe201”服务器


-bash-4.1$ jps

2464 Jps

2145 DataNode

1476 QuorumPeerMain

1640 JournalNode

2329 NodeManager

1852 NameNode



   “binghe202”服务器


-bash-4.1$ jps

2147 NodeManager

1750 NameNode

1462 QuorumPeerMain

1962 DataNode

1594 JournalNode

2284 Jps



   “binghe203”服务器


-bash-4.1$ jps

1585 JournalNode

2354 Jps

1460 QuorumPeerMain

1989 NodeManager

1703 DataNode

1883 ResourceManager



由输出结果可以看出“ResourceManager”进程存在于“binghe203”服务器上;“NodeManager”进程存在于“binghe201”、“binghe202”和“binghe203”服务器上。说明YARN启动成功。

9.启动并验证ZKFC


(1)启动ZKFC


在“binghe201”服务器上执行如下命令启动ZKFC。


hdfs --workers --daemon start zkfc

注意:在Hadoop3.0以前的版本中,启动ZKFC需要使用如下命令:

hadoop-daemons.sh start zkfc


(2)验证ZKFC是否启动成功


在“binghe201”和“binghe202”服务器上分别执行“jps”命令,查看是否存在“DFSZKFailoverController”进程。


   “binghe201”服务器


-bash-4.1$ jps

2145 DataNode

1476 QuorumPeerMain

1640 JournalNode

2329 NodeManager

1852 NameNode

2734 Jps

2670 DFSZKFailoverController



   “binghe202”服务器


-bash-4.1$ jps

2147 NodeManager

2484 Jps

1750 NameNode

1462 QuorumPeerMain

2439 DFSZKFailoverController

1962 DataNode

1594 JournalNode


由输出结果可以看出,两台服务器均启动了“DFSZKFailoverController”进程,说明ZKFC启动成功。

八、启动Hadoop集群的另一种方式


这种方式要比每次启动单个进程并进行验证方便的多,只需要进行如下操作:

1.格式化HDFS


在“binghe201”服务器上执行如下命令格式化HDFS。


hdfs namenode -format


2.复制元数据信息


将“binghe201”服务器上的“/usr/local/hadoop-3.2.0/tmp/”目录复制到服务器“binghe202”服务上的“/usr/local/hadoop-3.2.0”目录下。


在“binghe201”服务器上执行如下命令进行复制:


scp -r /usr/local/hadoop-3.2.0/tmp/ binghe202:/usr/local/hadoop-3.2.0/


3.格式化ZKFC


在“binghe201”服务器上执行如下命令格式化ZKFC。


hdfs zkfc -formatZK


4.启动HDFS


在“binghe201”服务器上执行启动HDFS的命令,具体如下所示:


start-dfs.sh


5.启动YARN


在“binghe203”服务器上执行启动YARN的命令,具体如下所示:


start-yarn.sh


九、 测试Hadoop HA的高可用性


使用浏览器方式验证和程序方式验证两种方式来验证Hadoop HA的高可用性。

1.浏览器方式验证


(1)浏览器访问NameNode


   访问“binghe201”服务器上的NameNode


在浏览器中输入链接: http://192.168.175.201:9870 访问“binghe201”服务器上的NameNode


Hadoop之——基于3台服务器搭建Hadoop3.x集群(实测完整版)_hadoop_05


此时,“binghe201”服务器上的NameNode处于“active”状态。


   访问“binghe202”服务器上的NameNode


在浏览器中输入链接: http://192.168.175.202:9870 访问“binghe202”服务器上的NameNode


Hadoop之——基于3台服务器搭建Hadoop3.x集群(实测完整版)_Hadoop_06


此时,“binghe202”服务器上的NameNode处于“standby”状态。


(2)停止“binghe201”上的NameNode后访问


   停止“binghe201”上的NameNode进程


在“binghe201”服务器上执行如下命令停止NameNode进程。


hdfs --daemon stop namenode

注意:在Hadoop3.0之前的版本停止NameNode进程需要输入以下命令:

hadoop-daemon.sh stop namenode


   浏览器访问“binghe201”服务器上的NameNode


在浏览器中输入链接: http://192.168.175.201:9870 访问“binghe201”服务器上的NameNode


Hadoop之——基于3台服务器搭建Hadoop3.x集群(实测完整版)_zookeeper_07


可以看到,由于停止了“binghe201”服务器上的NameNode进程,导致此服务器上的NameNode已无法访问。


   浏览器访问“binghe202”服务器上的NameNode


在浏览器中输入链接: http://192.168.175.202:9870 访问“binghe202”服务器上的NameNode


Hadoop之——基于3台服务器搭建Hadoop3.x集群(实测完整版)_hadoop_08


可以看到,由于“binghe201”服务器上的NameNode无法访问,“binghe202”服务器上的NameNode自动切换为“active”状态。


(3)重启“binghe201”上的NameNode访问


首先,在“binghe201”服务器上执行如下命令启动NameNode进程。


hdfs --daemon start namenode

注意:在Hadoop3.0之前的版本启动NameNode进程需要输入以下命令:

hadoop-daemon.sh stop namenode


接下来访问“binghe201”服务器上的NameNode


Hadoop之——基于3台服务器搭建Hadoop3.x集群(实测完整版)_Hadoop_09


总结:正常启动NameNode进程后,“binghe201”服务器上的NameNode处于“active”状态,“binghe202”服务器上的NameNode处于“standby”状态;当停止“binghe201”服务器上的NameNode时,“binghe202”服务器上的NameNode自动切换为“active”状态,而重启“binghe201”服务器上的NameNode后,“binghe201”服务器上的NameNode此时会处于“standby”状态。说明:Hadoop HA搭建并配置成功了。

2.程序方式验证


以程序方式验证,还是运行Hadoop自带的wordcount程序,对文件中的单词进行计数,并输出统计结果。


(1)准备数据文件


在“binghe201”服务器上准备数据文件data.input,并写入测试的单词。具体如下:


vim data.input

hadoop mapreduce hive flume

hbase spark storm flume

sqoop hadoop hive kafka

spark hadoop storm


(2)上传数据文件到HDFS


首先,在HDFS上创建目录“/data /input”,具体命令如下:


hadoop fs -mkdir -p /data/input


在“binghe201”上执行如下命令将data.input文件上传到HDFS分布式文件系统中的“/data/hadoop/input”目录下,具体命令如下:


hadoop fs -put data.input /data/input


接下来查看文件data.input是否上传成功,具体命令如下:


-bash-4.1$ hadoop fs -ls /data/input

Found 1 items

-rw-r--r--   3 hadoop supergroup         96 2019-06-27 17:04 /data/input/data.input


可以看到,data.input文件已经成功上传到HDFS分布式文件系统的“/data/hadoop/input”目录下。


(3)运行Hadoop MapReduce程序


具体执行命令如下:


hadoop jar /usr/local/hadoop-3.2.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.0.jar wordcount /data/input/data.input /data/output201


注意:这里的输出目录是HDFS上的“/data/output201”目录。


(4)查看执行结果


首先,利用如下命令查看HDFS中是否产生了输出结果。


-bash-4.1$ hadoop fs -ls /data/output201

Found 2 items

-rw-r--r--   3 hadoop supergroup          0 2019-06-27 17:16 /data/output201/_SUCCESS

-rw-r--r--   3 hadoop supergroup         76 2019-06-27 17:16 /data/output201/part-r-00000



可以看到在HDFS的“/data/output101”目录下产生了执行结果,接下来查看“part-r-00000”文件的内容,具体如下:


-bash-4.1$ hadoop fs -cat /data/output201/part-r-00000

flume   2

hadoop  3

hbase   1

hive    2

kafka   1

mapreduce       1

spark   2

sqoop   1

storm   2


可以看到,正确地输出了每个单词和单词对应的数量。


(5)停止“binghe201”服务器上的NameNode进程


hdfs --daemon stop namenode

注意:在Hadoop3.0之前的版本停止NameNode进程需要输入以下命令:

hadoop-daemon.sh stop namenode


(6)再次运行MapReduce程序


hadoop jar /usr/local/hadoop-3.2.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.0.jar wordcount /data/input/data.input /data/output202



注意:这里的输出目录是HDFS上的“/data/output202”目录。


(7)再次查看执行结果


首先,利用如下命令查看HDFS中是否产生了输出结果。


-bash-4.1$ hadoop fs -ls /data/output202

Found 2 items

-rw-r--r--   3 hadoop supergroup          0 2019-06-27 17:20 /data/output202/_SUCCESS

-rw-r--r--   3 hadoop supergroup         76 2019-06-27 17:20 /data/output202/part-r-00000



可以看到在HDFS的“/data/output102”目录下产生了执行结果,接下来查看“part-r-00000”文件的内容,具体如下:


-bash-4.1$ hadoop fs -cat /data/output202/part-r-00000

flume   2

hadoop  3

hbase   1

hive    2

kafka   1

mapreduce       1

spark   2

sqoop   1

storm   2


说明集群搭建成功。