集群基础环境搭建
Flink可以运行在所有类unix环境中,例如:Linux,Mac OS 和Windows,一般企业中使用Flink基于的都是Linux环境,后期我们进行Flink搭建和其他框架整合也是基于linux环境,使用的是Centos7.6版本,JDK使用JDK8版本(Hive版本不支持JDK11,所以这里选择JDK8),本小节主要针对Flink集群使用到的基础环境进行配置,不再从零搭建Centos系统,另外对后续整合使用到的技术框架也一并进行搭建,如果你目前已经有对应的基础环境,可以忽略本小节,Linux及各个搭建组件使用版本如下表所示。
系统或组件名称
版本
Centos
CentOS-7-x86_64-DVD-1810
JDK
jdk-8u181-linux-x64
MySQL
5.7.32
Zookeeper
3.6.3
HDFS
3.3.4
Hive
3.1.3
Hbase
2.5.1
Redis
6.2.7
Kafka
3.3.1
一、Centos7节点配置
这里准备5台Linux节点,节点名称和ip信息如下,我们可以从头搭建各个Linux节点也可以基于已有快照创建各个Linux节点。
节点IP
节点名称
192.168.179.4
node1
192.168.179.5
node2
192.168.179.6
node3
192.168.179.7
node4
192.168.179.8
node5
这里默认已经创建好以上各个节点,并且每个节点分配资源为4核2G,下面进行节点的其他配置。
1、配置各个节点的Ip
启动每台节点,在对应的节点路径"/etc/sysconfig/network-scripts"下配置ifg-ens33文件配置IP(注意,不同机器可能此文件名称不同,一般以ifcfg-xxx命名),以配置ip 192.168.179.4为例,ifcfg-ens33配置内容如下:
TYPE=Ethernet
BOOTPROTO=static #使用static配置
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
ONBOOT=yes #开机启用本配置
IPADDR=192.168.179.4 #静态IP
GATEWAY=192.168.179.2 #默认网关
NETMASK=255.255.255.0 #子网掩码
DNS1=192.168.179.2 #DNS配置 可以与默认网关相同
以上其他节点配置只需要修改对应的ip即可,配置完成后,在每个节点上执行如下命令重启网络服务:
systemctl restart network.service
检查每个节点ip执行如下命令:
ip addr
2、配置主机名
在每台节点上修改/etc/hostname,配置对应的主机名称,参照节点IP与节点名称对照表分别为:node1、node2、node3、node4、node5。配置完成后 需要重启 各个节点,才能正常显示各个主机名。
3、关闭防火墙
执行如下命令确定各个节点上的防火墙开启情况,需要将各个节点上的防火墙关闭:
#检查防火墙状态
firewall-cmd --state
#临时关闭防火墙(重新开机后又会自动启动)
systemctl stop firewalld 或者systemctl stop firewalld.service
#设置开机不启动防火墙
systemctl disable firewalld
4、关闭SELinux
SELinux就是Security-Enhanced Linux的简称,安全加强的linux。传统的linux权限是对文件和目录的owner, group和other的rwx进行控制,而SELinux采用的是委任式访问控制,也就是控制一个进程对具体文件系统上面的文件和目录的访问,SELinux规定了很多的规则,来决定哪个进程可以访问哪些文件和目录。虽然SELinux很好用,但是在多数情况我们还是将其关闭,因为在不了解其机制的情况下使用SELinux会导致软件安装或者应用部署失败。
在每台节点/etc/selinux/config中将SELINUX=enforcing改成SELINUX=disabled即可。
5、配置阿里云yum源
后续为了方便在Linux节点上安装各个软件,我们将yum源改成国内阿里云yum源,这样下载软件速度快一些,每个节点具体操作按照以下步骤进行。
#安装wget,wget是linux最常用的下载命令(有些系统默认安装,可忽略)
yum -y install wget
#备份当前的yum源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
#下载阿里云的yum源配置
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
#清除原来文件缓存,构建新加入的repo结尾文件的缓存
yum clean all
yum makecache
配置完成后,可以在每台节点上安装"vim"命令,方便后续操作:
#在各个节点上安装 vim命令yum -y install vim
6、设置Linux 系统显示中文/英文
Linux系统默认显示不支持中文,可以通过配置支持显示中文。每台节点具体操作参照如下步骤。
#查看当前系统语言
echo $LANG
#显示结果如下,说明默认支持显示英文
en_US.UTF-8
#临时修改系统语言为中文,重启节点后恢复英文
LANG="zh_CN.UTF-8"
#如果想要永久修改系统默认语言为中文,需要创建/修改/etc/locale.conf文件,写入以下内容,设置完成后需要重启各节点。
LANG="zh_CN.UTF-8"
7、设置自动更新时间
后续基于Linux各个节点搭建HDFS时,需要各节点的时间同步,可以通过设置各个节点自动更新时间来保证各个节点时间一致,具体按照以下操作来执行。
7.1、修改本地时区及ntp服务
yum -y install ntp
rm -rf /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
/usr/sbin/ntpdate -u pool.ntp.org
7.2、自动同步时间
设置定时任务,每10分钟同步一次,配置/etc/crontab文件,实现自动执行任务。建议直接crontab -e 来写入定时任务。使用crontab -l 查看当前用户定时任务。
#各个节点执行 crontab -e 写入以下内容
*/10 * * * * /usr/sbin/ntpdate -u pool.ntp.org >/dev/null2>&1
#重启定时任务
service crond restart
#查看日期
date
8、设置各个节点之间的ip映射
每个节点都有自己的IP和主机名,各个节点默认进行文件传递或通信时需要使用对应的ip进行通信,后续为了方便各个节点之间的通信和文件传递,可以配置各个节点名称与ip之间的映射,节点之间通信时可以直接写对应的主机名称,不必写复杂的ip。每台节点具体操作按照以下操作进行。
进入每台节点的/etc/hosts下,修改hosts文件,vim /etc/hosts:
#在文件后面追加以下内容
192.168.179.4 node1
192.168.179.5 node2
192.168.179.6 node3
192.168.179.7 node4
192.168.179.8 node5
各个节点配置完成后,可以使用ping命令互相测试使用节点名称是否可以正常通信。
[root@node5 ~]# ping node1
PING node1 (192.168.179.4) 56(84) bytes of data.
64 bytes from node1 (192.168.179.4): icmp_seq=1 ttl=64 time=0.892 ms
64 bytes from node1 (192.168.179.4): icmp_seq=2 ttl=64 time=0.415 ms
... ...
9、配置节点之间免密访问
后续搭建HDFS集群时需要Linux各个节点之间免密,节点两两免秘钥的根本原理如下:假设A节点需要免秘钥登录B节点,只要B节点上有A节点的公钥,那么A节点就可以免密登录当前B节点。具体操作步骤如下。
9.1、安装ssh客户端
需要在每台节点上安装ssh客户端,否则,不能使用ssh命令(最小化安装Liunx,默认没有安装ssh客户端),这里在Centos7系统中默认已经安装,此步骤可以省略:
yum -y install openssh-clients
9.2、创建.ssh目录
在每台节点执行如下命令,在每台节点的"~"目录下,创建.ssh目录,注意,不要手动创建这个目录,因为有权限问题。
cd~
ssh localhost
#这里会需要输入节点密码#
exit
9.3、配置各节点向一台节点通信免密
在每台节点上执行如下命令,给当前节点创建公钥和私钥:
ssh-keygen -t rsa -P ''-f ~/.ssh/id_rsa
将node1、node2、node3、node4、node5的公钥copy到node1上,这样这五台节点都可以免密登录到node1。命令如下:
#在node1上执行如下命令,需要输入密码
ssh-copy-id node1 #会在当前~/.ssh目录下生成authorized_keys文件,文件中存放当前node1的公钥#
#在node2上执行如下命令,需要输入密码
ssh-copy-id node1 #会将node2的公钥追加到node1节点的authorized_keys文件中
#在node3上执行如下命令,需要输入密码
ssh-copy-id node1 #会将node3的公钥追加到node1节点的authorized_keys文件中
#在node4上执行如下命令,需要输入密码
ssh-copy-id node1 #会将node4的公钥追加到node1节点的authorized_keys文件中
#在node5上执行如下命令,需要输入密码
ssh-copy-id node1 #会将node5的公钥追加到node1节点的authorized_keys文件中
9.4、各节点免密
将node1节点上/.ssh/authorized_keys拷贝到node2、node3、node4、node5各节点的/.ssh/目录下,执行如下命令:
scp ~/.ssh/authorized_keys node2:`pwd`
scp ~/.ssh/authorized_keys node3:`pwd`
scp ~/.ssh/authorized_keys node4:`pwd`
scp ~/.ssh/authorized_keys node5:`pwd`
以上node1向各个几点发送文件时需要输入密码,经过以上步骤,节点两两免密完成。
二、安装JDK
按照以下步骤在各个节点上安装JDK8。
1、各个节点创建/software 目录,上传并安装 jdk8 rpm包
rpm -ivh /software/jdk-8u181-linux-x64.rpm
以上命令执行完成后,会在每台节点的/user/java下安装jdk8。
2、配置jdk环境变量
在每台节点上配置jdk的环境变量:
export JAVA_HOME=/usr/java/jdk1.8.0_181-amd64
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
每台节点配置完成后,最后执行"source /etc/profile"使配置生效。
三、安装MySQL
1、节点划分
在Linux集群中我们选择一台节点进行MySQL安装,这里选择在node2节点上安装MySQL。
节点IP
节点名称
mysql
192.168.179.5
node2
★
2、安装MySQL
在Centos6中安装mysql可以直接执行命令:
yum install –y mysql-server
但是在Centos7中yum源中没有自带mysql的安装包,需要执行命令下载mysql 的rpm配置文件,然后进行repo的安装,安装repo后在/etc/yum.repos.d路径下会有对应的mysql repo配置,然后再安装mysql,这里安装的mysql是5.7版本。命令如下:
#下载mysql repo,下载完成后会在当前执行命令目录下生成 rpm -ivh mysql57-community-release-el7-9.noarch.rpm文件。
[root@node2 ~]# wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
#安装repo,安装完成后再/etc/yum.repos.d 目录下会生成mysql的 repo文件
[root@node2 ~]# rpm -ivh mysql57-community-release-el7-9.noarch.rpm
#安装mysql
[root@node2 ~]# yum install mysql-server -y --nogpgcheck
执行完成之后,启动mysql:systemctl start mysqld,也可以使用service mysqld start启动msyql。
以上安装mysql的方式是直接从外网下载mysql 5.7版本安装,由于网络慢等原因导致mysql下载安装速度慢。我们也可以选择在mysql官网中找到linux版本对应的mysql版本先下载好,然后直接使用rpm安装。安装mysql rpm包有依赖关系,安装的顺序如下(--force:强制安装 --nodeps:不检查环境依赖):
rpm -ivh mysql-community-common-5.7.32-1.el7.x86_64.rpm --force --nodeps
rpm -ivh mysql-community-libs-5.7.32-1.el7.x86_64.rpm --force --nodeps
rpm -ivh mysql-community-client-5.7.32-1.el7.x86_64.rpm --force --nodeps
rpm -ivh mysql-community-server-5.7.32-1.el7.x86_64.rpm --force --nodeps
以上安装完成后,执行如下命令来启动MySQL:
service mysqld start
3、配置MySQL
mysql5.7开始初始登录mysql需要使用初始密码,启动后登录mysql需要指定安装时的临时密码,使用命令:grep 'temporary password' /var/log/mysqld.log 获取临时密码后,执行如下语句:
#使用临时密码登录mysql
[root@node2 log]# mysql -u root -pK-BJt9jV0jb0#默认mysql密码需要含有数字、大小写字符、下划线等,这里设置密码验证级别为低即可
mysql> setglobal validate_password_policy=LOW;
#默认mysql密码设置长度是8位,这里修改成6位
mysql> setglobal validate_password_length=6;
#初始登录mysql必须重置密码才能操作,这里先修改密码为 123456
mysql> alter user 'root'@'localhost' identified by'123456';
也可以删除usr表中的数据,重新设置下mysql root密码也可以,命令如下:
[root@node2 java]# mysql -u root -p123456
mysql> use mysql;
mysql> selectuser,authentication_string fromuser;
mysql> deletefromuser;
mysql> GRANTALLPRIVILEGESON *.* TO'root'@'%' IDENTIFIED BY'123456'WITHGRANTOPTION;
mysql> flush privileges;
执行如下命令,将mysql设置成开机启动,如果不设置开机启动,后期每次重启节点后需要手动启动MySQL。
#设置mysql 开机自动启动
[root@cm1 ~]# systemctl enable mysqld
[root@cm1 ~]# systemctl list-unit-files |grep mysqld
以上设置密码验证级别和密码长度验证当mysql重启后还需要重复设置,如果mysql中密码设置不想要太复杂或者密码长度不想设置长度验证,可以在"/etc/my.cnf"中配置如下内容:
[mysqld]plugin-load=validate_password.so
validate-password=off
配置完成后执行"systemctl restart mysqld",重启mysql即可。
4、Mysql密码忘记处理
如果MySQL安装后,登录密码忘记,可以按照以下步骤来解决。
4.1、修改/etc/my.conf 文件,在mysqld 标签下加入以下参数
[mysqld]
skip-grant-tables
配置完成后重启MySQL服务:service mysqld restart
4.2、执行如下命令修改mysql root用户密码
# 使用mysql库
mysql> use mysql;
# 更新修改root用户密码
mysql> update user set authentication_string = password ( '123456' ) where user = 'root';
更新完密码之后,去掉/etc/my.cnf中的skip-grant-tables配置,重启mysql服务使用更新后的密码登录MySQL即可。
四、安装Zookeeper
1、节点划分
这里搭建zookeeper版本为3.6.3,搭建zookeeper对应的角色分布如下:
节点IP
节点名称
Zookeeper
192.168.179.4
node1
192.168.179.5
node2
192.168.179.6
node3
★
192.168.179.7
node4
★
192.168.179.8
node5
★
2、安装Zookeeper
2.1、上传zookeeper 并解压 , 配置环境变量
将zookeeper安装包上传到node3节点/software目录下并解压:
[root@node3 software]# tar -zxvf ./apache-zookeeper-3.6.3-bin.tar.gz
在node3节点配置环境变量:
#进入vim /etc/profile,在最后加入:export ZOOKEEPER_HOME=/software/apache-zookeeper-3.6.3-bin/
export PATH=$PATH:$ZOOKEEPER_HOME/bin
#使配置生效source /etc/profile
2.2、在node3 节点配置 zookeeper
进入"$ZOOKEEPER_HOME/conf"修改zoo_sample.cfg为zoo.cfg:
[root@node3 conf]# mv zoo_sample.cfg zoo.cfg
配置zoo.cfg中内容如下:
tickTime=2000initLimit=10syncLimit=5dataDir=/opt/data/zookeeper
clientPort=2181server.1=node3:2888:3888server.2=node4:2888:3888server.3=node5:2888:3888
2.3、将配置好的zookeeper 发送到 node4,node5节点
[root@node3 software]# scp -r apache-zookeeper-3.6.3-bin node4:/software/
[root@node3 software]# scp -r apache-zookeeper-3.6.3-bin node5:/software/
2.4、各个节点上创建数据目录,并配置zookeeper环境变量
在node3,node4,node5各个节点上创建zoo.cfg中指定的数据目录"/opt/data/zookeeper"。
mkdir -p /opt/data/zookeeper
在node4,node5节点配置zookeeper环境变量
#进入vim /etc/profile,在最后加入:export ZOOKEEPER_HOME=/software/apache-zookeeper-3.6.3-bin/
export PATH=$PATH:$ZOOKEEPER_HOME/bin
#使配置生效source /etc/profile
2.5、各个节点创建节点 ID
在node3,node4,node5各个节点路径"/opt/data/zookeeper"中添加myid文件分别写入1,2,3:
#在node3的/opt/data/zookeeper中创建myid文件写入1
#在node4的/opt/data/zookeeper中创建myid文件写入2
#在node5的/opt/data/zookeeper中创建myid文件写入3
2.6、各个节点启动zookeeper, 并检查进程状态
#各个节点启动zookeeper命令
zkServer.sh start#检查各个节点zookeeper进程状态
zkServer.sh status
五、安装HDFS
1、节点划分
这里安装HDFS版本为3.3.4,搭建HDFS对应的角色在各个节点分布如下:
节点IP
节点名称
NN
DN
ZKFC
JN
RM
NM
192.168.179.4
node1
★
★
★
192.168.179.5
node2
★
★
★
192.168.179.6
node3
★
★
★
192.168.179.7
node4
★
★
★
192.168.179.8
node5
★
★
★
2、安装配置HDFS
2.1、各个节点安装HDFS HA自动切换必须的依赖
yum -y install psmisc
2.2、上传下载好的Hadoop 安装包到 node1节点上,并解压
[root@node1 software]# tar -zxvf ./hadoop-3.3.4.tar.gz
2.3、在node1 节点上配置 Hadoop的环境变量
[root@node1 software]# vim /etc/profile
export HADOOP_HOME=/software/hadoop-3.3.4/
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:
#使配置生效
source/etc/profile
2.4、配置$HADOOP_HOME/etc/hadoop 下的 hadoop-env.sh文件
#导入JAVA_HOMEexport JAVA_HOME=/usr/java/jdk1.8.0_181-amd64/
2.5、配置$HADOOP_HOME/etc/hadoop 下的 hdfs-site.xml文件
<configuration>
<property>
<!--这里配置逻辑名称,可以随意写 -->
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<!-- 禁用权限 -->
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
<property>
<!-- 配置namenode 的名称,多个用逗号分割 -->
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<property>
<!-- dfs.namenode.rpc-address.[nameservice ID].[name node ID] namenode 所在服务器名称和RPC监听端口号 -->
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>node1:8020</value>
</property>
<property>
<!-- dfs.namenode.rpc-address.[nameservice ID].[name node ID] namenode 所在服务器名称和RPC监听端口号 -->
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>node2:8020</value>
</property>
<property>
<!-- dfs.namenode.http-address.[nameservice ID].[name node ID] namenode 监听的HTTP协议端口 -->
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>node1:50070</value>
</property>
<property>
<!-- dfs.namenode.http-address.[nameservice ID].[name node ID] namenode 监听的HTTP协议端口 -->
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>node2:50070</value>
</property>
<property>
<!-- namenode 共享的编辑目录, journalnode 所在服务器名称和监听的端口 -->
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node3:8485;node4:8485;node5:8485/mycluster</value>
</property>
<property>
<!-- namenode高可用代理类 -->
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<!-- 使用ssh 免密码自动登录 -->
<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>
<!-- journalnode 存储数据的地方 -->
<name>dfs.journalnode.edits.dir</name>
<value>/opt/data/journal/node/local/data</value>
</property>
<property>
<!-- 配置namenode自动切换 -->
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
</configuration>
2.6、配置$HADOOP_HOME/ect/hadoop/core-site.xml
<configuration>
<property>
<!-- 为Hadoop 客户端配置默认的高可用路径 -->
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<!-- Hadoop 数据存放的路径,namenode,datanode 数据存放路径都依赖本路径,不要使用 file:/ 开头,使用绝对路径即可
namenode 默认存放路径 :file://${hadoop.tmp.dir}/dfs/name
datanode 默认存放路径 :file://${hadoop.tmp.dir}/dfs/data
-->
<name>hadoop.tmp.dir</name>
<value>/opt/data/hadoop/</value>
</property>
<property>
<!-- 指定zookeeper所在的节点 -->
<name>ha.zookeeper.quorum</name>
<value>node3:2181,node4:2181,node5:2181</value>
</property>
</configuration>
2.7、配置$HADOOP_HOME/etc/hadoop/yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
<property>
<!-- 配置yarn为高可用 -->
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<!-- 集群的唯一标识 -->
<name>yarn.resourcemanager.cluster-id</name>
<value>mycluster</value>
</property>
<property>
<!-- ResourceManager ID -->
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<!-- 指定ResourceManager 所在的节点 -->
<name>yarn.resourcemanager.hostname.rm1</name>
<value>node1</value>
</property>
<property>
<!-- 指定ResourceManager 所在的节点 -->
<name>yarn.resourcemanager.hostname.rm2</name>
<value>node2</value>
</property>
<property>
<!-- 指定ResourceManager Http监听的节点 -->
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>node1:8088</value>
</property>
<property>
<!-- 指定ResourceManager Http监听的节点 -->
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>node2:8088</value>
</property>
<property>
<!-- 指定zookeeper所在的节点 -->
<name>yarn.resourcemanager.zk-address</name>
<value>node3:2181,node4:2181,node5:2181</value>
</property>
<property>
<!-- 关闭虚拟内存检查 -->
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<!-- 启用节点的内容和CPU自动检测,最小内存为1G -->
<!--<property>
<name>yarn.nodemanager.resource.detect-hardware-capabilities</name>
<value>true</value>
</property>-->
</configuration>
2.8、配置$HADOOP_HOME/etc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
2.9、配置$HADOOP_HOME/etc/hadoop/workers文件
[root@node1 ~]# vim /software/hadoop-3.3.4/etc/hadoop/workers
node3
node4
node5
2.10、配置$HADOOP_HOME/sbin/start-dfs.sh 和 stop-dfs.sh 两个文件中顶部添加以下参数,防止启动错误
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_JOURNALNODE_USER=root
HDFS_ZKFC_USER=root
2.11、配置 $HADOOP_HOME/sbin/start-yarn.sh 和 stop-yarn.sh 两个文件顶部添加以下参数,防止启动错误
YARN_RESOURCEMANAGER_USER=root
YARN_NODEMANAGER_USER=root
2.12、将配置好的 Hadoop 安装包发送到其他 4****个节点
[root@node1 ~]# scp -r /software/hadoop-3.3.4 node2:/software/
[root@node1 ~]# scp -r /software/hadoop-3.3.4 node3:/software/
[root@node1 ~]# scp -r /software/hadoop-3.3.4 node4:/software/
[root@node1 ~]# scp -r /software/hadoop-3.3.4 node5:/software/
也可以在对应其他节点上解压对应的安装包后,只发送对应的配置文件,这样速度较快。
2.13、在node2 、 node3 、 node4 、 node5 节点上配置 HADOOP_HOME
#分别在node2、node3、node4、node5节点上配置HADOOP_HOME
vim /etc/profile
export HADOOP_HOME=/software/hadoop-3.3.4/
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:
#最后记得Sourcesource/etc/profile
3、初始化HDFS
#在node3,node4,node5节点上启动zookeeper
zkServer.sh start
#在node1上格式化zookeeper
[root@node1 ~]# hdfs zkfc -formatZK
#在每台journalnode中启动所有的journalnode,这里就是node3,node4,node5节点上启动
hdfs --daemon start journalnode
#在node1中格式化namenode
[root@node1 ~]# hdfs namenode -format
#在node1中启动namenode,以便同步其他namenode
[root@node1 ~]# hdfs --daemon start namenode
#高可用模式配置namenode,使用下列命令来同步namenode(在需要同步的namenode中执行,这里就是在node2上执行):
[root@node2 software]# hdfs namenode -bootstrapStandby
4、启动及停止
#node1上启动HDFS,启动Yarn
[root@node1 sbin]# start-dfs.sh
[root@node1 sbin]# start-yarn.sh
注意以上也可以使用start-all.sh命令启动Hadoop集群。
#停止集群
[root@node1 ~]# stop-dfs.sh
[root@node1 ~]# stop-yarn.sh
注意:以上也可以使用 stop-all.sh 停止集群。
5、访问WebUI
#访问HDFS : http://node1:50070
六、安装Hive
1、节点划分
这里搭建Hive的版本为3.1.3,搭建Hive的节点划分如下:
节点IP
节点名称
Hive服务器
Hive客户端
MySQL
192.168.179.4
node1
★
192.168.179.5
node2
★(已搭建)
192.168.179.6
node3
★
2、安装配置Hive
2.1、将下载好的Hive 安装包上传到 node1 节点上 ,并修改名称
[root@node1 ~]# cd /software/
[root@node1 software]# tar -zxvf ./apache-hive-3.1.3-bin.tar.gz
[root@node1 software]# mv apache-hive-3.1.3-bin hive-3.1.3
2.2、将解压好的Hive 安装包发送到 node3节点上
[root@node1 software]# scp -r /software/hive-3.1.3/ node3:/software/
2.3、配置 node1 、 node3 两台节点的 Hive 环境变量
vim /etc/profile
export HIVE_HOME=/software/hive-3.1.3/
export PATH=$PATH:$HIVE_HOME/bin
#source 生效
source/etc/profile
2.4、在 node1 节点 $HIVE_HOME/conf 下创建 hive-site.xml 并配置
<configuration>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://node2:3306/hive?createDatabaseIfNotExist=true&useSSL=false</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
</configuration>
2.5、在node3 节点 $HIVE_HOME/conf/ 中创建 hive-site.xml并配置
<configuration>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>hive.metastore.local</name>
<value>false</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://node1:9083</value>
</property>
</configuration>
2.6、node1 、 node3 节点删除 $HIVE_HOME/lib 下" guava" 包,使用 Hadoop 下的包替换
#删除Hive lib目录下“guava-19.0.jar ”包
[root@node1 ~]# rm -rf /software/hive-3.1.3/lib/guava-19.0.jar
[root@node3 ~]# rm -rf /software/hive-3.1.3/lib/guava-19.0.jar
#将Hadoop lib下的“guava”包拷贝到Hive lib目录下
[root@node1 ~]# cp /software/hadoop-3.3.4/share/hadoop/common/lib/guava-27.0-jre.jar /software/hive-3.1.3/lib/
[root@node3 ~]# cp /software/hadoop-3.3.4/share/hadoop/common/lib/guava-27.0-jre.jar /software/hive-3.1.3/lib/
2.7、将"mysql-connector-java-5.1.47.jar" 驱动包上传到 $HIVE_HOME/lib目录下
这里node1,node3节点都需要传入,将mysql驱动包上传$HIVE_HOME/lib/目录下。
2.8、在node1 节点中初始化 Hive
#初始化hive,hive2.x版本后都需要初始化
[root@node1 ~]# schematool -dbType mysql -initSchema
3、Hive 操作
在服务端和客户端操作Hive,操作Hive之前首先启动HDFS集群,命令为:start-all.sh,启动HDFS集群后再进行Hive以下操作:
#在node1中登录Hive ,创建表test
[root@node1 conf]# hive
hive> create table test (id int,name string,age int) row format delimited fields terminated by '\t';
#向表test中插入数据
hive> insert into test values(1,"zs",18);
#在node1启动Hive metastore
[root@node1 hadoop]# hive --service metastore &#在node3上登录Hive客户端查看表数据
[root@node3 lib]# hive
hive> select * from test;
OK
1 zs 18
七、安装HBase
1、节点划分
这里选择HBase版本为2.5.1,搭建HBase各个角色分布如下:
节点IP
节点名称
HBase服务
192.168.179.6
node3
RegionServer
192.168.179.7
node4
HMaster,RegionServer
192.168.179.8
node5
RegionServer
2、安装配置HBase
2.1、将下载好的安装包发送到node4 节点上 , 并解压 , 配置环境变量
#将下载好的HBase安装包上传至node4节点/software下,并解压
[root@node4 software]# tar -zxvf ./hbase-2.5.1-bin.tar.gz
当前节点配置HBase环境变量
#配置HBase环境变量
[root@node4 software]# vim /etc/profile
export HBASE_HOME=/software/hbase-2.5.1/
export PATH=$PATH:$HBASE_HOME/bin
#使环境变量生效
[root@node4 software]# source /etc/profile
2.2、配置$HBASE_HOME/conf/hbase-env.sh
#配置HBase JDKexport JAVA_HOME=/usr/java/jdk1.8.0_181-amd64/
#配置 HBase不使用自带的zookeeperexport HBASE_MANAGES_ZK=false
#Hbase中的jar包和HDFS中的jar包有冲突,以下配置设置为true,启动hbase不加载HDFS jar包export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP="true"
2.3、配置$HBASE_HOME/conf/hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://mycluster/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>node3,node4,node5</value>
</property>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
</configuration>
2.4、配置$HBASE_HOME/conf/regionservers ,配置 RegionServer 节点
node3
node4
node5
2.5、配置backup-masters文件
手动创建$HBASE_HOME/conf/backup-masters文件,指定备用的HMaster,需要手动创建文件,这里写入node5,在HBase任意节点都可以启动HMaster,都可以成为备用Master ,可以使用命令:hbase-daemon.sh start master启动。
#创建 $HBASE_HOME/conf/backup-masters 文件,写入node5
[root@node4 conf]# vim backup-masters
node5
2.6、复制hdfs-site.xml 到 $HBASE_HOME/conf/ 下
[root@node4 ~]# cp /software/hadoop-3.3.4/etc/hadoop/hdfs-site.xml /software/hbase-2.5.1/conf/
2.7、将HBase 安装包发送到 node3 , node5 节点上,并在 node3 , node5 节点上配置 HBase 环境变量
[root@node4 ~]# scp -r /software/hbase-2.5.1 node3:/software/
[root@node4 ~]# scp -r /software/hbase-2.5.1 node5:/software/
注意:在node3、node5上配置HBase环境变量。
vim /etc/profile
export HBASE_HOME=/software/hbase-2.5.1/
export PATH=$PATH:$HBASE_HOME/bin
#使环境变量生效
source/etc/profile
2.8、重启Zookeeper 、重启 HDFS 及启动 HBase集群
#注意:一定要重启Zookeeper,重启HDFS,在node4节点上启动HBase集群
[root@node4 software]# start-hbase.sh
#访问WebUI,http://node4:16010。
停止集群:在任意一台节点上stop-hbase.sh
3、HBase操作
在Hbase中创建表test,指定'cf1','cf2'两个列族,并向表test中插入几条数据:
#进入hbase
[root@node4 ~]# hbase shell#创建表test
create 'test','cf1','cf2'#查看创建的表
list
#向表test中插入数据
put 'test','row1','cf1:id','1'
put 'test','row1','cf1:name','zhangsan'
put 'test','row1','cf1:age',18#查询表test中rowkey为row1的数据get'test','row1'
八、安装Redis
1、节点划分
这里选择Redis版本为6.2.7版本,Redis安装在node4节点上,节点分布如下:
节点IP
节点名称
Redis服务
192.168.179.7
node4
client
2、安装Redis
2.1、将redis 安装包上传到 node4节点,并解压
[root@node4 ~]# cd /software/
[root@node4 software]# tar -zxvf ./redis-6.2.7.tar.gz
2.2、node4安装需要的 C 插件
[root@node4 ~]# yum -y install gcc tcl
2.3、编译Redis
进入/software/cd /software/redis-6.2.7目录中,编译redis。
[root@node4 ~]# cd /software/redis-6.2.7
[root@node4 redis-6.2.7]# make
2.4、创建安装目录安装Redis
#创建安装目录
[root@node4 ~]# mkdir -p /software/redis#进入redis编译目录,安装redis
[root@node4 ~]# cd /software/redis-6.2.7
[root@node4 redis-6.2.7]# make PREFIX=/software/redis install
注意:现在就可以使用redis了,进入/software/redis/bin下,就可以执行redis命令。
2.5、将Redis加入环境变量,加入系统服务,设置开机启动
#将redis-server链接到/usr/local/bin/目录下,后期加入系统服务时避免报错
[root@node4 ~]# ln -sf /software/redis-6.2.7/src/redis-server /usr/local/bin/
#进入下方目录,配置install_server.sh,将文件中以下内容前面加上#注释掉,原因为一个物理机中可以有多个redis实例(进程),通过port区分,可执行程序就一份在目录,但是内存中未来的多个实例需要各自的配置文件,持久化目录等资源。
[root@node4 ~]# cd /software/redis-6.2.7/utils/
#_pid_1_exe="$(readlink -f /proc/1/exe)"
#if [ "${_pid_1_exe##*/}" = systemd ]
#then
# echo "This systems seems to use systemd."
# echo "Please take a look at the provided example service unit files in this #directory, and adapt and install them. Sorry!"
# exit 1
#fi
#执行如下命令,配置redis Server,一直回车即可
[root@node4 utils]# ./install_server.sh
#执行完以上安装,在/etc/init.d下会修改redis_6379名称并加入系统服务
[root@node4 utils]# cd /etc/init.d/
[root@node4 init.d]# mv redis_6379 redisd
[root@node4 init.d]# chkconfig --add redisd
#检查加入系统状态,3,4,5为开,就是开机自动启动
[root@node4 init.d]# chkconfig --list
2.6、配Redis环境变量
# 在node4节点上编辑profile文件,vim /etc/profileexport REDIS_HOME=/software/redis
export PATH=$PATH:$REDIS_HOME/bin
#使环境变量生效source /etc/profile
2.7、启动 | 停止 Redis服务
后期每次开机启动都会自动启动Redis,也可以使用以下命令手动启动|停止redis
#启动redis
[root@node4 init.d]# service redisd start#停止redis
[root@node4 init.d]# redis-cli shutdown
3、Redis 操作
#进入redis客户端
[root@node4 ~]# redis-cli
#切换1号库,并插入key
127.0.0.1:6379> select 1
127.0.0.1:6379[1]> hset rediskey zhangsan 100
#查看所有key并获取key值
127.0.0.1:6379[1]> keys *
127.0.0.1:6379[1]> hgetall rediskey
#删除指定key
127.0.0.1:6379[1]> del 'rediskey'
九、安装Kafka
1、节点划分
这里选择Kafka版本为3.3.1,对应的搭建节点如下:
节点IP
节点名称
Kafka服务
192.168.179.4
node1
kafka broker
192.168.179.5
node2
kafka broker
192.168.179.6
node3
kafka broker
2、安装配置Kafka
2.1、上传解压
[root@node1 software]# tar -zxvf ./kafka_2.12-3.3.1.tgz
2.2、配置Kafka环境变量
# 在node1节点上编辑profile文件,vim /etc/profileexport KAFKA_HOME=/software/kafka_2.12-3.3.1/
export PATH=$PATH:$KAFKA_HOME/bin
#使环境变量生效source /etc/profile
2.3、配置Kafka
在node1节点上配置Kafka,进入$KAFKA_HOME/config中修改server.properties,修改内容如下:
broker.id=0 #注意:这里要唯一的Integer类型
log.dirs=/kafka-logs #真实数据存储的位置
zookeeper.connect=node3:2181,node4:2181,node5:2181 #zookeeper集群
2.4、将以上配置发送到node2 , node3节点上
[root@node1 software]# scp -r /software/kafka_2.12-3.3.1 node2:/software/
[root@node1 software]# scp -r /software/kafka_2.12-3.3.1 node3:/software/
发送完成后,在node2、node3节点上配置Kafka的环境变量。
2.5、修改node2,node3 节点上的 server.properties 文件
node2、node3节点修改$KAFKA_HOME/config/server.properties文件中的broker.id,node2中修改为1,node3节点修改为2。
2.6、创建Kafka启动脚本
在node1,node2,node3节点$KAFKA_HOME/bin路径中编写Kafka启动脚本"startKafka.sh",内容如下:
nohup /software/kafka_2.12-3.3.1/bin/kafka-server-start.sh /software/kafka_2.12-3.3.1/config/server.properties > /software/kafka_2.12-3.3.1/kafkalog.txt 2>&1 &
node1,node2,node3节点配置完成后修改"startKafka.sh"脚本执行权限:
chmod +x ./startKafka.sh
2.7、启动Kafka集群
在node1,node2,node3三台节点上分别执行startKafka.sh脚本,启动Kafka。
[root@node1 ~]# startKafka.sh
[root@node2 ~]# startKafka.sh
[root@node3 ~]# startKafka.sh
3、Kafka命令操作
在Kafka 任意节点上操作如下命令测试Kafka。
#创建topic
kafka-topics.sh --create --bootstrap-server node1:9092,node2:9092,node3:9092 --topic testtopic --partitions 3 --replication-factor 3
#查看集群中的topic
kafka-topics.sh --list --bootstrap-server node1:9092,node2:9092,node3:9092
#console控制台向topic 中生产数据
kafka-console-producer.sh --bootstrap-server node1:9092,node2:9092,node3:9092 --topic testtopic
#console控制台消费topic中的数据
kafka-console-consumer.sh --bootstrap-server node1:9092,node2:9092,node3:9092 --topic testtopic
注意:以上创建好之后,可以向Kafka topic中写入数据测试Kafka是否正常。
#删除topic
kafka-topics.sh --bootstrap-server node1:9092,node2:9092,node3:9092 --delete --topic testtopic
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📢本文由 Lansonli 原创,首发于 CSDN博客🙉
📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨
版权归原作者 Lansonli 所有, 如有侵权,请联系我们删除。