Hadoop海量数据存储与计算高可用集群部署(全网最详细,初学者照着也能搭建)

Hadoop集群搭建部署

Hadoop简介

​ Hadoop是Apache软件基金会旗下的一个开源分布式计算平台。以Hadoop分布式文件系统(HDFS,Hadoop Distributed Filesystem)和MapReduce(Google MapReduce的开源实现)为核心的Hadoop为用户提供了系统底层细节透明的分布式基础架构。

​ 对于Hadoop的集群来讲,可以分成两大类角色:MasterSlave。一个HDFS集群是由一个NameNode和若干个DataNode组成的。其中NameNode作为主服务器,管理文件系统的命名空间和客户端对文件系统的访问操作;集群中的DataNode管理存储的数据。MapReduce框架是由一个单独运行在主节点上的JobTracker和运行在每个集群从节点的TaskTracker共同组成的。主节点负责调度构成一个作业的所有任务,这些任务分布在不同的从节点上。主节点监控它们的执行情况,并且重新执行之前的失败任务;从节点仅负责由主节点指派的任务。当一个Job被提交时,JobTracker接收到提交作业和配置信息之后,就会将配置信息等分发给从节点,同时调度任务并监控TaskTracker的执行。

​ HDFS和MapReduce共同组成了Hadoop分布式系统体系结构的核心。HDFS在集群上实现分布式文件系统,MapReduce在集群上实现了分布式计算和任务处理。HDFS在MapReduce任务处理过程中提供了文件操作和存储等支持,MapReduce在HDFS的基础上实现了任务的分发、跟踪、执行等工作,并收集结果,二者相互作用,完成了Hadoop分布式集群的主要任务。

Hadoop生态组成示意图

image-20230416105406424

​ 狭义的Hadoop核心只包括Hadoop Commonhadoop HDFSHadonp MapReduce 三个子项目,但和Hadoop核心密切相关的,还包括ZooKeeper、Hive、PigHBase等项目

HDFS为海量数据提供了存储,而MapReduce为海量数据提供了计算框架。

安装顺序

  • 配置基础环境

  • JDK的安装

  • zookeeper的安装

  • Hadoop HA集群模式的安装

  • Hbase HA集群模式的安装

  • MYSQL集群平台的安装

配置基础环境

五台虚拟机均要配置

准备集群所要用到的五台内存至少 2核4G 磁盘60G 的虚拟机

分别命名为:

主机1 192.168.180.141 Cluster-01

主机2 192.168.180.142 Cluster-02

主机3 192.168.180.143 Cluster-03

主机4 192.168.180.144 Cluster-04

主机5 192.168.180.145 Cluster-05

关闭防火墙,并设置为开机自动关闭

systemctl stop firewalld

systemctl disable firewalld

关闭selinux

setenforce 0 (临时关闭,系统重启后还是会自动开启)

永久关闭

vi /etc/selinux/config

将 SELINUX=enforcing 改为 SELINUX=disabled 然后保存并退出

image-20230426093413129

设置主机名,将每台分别设置为Cluster-01, Cluster-02·····

vi /etc/hostname (重启后才能看到修改后的主机名)

image-20230426093630648

每台虚拟机按照顺序依次修改

设置主机映射,设置了之后每台虚拟机之前可以通过主机名访问

vi /etc/hosts

image-20230426094031727

同样,每台虚拟机依次设置

设置每台主机之间的免密登录,这样访问另一台主机省去了每次输密码的麻烦

该项的所有操作步骤使用每台集群主机新建一个用户名相同的专门用于
集群的用户hadoop或者admin进行,之后大部分操作都在admin用户上进行

每台主机都要进行本项操作。5台互相登录免密码。包括每台本机也要给本机执行拷贝公钥文件

创建用户并设置密码,我这里设置的密码为admin(五台均要操作)

useradd admin

passwd admin

登录admin用户

su - admin

设置免密登录

ssh-keygen -t rsa

l.

cd .ssh/

ls

ssh-copy-id -i ~/.ssh/id_rsa.pub admin@Cluster-01

ssh-copy-id -i ~/.ssh/id_rsa.pub admin@Cluster-02

ssh-copy-id -i ~/.ssh/id_rsa.pub admin@Cluster-03

ssh-copy-id -i ~/.ssh/id_rsa.pub admin@Cluster-04

ssh-copy-id -i ~/.ssh/id_rsa.pub admin@Cluster-05

[admin@Cluster-01 ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/admin/.ssh/id_rsa):
Created directory '/home/admin/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/admin/.ssh/id_rsa.
Your public key has been saved in /home/admin/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:B4rdBO2N/GwlMrxRlnqhTTT9O3VTaBLwljP61tIeuUw admin@Cluster-01
The key's randomart image is:
+---[RSA 2048]----+
|      .. .++.. . |
|       .. *oo.o .|
|       +oX .*+  .|
|     o +@.=o.o..o|
|    . o SOoo   oo|
|        ..+. oo. |
|         .  + E. |
|           . = o |
|              +  |
+----[SHA256]-----+
[admin@Cluster-01 ~]$ l.
.  ..  .bash_logout  .bash_profile  .bashrc  .ssh
[admin@Cluster-01 ~]$ cd .ssh/
[admin@Cluster-01 .ssh]$ ls
id_rsa  id_rsa.pub

image-20230426095255967

完成之后,在另外四台虚拟机执行同样的上述操作

上传软件包

将本次实验所需要的所有软件包都上传到 admin用户新建的一个目录下存放

本次实验所需要用的所有软件包下载链接如下

