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

转载请注明出处:https://blog.csdn.net/l1028386804/article/details/93892479

一、  服务器规划

二、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目录。具体如图所示。

3.格式化ZKFC

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

hdfs zkfc -formatZK

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

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

同步元数据信息的时候输出了“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

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

  • 访问“binghe202”服务器上的NameNode

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

此时,“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

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

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

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

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

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

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

hdfs --daemon start namenode
注意:在Hadoop3.0之前的版本启动NameNode进程需要输入以下命令:
hadoop-daemon.sh stop namenode

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

总结:正常启动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

说明集群搭建成功。

 

集群规划: 主机名 IP 安装的软件 运行的进程 weekend01 192.168.1.201 jdk、hadoop NameNode、DFSZKFailoverController(zkfc) weekend02 192.168.1.202 jdk、hadoop NameNode、DFSZKFailoverController(zkfc) weekend03 192.168.1.203 jdk、hadoop ResourceManager weekend04 192.168.1.204 jdk、hadoop ResourceManager weekend05 192.168.1.205 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain weekend06 192.168.1.206 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain weekend07 192.168.1.207 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain 说明: 1.在hadoop2.0中通常由两个NameNode组成,一个处于active状态,另一个处于standby状态。Active NameNode对外提供服务,而Standby NameNode则不对外提供服务 仅同步active namenode的状态,以便能够在它失败时快速进行切换。 hadoop2.0官方提供了两种HDFS HA的解决方案,一种是NFS,另一种是QJM。这里我们使用简单的QJM。在该方案中,主备NameNode之间通过一组JournalNode同步元数据 信息,一条数据只要成功写入多数JournalNode即认为写入成功。通常配置奇数个JournalNode 这里还配置了一个zookeeper集群,用于ZKFC(DFSZKFailoverController)故障转移,当Active NameNode挂掉了,会自动切换Standby NameNode为standby状态 2.hadoop-2.2.0中依然存在一个问题,就是ResourceManager只有一个,存在单点故障,hadoop-2.4.1解决了这个问题,有两个ResourceManager,一个是Active,一个 是Standby,状态由zookeeper进行协调
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰 河

可以吃鸡腿么?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值