0


大数据Flink进阶(九):集群基础环境搭建

集群基础环境搭建

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

  • 📢博客主页:https://lansonli.blog.csdn.net

  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

  • 📢本文由 Lansonli 原创,首发于 CSDN博客🙉

  • 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨

标签: 大数据 flink linux

本文转载自: https://blog.csdn.net/xiaoweite1/article/details/129772622
版权归原作者 Lansonli 所有, 如有侵权,请联系我们删除。

“大数据Flink进阶(九):集群基础环境搭建”的评论:

还没有评论