链接:提取链接
提取码:0768

只需要将软件包上传到Cluster-01即可,后续可以通过scp远程发送到其他节点中

su - admin

mkdir setups

image-20230429135803670

安装JDK

该项的所有操作步骤需要使用root用户进行,并且在集群中每台主机操作一次。

将五台虚拟机切换至root目录下

su - root

注意:这里一定要用 '-' 不然无法将环境变量一同切换到root下

卸载原有的JDK

rpm -qa | grep java

rpm -qa | grep jdk

选用JDK 8的131版本,软件包名jdk-8u131-linux-x64.tar.gz

以下操作在Cluster-01的 admin用户下进行

在家目录下创建一个 java目录,存JDK相关的文件

mkdir ~/java

cd java/

tar -xzvf ~/setups/jdk-8u131-linux-x64.tar.gz

image-20230429140353313

配置JDK的环境变量

vi ~/.bash_profile

对配置文件进行修改,在文件末尾添加以下内容:

#javaenvironment
JAVA_HOME=/home/admin/java/jdk1.8.0_131
CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH

image-20230429140802447

使新配置的环境变量立即生效

source ~/.bash_profile

检查环境变量是否添加成功

[admin@Cluster-01 java]$ echo $PATH
/home/admin/java/jdk1.8.0_131/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/admin/.local/bin:/home/admin/bin:/home/admin/.local/bin:/home/admin/bin
[admin@Cluster-01 java]$ echo $CLASSPATH
.:/home/admin/java/jdk1.8.0_131/lib/tools.jar:/home/admin/java/jdk1.8.0_131/lib/dt.jar
[admin@Cluster-01 java]$ echo $JAVA_HOME
/home/admin/java/jdk1.8.0_131
[admin@Cluster-01 java]$ java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
[admin@Cluster-01 java]$ javac -version
javac 1.8.0_131

同步JDK安装和配置(远程发送到其他几台机子)

将“java”目录和“.bash_profile”文件发给集群中所有其它主机,发送目标用户为集群专用用户admin,发送目标路径为“/home/admin”,即集群专用用户admin的家目录。然后每台执行source ~/.bash_profile使环境变量生效

scp -r ~/java ~/.bash_profile admin@Cluster-02:/home/admin

scp -r ~/java ~/.bash_profile admin@Cluster-03:/home/admin

scp -r ~/java ~/.bash_profile admin@Cluster-04:/home/admin

scp -r ~/java ~/.bash_profile admin@Cluster-05:/home/admin

之后在 Cluster-02 - Cluster-05节点刷新环境变量

在2-5节点分别执行:

source ~/.bash_profile

成功之后如下图:

image-20230429141707404

安装zookeeper

选用Zookeeper的3.4.9版本,软件包名zookeeper-3.4.9.tar.gz (事先已上传至虚拟机)

安装操作为了方便,只需要在Cluster-01的 admin 用户下进行,之后通过远程发送到其他主机上

Cluster-01的 admin 用户下进行

创建用于专门存放zookeeper相关文件的目录,并将zookeeper解压至该目录下

mkdir ~/zookeeper

cd ~/zookeeper

tar -xzf ~/setups/zookeeper-3.4.9.tar.gz

[root@Cluster-01 ~]# su - admin
Last login: Sun Apr 30 13:48:37 CST 2023 on pts/0
[admin@Cluster-01 ~]$ mkdir ~/zookeeper
[admin@Cluster-01 ~]$ ls
java  setups  zookeeper
[admin@Cluster-01 ~]$ cd ~/zookeeper
[admin@Cluster-01 zookeeper]$ tar -xzf ~/setups/zookeeper-3.4.9.tar.gz
[admin@Cluster-01 zookeeper]$
[admin@Cluster-01 zookeeper]$ ls
zookeeper-3.4.9

配置zookeeper的环境变量

vi ~/.bash_profile

对配置文件进行修改,在文件末尾添加以下内容:

#zookeeper environment
ZOOKEEPER_HOME=/home/admin/zookeeper/zookeeper-3.4.9
PATH=$ZOOKEEPER_HOME/bin:$PATH
export ZOOKEEPER_HOME PATH

image-20230430002913110

使环境变量生效,并查看环境变量是否设置成功

source ~/.bash_profile

echo $ZOOKEEPER_HOME

[admin@Cluster-01 zookeeper]$ source ~/.bash_profile
[admin@Cluster-01 zookeeper]$ echo $ZOOKEEPER_HOME
/home/admin/zookeeper/zookeeper-3.4.9

Zookeeper完全分布模式配置

cd

cd zookeeper/

mkdir data logs

[admin@Cluster-01 zookeeper]$ cd
[admin@Cluster-01 ~]$ cd zookeeper/
[admin@Cluster-01 zookeeper]$ mkdir data logs	
#分别创建用于存放数据文件的目录“data”和用于存放日志文件的目录“logs”
[admin@Cluster-01 zookeeper]$ ls
data  logs  zookeeper-3.4.9
[admin@Cluster-01 zookeeper]$ cd zookeeper-3.4.9/conf/
[admin@Cluster-01 conf]$ ls
configuration.xsl  log4j.properties  zoo_sample.cfg
[admin@Cluster-01 conf]$ cp zoo_sample.cfg zoo.cfg	# 拷贝生成Zookeeper的配置文件
[admin@Cluster-01 conf]$ ls
configuration.xsl  log4j.properties  zoo.cfg  zoo_sample.cfg

配置 zoo.cfg文件

vi zoo.cfg

以下配置项若已经存在则修改其对应值,若不存在则在配置文件末尾进行添加:

dataDir=/home/admin/zookeeper/data
dataLogDir=/home/admin/zookeeper/logs
server.1=Cluster-01:2888:3888
server.2=Cluster-02:2888:3888
server.3=Cluster-03:2888:3888
server.4=Cluster-04:2888:3888
server.5=Cluster-05:2888:3888

找到这一行,注释掉(前面加#)

dataDir=/tmp/zookeeper

image-20230430003819498

同步安装和配置

将“zookeeper”目录和“.bash_profile”文件发给集群中所有主机,发送目标用户为集群专用用户admin,发送目标路径为“/home/admin”,即集群专用用户admin的家目录。然后每台执行source ~/.bash_profile使环境变量生效

在Cluster-01 的admin用户下执行:

scp -r ~/zookeeper ~/.bash_profile admin@Cluster-02:/home/admin

scp -r ~/zookeeper ~/.bash_profile admin@Cluster-03:/home/admin

scp -r ~/zookeeper ~/.bash_profile admin@Cluster-04:/home/admin

scp -r ~/zookeeper ~/.bash_profile admin@Cluster-05:/home/admin

发送完成之后,在每台主机执行如下命令使环境变量生效,并查看环境变量是否配置成功

source ~/.bash_profile

echo $ZOOKEEPER_HOME

image-20230430004210071

如图,则在每台主机都添加成功

配置Zookeeper节点标识文件

该项的所有操作步骤分别在每台主机使用专门用于集群的用户admin进行

在集群中所有主机上使用命令“echo '’ > ~/zookeeper/data/myid”创建Zookeeper的节点标识文件,其中“”为节点的编号,与配置文件server.=Cluster-01:2888:3888中“server.”中的“*”相对应。

Cluster-01中:

echo ‘1’ > ~/zookeeper/data/myid

Cluster-02中:

echo ‘2’ > ~/zookeeper/data/myid

Cluster-03中:

echo ‘3’ > ~/zookeeper/data/myid

Cluster-04中:

echo ‘4’ > ~/zookeeper/data/myid

Cluster-05中:

echo ‘5’ > ~/zookeeper/data/myid

Zookeeper完全分布模式启动和验证

集群中所有主机的admin下使用命令zkServer.sh start启动Zookeeper服务的脚本,若启动过程没有报错,并且显示"STARTED"则表示启动成功

image-20230430004923545

启动成功后,在每台主机中使用 jps 命令可以查看进程,如果成功则会多出一个"QuorumPeerMain"的进程

image-20230430005118304

查看zookeeper服务的节点分配情况

若集群中只有一个“leader”节点,其余的均为“follower”节点,则集群的工作状态正常

image-20230430005352436

防火墙必须关掉。如果防火墙未关闭,状态是Error contacting service. It is probably not running.

Hadoop HA安装

集群规划

Cluster-01 Hadoop主节点、YARN主节点

Cluster-02 Hadoop备用主节点、YARN备用主节点

Cluster-03 YARN节点管理服务

Cluster-04 YARN节点管理服务

Cluster-05 YARN节点管理服务

软件版本

选用Hadoop的2.7.3版本,软件包名hadoop-2.7.3.tar.gz

Cluster-01的 admin 用户下进行,之后做远程发送同步即可

创建Hadoop目录用于存放安装Hadoop的相关文件

su - admin

mkdir ~/hadoop

cd ~/hadoop

tar -xzf ~/setups/hadoop-2.7.3.tar.gz

image-20230501002217973

配置环境变量

vi ~/.bash_profile

对配置文件进行修改,在文件末尾添加以下内容:

#hadoop environment
HADOOP_HOME=/home/admin/hadoop/hadoop-2.7.3
PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export HADOOP_HOME PATH

image-20230501002458162

使环境生效,并检查环境变量是否配置成功

source ~/.bash_profile

echo $HADOOP_HOME

hadoop version

[admin@Cluster-01 hadoop]$ source ~/.bash_profile
[admin@Cluster-01 hadoop]$ echo $HADOOP_HOME
/home/admin/hadoop/hadoop-2.7.3
[admin@Cluster-01 hadoop]$ hadoop version		# 查看Hadoop版本信息
Hadoop 2.7.3
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r baa91f7c6bc9cb92be5982de4719c1c8af91ccff
Compiled by root on 2016-08-18T01:41Z
Compiled with protoc 2.5.0
From source with checksum 2e4ce5f957ea4db193bce3734ff29ff4
This command was run using /home/admin/hadoop/hadoop-2.7.3/share/hadoop/common/hadoop-common-2.7.3.jar

Hadoop高可用完全分布模式配置

cd ~/hadoop/

mkdir tmp name data journal

cd ~/hadoop/hadoop-2.7.3/etc/hadoop

vi hadoop-env.sh

找到配置项“JAVA_HOME”所在行,将其改为以下内容:(去掉注释#)

export JAVA_HOME=/home/admin/java/jdk1.8.0_131

image-20230501004652002

vi core-site.xml

找到标签所在的位置,在其中添加如下的内容:

<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop-ha</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/admin/hadoop/tmp</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>Cluster-01:2181,Cluster-02:2181,Cluster-03:2181,Cluster-04:2181,Cluster-05:2181</value>
</property>

image-20230501005306569

vi hdfs-site.xml

找到标签所在的位置,在其中添加如下的内容:

<property>
<name>dfs.nameservices</name>
<value>hadoop-ha</value>
</property>
<property>
<name>dfs.ha.namenodes.hadoop-ha</name>
<value>name-1,name-2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.hadoop-ha.name-1</name>
<value>Cluster-01:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.hadoop-ha.name-1</name>
<value>Cluster-01:50070</value>
</property>
<property>
<name>dfs.namenode.rpc-address.hadoop-ha.name-2</name>
<value>Cluster-02:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.hadoop-ha.name-2</name>
<value>Cluster-02:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://Cluster-03:8485;Cluster-04:8485;Cluster-05:8485/hadoop-ha</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/admin/hadoop/journal</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.hadoop-ha</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/admin/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/admin/hadoop/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/admin/hadoop/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>

image-20230501005703043

image-20230501010333786

cp mapred-site.xml.template mapred-site.xml

vi mapred-site.xml

找到标签所在的位置,在其中添加如下的内容:

<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

image-20230501010603297

vi yarn-env.sh

找到如下这一行,取消注释,并修改JAVA_HOME的路径

#export JAVA_HOME=/home/y/libexec/jdk1.6.0/

修改为:

export JAVA_HOME=/home/admin/java/jdk1.8.0_131

image-20230501011014143

vi yarn-site.xml

找到标签所在的位置,在其中添加如下的内容:

<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yarn-ha</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>resource-1,resource-2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.resource-1</name>
<value>Cluster-01</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.resource-2</name>
<value>Cluster-02</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>Cluster-01:2181,Cluster-02:2181,Cluster-03:2181,Cluster-04:2181,Cluster-05:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>

image-20230501011229430

vi slaves

删除文件中原有的所有内容,然后添加集群中所有数据节点的主机名,每行一个主机的主机名,配置格式如下:

Cluster-03

Cluster-04

Cluster-05

image-20230501011358780

同步安装和配置

本操作只在Cluster-01下的admin用户下执行

将“hadoop”目录和“.bash_profile”文件发给集群中所有主机,发送目标用户为集群专用用户admin,发送目标路径为“/home/admin”,即集群专用用户admin的家目录

分别执行如下命令:

scp -r ~/hadoop ~/.bash_profile admin@Cluster-02:/home/admin

scp -r ~/hadoop ~/.bash_profile admin@Cluster-03:/home/admin

scp -r ~/hadoop ~/.bash_profile admin@Cluster-04:/home/admin

scp -r ~/hadoop ~/.bash_profile admin@Cluster-05:/home/admin

下面命令分别都在每台主机的admin用户下执行

source ~/.bash_profile

echo $HADOOP_HOME

hadoop version

image-20230501013313755

如图:5台主机都同步配置成功

Hadoop高可用完全分布模式格式化和启动

注意:格式化内容只需要在第一次启动时使用,之后关机再重新启动不需要再输入,Hadoop集群启动和关闭的顺序都非常重要

格式化

本项操作需要在所有同步通信节点的主机的admin用户下(即Cluster-03, Cluster-04 , Cluster-05)分别执行

hadoop-daemon.sh start journalnode

命令效果示例如下:

[admin@Cluster-03 ~]$ hadoop-daemon.sh start journalnode
starting journalnode, logging to /home/admin/hadoop/hadoop-2.7.3/logs/hadoop-admin-journalnode-Cluster-03.out
[admin@Cluster-03 ~]$ jps
1347 Jps
1292 JournalNode
[admin@Cluster-04 ~]$ hadoop-daemon.sh start journalnode
starting journalnode, logging to /home/admin/hadoop/hadoop-2.7.3/logs/hadoop-admin-journalnode-Cluster-04.out
[admin@Cluster-04 ~]$ jps
10578 Jps
10521 JournalNode
[admin@Cluster-05 ~]$ hadoop-daemon.sh start journalnode
starting journalnode, logging to /home/admin/hadoop/hadoop-2.7.3/logs/hadoop-admin-journalnode-Cluster-05.out
[admin@Cluster-05 ~]$ jps
10562 Jps
10508 JournalNode

再次注意:本操作只在第一次安装时执行。安装完成后,以及关机重启服务器后不需要再次执行

本项操作仅在主节点(Cluster-01)admin用户下执行

hadoop namenode -format

使用此命令,对HDFS进行格式化,若格式化过程中没有报错则表示格式化成功。

再次注意:安装完成后,以及关机重启服务器后不需要再次执行。千万不要多次格式化

image-20230501014433814

格式化完成后将“hadoop”目录下的“name”目录发给集群中所有备用主节点( Cluster-02)的主机,发送目标用户为集群专用用户admin,即当前与登录用户同名的用户,发送目标路径为“/home/admin/hadoop”,即集群专用用户admin家目录下的Hadoop相关文件的目录

scp -r ~/hadoop/name admin@Cluster-02:/home/admin/hadoop

image-20230501014531123

启动

zkServer.sh status 查看zookeeper状态

zkServer.sh start 若查看来未启动,则输入该命令启动zookeeper

image-20230501014855497

本条命令仅在主节点(Cluster-01)使用,且只有启动需要使用

hdfs zkfc -formatZK

若格式化过程中没有报错则表示格式化成功。格式化之前确保集群中各主机Zookeeper开启

再次注意:本操作只在第一次安装时执行。安装完成后,以及关机重启服务器后不需要再次执行。不要重复格式化

image-20230501015128815

本条命令在所有同步通信节点(Cluster-03, Cluster-04 , Cluster-05)使用,只需要第一次启动时使用一次

hadoop-daemon.sh stop journalnode

启动服务:仅在主节点(Cluster-01)使用命令,启动Hadoop集群

start-all.sh

在所有备用主节点(Cluster-02)的主机,使用此命令,启动YARN主节点服务

yarn-daemon.sh start resourcemanager

在主节点(Cluster-01)使用命令“jps”查看Java进程信息,若有名为“NameNode”、“ResourceManager”、“DFSZKFailoverController”的三个进程,则表示Hadoop集群的主节点启动成功。

image-20230501015747940

在Cluster-01、02、03中,使用命令“jps”查看Java进程信息,若有名为“DataNode”、“NodeManager”、“JournalNode”的三个进程,则表示Hadoop集群的数据节点启动成功

image-20230501020108214

在浏览器查看整个集群的HDFS状态

http://192.168.180.141:50070/ (ClusterIP)

image-20230501020241267

HBase高可用集群安装

选用HBase的1.2.3版本,软件包名hbase-1.2.3-bin.tar.gz(之前已上传至setups目录下)

集群规划

主机名服务描述
Cluster-01HBase主控节点
Cluster-02HBase备用主控节点
Cluster-03HBase Region服务
Cluster-04HBase Region服务
Cluster-05HBase Region服务

HBase有主节点和Region节点2类服务节点,高可用完全分布模式中需要满足主节点有备用的基本要求,所以需要两台或以上的主机作为主节点,而完全分布模式中需要满足Region有备份和数据处理能够分布并行的基本要求,所以要求两台或以上的主机作为Region节点

HBase基本安装配置

安装配置只需要在Cluster-01的admin用户下进行即可,之后做同步配置

解压事先上传好的hbase并配置环境变量

mkdir ~/hbase

cd ~/hbase

tar -xzf ~/setups/hbase-1.2.3-bin.tar.gz

[admin@Cluster-01 ~]$ mkdir ~/hbase			# 新建一个用于存放hbase相关文件的目录
[admin@Cluster-01 ~]$ cd hbase/
[admin@Cluster-01 hbase]$ tar -xzf ~/setups/hbase-1.2.3-bin.tar.gz
[admin@Cluster-01 hbase]$ ls
hbase-1.2.3

配置环境变量

vi ~/.bash_profile

在文件末尾添加以下内容:

#hbase environment
HBASE_HOME=/home/admin/hbase/hbase-1.2.3
PATH=$HBASE_HOME/bin:$PATH
export HBASE_HOME PATH

image-20230501220509958

检查配置是否成功

source ~/.bash_profile

echo $HBASE_HOME

hbase version

[admin@Cluster-01 hbase]$ source ~/.bash_profile		# 使配置的环境变量立即生效
[admin@Cluster-01 hbase]$ echo $HBASE_HOME
/home/admin/hbase/hbase-1.2.3
[admin@Cluster-01 hbase]$ hbase version
HBase 1.2.3
Source code repository git://kalashnikov.att.net/Users/stack/checkouts/hbase.git.commit revision=bd63744624a26dc3350137b564fe746df7a721a4
Compiled by stack on Mon Aug 29 15:13:42 PDT 2016
From source with checksum 0ca49367ef6c3a680888bbc4f1485d18

HBase高可用完全分布模式配置

cd ~/hbase/

mkdir tmp logs

cd hbase-1.2.3/conf/

[admin@Cluster-01 hbase]$ cd ~/hbase/
[admin@Cluster-01 hbase]$ mkdir tmp logs
[admin@Cluster-01 hbase]$ ls
hbase-1.2.3  logs  tmp
[admin@Cluster-01 hbase]$ cd hbase-1.2.3/conf/
[admin@Cluster-01 conf]$ ls
hadoop-metrics2-hbase.properties  hbase-env.cmd  hbase-env.sh  hbase-policy.xml  hbase-site.xml  log4j.properties  regionservers

修改相关配置文件

vi hbase-env.sh

此文件将会有四处修改的地方,都是在本文件中修改

1.找到配置项“JAVA_HOME”,将其值改为以下内容:(去掉注释#,注意顶格)

export JAVA_HOME=/home/admin/java/jdk1.8.0_131

image-20230501221326997

2.找到配置项“HBASE_CLASSPATH”,该项用于指定Hadoop的配置文件所在的路径,将其值改为以下内容:

export HBASE_CLASSPATH=/home/admin/hadoop/hadoop-2.7.3/etc/hadoop

image-20230501221452232

3.找到配置项“HBASE_LOG_DIR”,该项用于指定HBase的日志文件的本地存放路径,将其值改为以下内容:

export HBASE_LOG_DIR=/home/admin/hbase/logs

image-20230501221630779

4.找到配置项“HBASE_MANAGES_ZK”,该项用于关闭HBase自带的Zookeeper组件,将其值改为以下内容:

export HBASE_MANAGES_ZK=false

image-20230501221900731

vi hbase-site.xml

找到标签“”所在的位置,在其中添加如下的内容:

<property>
<name>hbase.rootdir</name>
<value>hdfs://Cluster-01:9000/user/admin/hbase</value>
</property>
<property>
<name>hbase.tmp.dir</name>
<value>/home/admin/hbase/tmp</value>
</property>
<property>
<name>zookeeper.session.timeout</name>
<value>240000</value>
<!--默认: 180000 :zookeeper 会话超时时间,单位是毫秒 -->
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>Cluster-01:2181,Cluster-02:2181,Cluster-03:2181,Cluster-04:2181,Cluster-05:2181</value>
</property>
<property>
<name>hbase.master.maxclockskew</name>
<value>60000</value>
</property>
<property>  
<name>hbase.master.info.port</name>  
<value>60010</value>  
</property> 
<property>
<name>hbase.regionserver.info.port</name>
<value>60020</value>
</property>

image-20230501222129486

vi regionservers

删除文件中原有的所有内容,然后添加集群中所有RegionServer节点的主机名,每行一个主机的主机名,配置格式如下:

Cluster-03

Cluster-04

Cluster-05

image-20230501222425018

创建配置文件backup-masters

touch backup-masters

vi backup-masters

添加集群中所有备用主节点的主机名,每行一个主机的主机名,配置格式如下:

Cluster-02

image-20230501222603303

同步安装配置以及系统时间

将“hbase”目录和“.bash_profile”文件发给集群中所有主机,发送目标用户为集群专用用户admin,即当前与登录用户同名的用户,发送目标路径为“/home/admin”,即集群专用用户admin的家目录

在Cluster-01 的admin用户下执行:

分别执行如下命令:

scp -r ~/hbase ~/.bash_profile admin@Cluster-02:/home/admin

scp -r ~/hbase ~/.bash_profile admin@Cluster-03:/home/admin

scp -r ~/hbase ~/.bash_profile admin@Cluster-04:/home/admin

scp -r ~/hbase ~/.bash_profile admin@Cluster-05:/home/admin

下面命令分别都在每台主机的admin用户下执行:

source ~/.bash_profile

echo $HBASE_HOME

hbase version

image-20230501223357105

设置硬件时间同步

本项操作需要每台主机在root用户下进行(5台主机都要执行)

su - root

hwclock -w # 将设置的时间同步到硬件时钟

在虚拟机选项卡中开启硬件时间同步

选中虚拟机节点->右键->设置->选项,开启时间同步(5台主机均要操作)

image-20230501223847014

HBase高可用完全分布模式启动和验证

注意:

  1. 该项的所有操作步骤使用专门用于集群的用户admin进行。
  2. 启动HBase集群之前首先确保Zookeeper集群已被开启状态。 Zookeeper的启动需要分别在每个计算机的节点上手动启动
  3. 启动HBase集群之前首先确保Hadoop集群已被开启状态,Hadoop只需要在主节点执行启动命令。

执行命令:

zkServer.sh status # 5台主机均执行

zkServer.sh start # 如果查看到zookeeper是开启的 则不需要再执行这条命令

start-all.sh # 只在Cluster-01执行,必须确保zookeeper为开启状态

yarn-daemon.sh start resourcemanager # Cluster-02 执行

start-hbase.sh # 只在Cluster-01执行

image-20230501224631040

启动habase必须满足以下两个条件:

  • 1.启动hbase时,必须在第一台主机启动,因为我们设置的初始备用主master为第二台
  • 2.必须保证第一台主机的hadoop的namenode状态为active

Hbase启动成功,各主机会多出这些进程

image-20230501225150943

浏览器访问

192.168.180.141:60010 (需要换成你自己的IP地址)

image-20230501225254951

MySQL集群平台的搭建

选用软件版本

选用MySQL Cluster的7.5.7版本,软件包选择Linux的通用包Generic,软件包名mysql-cluster-gpl-7.5.7-linux-glibc2.12-x86_64.tar.gz

MySQL Cluster的安装和使用需要依赖于软件libaio,选用该软件的0.3.109版本,软件包名libaio-0.3.109-13.el7.x86_64.rpm(事先已经上传至Cluster-01的admin用户/setups目录下)

集群规划

MySQL数据库的集群版本有管理节点、数据服务节点、SQL服务节点总共3类服务节点,集群中要求至少一台单独的主机作为管理节点,而集群模式需要满足数据有备份和数据处理能够分布并行的基本要求,所以需要两台或以上的主机作为数据服务节点以及两台或以上的主机作为SQL服务节点,具体规划如下:

主机名服务描述
Cluster-01管理节点
Cluster-02数据服务节点
Cluster-03数据服务节点
Cluster-04SQL服务节点
Cluster-05SQL服务节点

架构图

image-20230506153739289

MySQL集群版安装环境配置

相关软件准备

本项操作需要在每台主机的root用户下进行操作

查找本机是否安装mysql相关

rpm -qa | grep mysql

列出本机yum方式安装的MySQL软件

yum list installed | grep mysql

(如果查找出来则需要先删除掉,没有查找出来则不需要此操作,一般新建的虚拟机都没有)

rpm -e --nodeps 软件包名

yum -y remove mysql

检查是否已经安装了MariaDB软件,Centos7.2以上都自带,需要将其删除

rpm -qa | grep mariadb

删除mariadb相关

rpm -e --nodeps 软件名

# 示例如下
[root@Cluster-01 ~]# rpm -qa | grep mariadb
mariadb-libs-5.5.56-2.el7.x86_64
[root@Cluster-01 ~]# rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64

检查本机是否yum方式安装了libaio软件,MySQL数据库的安装需要依赖于该软件

rpm -qa | grep libaio

如果没有则需要安装, 有了则忽略这一步

rpm -ivh 软件包路径 (软件包路径为/home/admin/setups/libaio-0.3.109-13.el7.x86_64.rpm )

rpm -ivh /home/admin/setups/libaio-0.3.109-13.el7.x86_64.rpm

检查mysql用户组是否存在(新建虚拟机都没有该用户组)

cat /etc/group | grep mysql

若不存在则使用此命令创建mysql用户组

groupadd mysql

检查mysql用户是否存在

cat /etc/passwd | grep mysql

不存在则使用此命令创建mysql用户并加入到mysql用户组中

useradd -r -g mysql mysql

-r表示该用户是内部用户,不允许外部登录

解压软件

该项步骤只需要在cluster-01的root用户下进行即可,之后远程发送到其他4台主机上

新建一个mysql目录,用于存放MySQL相关软件

mkdir /mysql

cd /mysql

tar -xzvf /home/admin/setups/mysql-cluster-gpl-7.5.7-linux-glibc2.12-x86_64.tar.gz

解压好之后远程发送到其他主机,由于root用户没有作免密登录,所以要输入root用户的密码

scp -r /mysql/mysql-cluster-gpl-7.5.7-linux-glibc2.12-x86_64/ root@Cluster-02:/mysql/

scp -r /mysql/mysql-cluster-gpl-7.5.7-linux-glibc2.12-x86_64/ root@Cluster-03:/mysql/

scp -r /mysql/mysql-cluster-gpl-7.5.7-linux-glibc2.12-x86_64/ root@Cluster-04:/mysql/

scp -r /mysql/mysql-cluster-gpl-7.5.7-linux-glibc2.12-x86_64/ root@Cluster-05:/mysql/

修改相关权限

本项操作需要在五台主机的root目录下进行

cd /usr/local

创建一个链接指向MySQL Cluster所在的目录

ln -s /mysql/mysql-cluster-gpl-7.5.7-linux-glibc2.12-x86_64 mysql

进入刚刚创建链接的mysql目录

cd mysql

创建存放MySQL数据库数据的目录

mkdir data

更改该数据目录的权限设置

chmod 770 data

chown -R mysql .

chgrp -R mysql .

image-20230506161944555

配置MySQL相关的环境变量,修改系统的配置文件

在文件末尾添加以下内容:

#mysql-cluster environment
MYSQL_CLUSTER_HOME=/usr/local/mysql
PATH=$MYSQL_CLUSTER_HOME/bin:$PATH
export MYSQL_CLUSTER_HOME PATH

image-20230506162223021

更新环境变量使其立即生效

source /etc/profile

验证环境变量是否添加成功

echo $MYSQL_CLUSTER_HOME

echo $PATH

image-20230506162419346

配置管理节点Cluster-01

本项操作只需要在Cluster-01进行

进入MySQL Cluster软件所在目录

cd /usr/local/mysql

创建存放MySQL Cluster数据的目录

mkdir mysql-cluster

更改"mysql-cluster"目录的所属用户和所属组

chown -R mysql mysql-cluster

chgrp -R mysql mysql-cluster

创建用于存放MySQL Cluster管理节点配置文件的目录

mkdir etc

cd etc

创建MySQL Cluster管理节点的配置文件

touch config.ini

vi config.ini (修改配置文件)

在其中添加如下内容:

[NDB_MGMD DEFAULT]
DataDir=/usr/local/mysql/data
[NDBD DEFAULT]
NoOfReplicas=2
DataMemory=512M
IndexMemory=32M
DataDir=/usr/local/mysql/data
[NDB_MGMD]
NodeId=1
HostName=Cluster-01
[NDBD]
NodeId=2
HostName=Cluster-02
[NDBD]
NodeId=3
HostName=Cluster-03
[MYSQLD]
NodeId=4
HostName=Cluster-04
[MYSQLD]
NodeId=5
HostName=Cluster-05

image-20230506163142287

更改当前"etc"目录的所属用户和所属组

chown -R mysql .

chgrp -R mysql .

启动MySQL Cluster的管理节点

ndb_mgmd -f /usr/local/mysql/etc/config.ini --initial

注意:首次启动或配置修改之后启动需要添加参数**–initial**,之后正常启动时不需要添加参数**–initial**

image-20230506163457085

查看系统进程信息

若存在信息中包含“ndb_mgmd”关键字的进程则表示MySQL Cluster的管理节点启动成功

ps -ef | grep ndb_mgmd

image-20230506163606897

进入MySQL Cluster管理节点的控制台,查看节点连接情况

ndb_mgm

show

exit

image-20230506163759891

配置数据服务节点Cluster-02、Cluster-03

本项操作仅需要在Cluster-02,Cluster-03进行

进入系统配置文件所在目录

cd /etc

创建MySQL Cluster数据服务节点的配置文件

touch my.cnf

vi my.cnf

在其中添加如下内容:

[MYSQLD]
ndbcluster
ndb-connectstring=Cluster-01
[MYSQL_CLUSTER]
ndb-connectstring=Cluster-01

image-20230506164457269

启动数据服务节点

ndbd --initial

注意:首次启动或配置修改之后启动需要添加参数**–initial**,正常启动时不需要添加参数**–initial**

查看系统进程信息

若存在信息中包含“ndbd”关键字的进程则表示MySQL Cluster的数据服务节点启动成功

ps -ef | grep ndbd

进入MySQL Cluster管理节点的控制台,查看节点连接情况

ndb_mgm

show

exit

image-20230506164851135

配置SQL服务节点Cluster-04、Cluster-05

本项操作仅需要在Cluster-04、Cluster-05进行=

进入系统配置文件所在目录

cd /etc

创建MySQL Cluster数据服务节点的配置文件

touch my.cnf

vi my.cnf

在其中添加如下内容:

[MYSQLD]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
ndbcluster
ndb-connectstring=Cluster-01
[MYSQL_CLUSTER]
ndb-connectstring=Cluster-01

image-20230506165121513

对MySQL数据库的安装进行初始化

注意:执行该命令后会有一些提示信息,特别注意最后一行的“[Note]”相关信息

mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

image-20230506165349536

将MySQL加入到系统的可控制启动服务目录内,并将服务名命名为"mysql"

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql

启动SQL服务节点

service mysql start

查看系统进程信息

若存在信息中包含“mysql”关键字的进程则表示MySQL Cluster的SQL服务节点启动成功

ps -ef | grep mysql

进入MySQL Cluster管理节点的控制台,查看节点连接情况

ndb_mgm

show

exit

image-20230506165738154

登录MySQL数据库

注意:这里会输入密码,初始密码就是刚刚执行命令生成的临时密码

mysql -u root -p (直接复制即可,复制了之后是看不到密码显示的,按回车即可登录)

image-20230506170437977

在MySQL控制台使用此命令,修改密码,这里密码我设置的是 mysqlabc 可以设置成其他密码

SET PASSWORD=PASSWORD(‘mysqlabc’);

切换到mysql数据库

USE mysql;

修改数据库的root用户所接收请求来源的范围,允许远程登录

UPDATE user SET host=‘%’ WHERE user=‘root’;

查看数据库的host信息

select host from user where user = ‘root’;

刷新数据库的权限信息使新配置的权限生效

FLUSH PRIVILEGES;

退出控制台

exit

image-20230506170928911

MYSQL集群验证(本项只是验证功能,可以不做)

在Cluster-04或Cluster-05中的一台主机进行操作验证

进入mysql控制台

mysql -u root -p (密码就是刚刚修改之后的mysqlabc)

创建数据库test

CREATE DATABASE test;

查看数据库

SHOW DATABASES;

image-20230506171533327

在另外一台Cluster-05或者04进行验证,之前选择的04 这里就选择05

mysql -u root -p

SHOW DATABASES;

image-20230506171713831

查看MySQL集群各节点连接状态

可以在五台主机中任意一台主机查看

ndb_mgm -e show

image-20230506171856204

MySQL集群的启动和关闭顺序

启动

启动顺序:

管理节点(Cluster-01)—>数据节点(Cluster-02,03)—>SQL服务节点(Cluster-04,05)

启动命令:(依次执行)

ndb_mgmd -f /usr/local/mysql/etc/config.ini (Cluster-01)

ndbd (Cluster-02 ,Cluster-03)

service mysql start (Cluster-04 ,Cluster-05)

关闭

关闭命令:(依次执行)

service mysql stop (Cluster-04 ,Cluster-05)

ndb_mgm (Cluster-01,进入控制台)

shutdown

exit (退出控制台)

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
搭建两套Hadoop高可用集群需要三台服务器,其中两台作为NameNode节点,一台作为DataNode节点。下面是详细部署步骤: 1. 安装JDK和Hadoop软件 在三台服务器上安装JDK和Hadoop软件。可以通过官网下载最新版本的Hadoop软件,也可以通过yum命令安装。 2. 配置SSH免密码登录 在三台服务器上配置SSH免密码登录,以便节点之间可以互相通信。可以通过ssh-keygen命令生成秘钥对,并将公钥分发到所有节点上。 3. 配置Hadoop集群参数 在两台NameNode节点上,需要配置hdfs-site.xml和core-site.xml文件,其中hdfs-site.xml文件中需要配置HA相关参数,如下所示: ``` <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.client.failover.proxy.provider.mycluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> ``` 其中,dfs.nameservices为集群名称,dfs.ha.namenodes.mycluster为NameNode节点列表,dfs.namenode.rpc-address.mycluster.nn1和dfs.namenode.rpc-address.mycluster.nn2为NameNode节点的RPC地址,dfs.namenode.http-address.mycluster.nn1和dfs.namenode.http-address.mycluster.nn2为NameNode节点的HTTP地址,dfs.client.failover.proxy.provider.mycluster为故障转移代理提供者。 在DataNode节点上,需要配置hdfs-site.xml和core-site.xml文件,其中hdfs-site.xml文件中需要配置DataNode相关参数,如下所示: ``` <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/data/hadoop/hdfs/data</value> </property> <property> <name>dfs.client.use.datanode.hostname</name> <value>true</value> </property> <property> <name>dfs.permissions.enabled</name> <value>false</value> </property> ``` 其中,dfs.replication为副本数,dfs.datanode.data.dir为DataNode节点的数据存储路径,dfs.client.use.datanode.hostname为是否使用DataNode的主机名,dfs.permissions.enabled为是否启用权限控制。 4. 启动Hadoop集群 在两台NameNode节点上,启动Hadoop集群,如下所示: ``` hadoop-daemon.sh start journalnode hdfs namenode -format hdfs zkfc -formatZK hadoop-daemon.sh start namenode hadoop-daemon.sh start zkfc ``` 在DataNode节点上,启动Hadoop集群,如下所示: ``` hadoop-daemon.sh start datanode ``` 5. 验证Hadoop集群 在浏览器中访问NameNode节点的HTTP地址,如node1:50070,可以看到Hadoop集群的状态和节点信息。可以通过hdfs命令行工具上传、下载文件,验证Hadoop集群的功能。 6. 配置故障转移 在两台NameNode节点上,配置故障转移功能,如下所示: ``` hdfs haadmin -transitionToActive nn1 hdfs haadmin -getServiceState nn1 hdfs haadmin -transitionToStandby nn1 hdfs haadmin -getServiceState nn1 ``` 其中,hdfs haadmin命令用于管理HA相关的操作,-transitionToActive和-transitionToStandby用于切换Active和Standby节点,-getServiceState用于获取节点状态。 以上就是搭建两套Hadoop高可用集群详细部署步骤。需要注意的是,在实际生产环境中,还需要对Hadoop集群进行优化和安全加固。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值