当前位置:   article > 正文

Hadoop生态圈集群部署(完整版)_hudi集群部署

hudi集群部署
软件版本
Mysql5.7
Java1.8.0_241
Hadoop3.3.0
Zookeeper3.4.6
Hive3.1.2
Flink1.14.5
Hudi0.11.1
Doris1.1.0
Dinky0.6.6
Flink CDC2.2.0
Presto0.261
Hue4.1.0

1. Hadoop集群部署

1.1 集群安装

1)上传Hadoop安装包到 /opt/software目录下

2)解压安装文件到/opt/server下面

tar -zxvf hadoop-3.3.0.tar.gz -C /opt/server/
  • 1

3)将 Hadoop 添加到环境变量

#HADOOP_HOME
export HADOOP_HOME=/opt/server/hadoop-3.3.0
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
  • 1
  • 2
  • 3
  • 4

4)让修改后的文件生效

source /etc/profile
  • 1

5)测试是否安装成功

hadoop version
  • 1

6)Hadoop目录结构

[root@node1 hadoop-3.3.0]$ ll
总用量 176
drwxr-xr-x. 2 root root    183 912 2019 bin
drwxr-xr-x. 3 root root     20 912 2019 etc
drwxr-xr-x. 2 root root    106 912 2019 include
drwxr-xr-x. 3 root root     20 912 2019 lib
drwxr-xr-x. 4 root root    288 912 2019 libexec
-rw-rw-r--. 1 root root 147145 94 2019 LICENSE.txt
-rw-rw-r--. 1 root root  21867 94 2019 NOTICE.txt
-rw-rw-r--. 1 root root   1366 94 2019 README.txt
drwxr-xr-x. 3 root root   4096 912 2019 sbin
drwxr-xr-x. 4 root root     31 912 2019 share
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

重要目录

① bin 目录:存放对 Hadoop 相关服务(hdfs, yarn, mapred)进行操作的脚本

② etc 目录: Hadoop 的配置文件目录,存放 Hadoop 的配置文件

③ lib 目录:存放 Hadoop 的本地库(对数据进行压缩解压缩功能)

④ sbin 目录:存放启动或停止 Hadoop 相关服务的脚本

⑤ share 目录:存放 Hadoop 的依赖 jar 包、 文档、 和官方案例

7)配置文件说明

Hadoop 配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。

① 默认配置文件:

要获取的默认文件文件存放在 Hadoop 的 jar 包中的位置
[core-default.xml]hadoop-common-3.1.3.jar/core-default.xml
[hdfs-default.xml]hadoop-hdfs-3.1.3.jar/hdfs-default.xml
[yarn-default.xml]hadoop-yarn-common-3.1.3.jar/yarn-default.xml
[mapred-default.xml]hadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml

② 自定义配置文件:

core-site.xml、 hdfs-site.xml、 yarn-site.xml、 mapred-site.xml 四个配置文件存放在$HADOOP_HOME/etc/hadoop 这个路径上, 用户可以根据项目需求重新进行修改配置。

1.2 配置集群

  • 核心配置文件

​ 配置 core-site.xml

cd $HADOOP_HOME/etc/hadoop
vim core-site.xml
  • 1
  • 2

​ 文件内容如下:

<configuration>
    <!-- 指定 NameNode 的地址 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://node1:8020</value>
    </property>
    <!-- 指定 hadoop 数据的存储目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/server/hadoop-3.3.0/data</value>
    </property>
    <!-- 配置 HDFS 网页登录使用的静态用户为 root -->
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>root</value>
    </property>
</configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • HDFS 配置文件

​ 配置 hdfs-site.xml

vim hdfs-site.xml
  • 1

​ 文件内容如下:

<configuration>
    <!-- nn web 端访问地址-->
    <property>
        <name>dfs.namenode.http-address</name>
        <value>node1:9870</value>
    </property>
    <!-- 2nn web 端访问地址-->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>node3:9868</value>
    </property>
</configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • YARN 配置文件

​ 配置 yarn-site.xml

vim yarn-site.xml
  • 1

​ 文件内容如下:

<configuration>
    <!-- 指定 MR 走 shuffle -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <!-- 指定 ResourceManager 的地址-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>node2</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_HOM</value>
    </property>
</configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • MapReduce 配置文件

​ 配置 mapred-site.xml

vim mapred-site.xml
  • 1

​ 文件内容如下:

<configuration>
    <!-- 指定 MapReduce 程序运行在 Yarn 上 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在集群上分发配置好的 Hadoop

xsync /opt/server/hadoop-3.3.0
  • 1

配置 workers

cd /opt/server/hadoop-3.3.0/etc/hadoop
vim workers
  • 1
  • 2

在该文件中增加如下内容:(注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行)

node1
node2
node3
  • 1
  • 2
  • 3

同步所有节点配置文件

xsync workers
  • 1

1.3 群起集群

如果集群是第一次启动,需要在node1节点格式化NameNode(注意:格式化NameNode,会产生新的集群 id,导致 NameNode 和 DataNode 的集群 id 不一致,集群找不到已往数据。 如果集群在运行过程中报错,需要重新格式化 NameNode 的话, 一定要先停止 namenode 和 datanode 进程, 并且要删除所有机器的 data 和 logs 目录,然后再进行格式化。)

hdfs namenode -format
  • 1

初始化成功后会产生data和logs两个文件夹

image-20230220165618836

  • 启动 HDFS
cd /opt/server/hadoop-3.3.0
sbin/start-dfs.sh
  • 1
  • 2

image-20230220170042905

原因:如果你的Hadoop是另外启用其它用户来启动,记得将root改为对应用户

在/hadoop/sbin路径下:将start-dfs.sh,stop-dfs.sh两个文件顶部添加以下参数:

#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
  • 1
  • 2
  • 3
  • 4
  • 5

还有,start-yarn.sh,stop-yarn.sh顶部也需添加以下:

#!/usr/bin/env bash
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
  • 1
  • 2
  • 3
  • 4

重新启动HDFS

image-20230220171023996

解决方法:在hadoop-env.sh中,再显示地重新声明一遍JAVA_HOME(所有节点)

image-20230220171002621

重启HDFS

image-20230220171202906

  • 在配置了 ResourceManager 的节点(node2) 启动 YARN
sbin/start-yarn.sh
  • 1

Web 端查看 HDFS 的 NameNode

​ (a)浏览器中输入:

http://node1:9870
  • 1

​ (b)查看 HDFS 上存储的数据信息

image-20230220171539554

Web 端查看 YARN 的 ResourceManager

​ (a)浏览器中输入:

http://node2:8088
  • 1

​ (b)查看 YARN 上运行的 Job 信息

image-20230220171622674

1.4 配置历史服务器

为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下:

1) 配置 mapred-site.xml

vim mapred-site.xml
  • 1

在该文件里面增加如下配置

    <!-- 历史服务器端地址 -->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>node1:10020</value>
    </property>
    <!-- 历史服务器 web 端地址 -->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>node1:19888</value>
    </property>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

2)分发配置

xsync mapred-site.xml
  • 1

3)在 node1 启动历史服务器

[reader@node1 hadoop]$ mapred --daemon start historyserver

# 关闭历史服务器
[reader@node1 hadoop]$ mapred --daemon stop historyserver
  • 1
  • 2
  • 3
  • 4

4)查看历史服务器是否启动

[reader@node1 hadoop]$ jps
  • 1

image-20230220172359097

5)查看 JobHistory

http://node1:19888/jobhistory
  • 1

image-20230220172433347

1.5 配置日志的聚集

日志聚集概念:应用运行完成以后,将程序运行日志信息上传到 HDFS 系统上。

日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。

注意:开启日志聚集功能,需要重新启动 NodeManager、ResourceManager和HistoryServer。

开启日志聚集功能具体步骤如下:

1)配置 yarn-site.xml

vim yarn-site.xml
  • 1

在该文件里面增加如下配置。

    <!-- 开启日志聚集功能 -->
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <!-- 设置日志聚集服务器地址 -->
    <property>
        <name>yarn.log.server.url</name>
        <value>http://node1:19888/jobhistory/logs</value>
    </property>
    <!-- 设置日志保留时间为 7 天 -->
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
    </property>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

2)分发配置

xsync yarn-site.xml
  • 1

3)关闭 NodeManager 、ResourceManager和HistoryServer

sbin/stop-yarn.sh
mapred --daemon stop historyserver
  • 1
  • 2

4)启动 NodeManager 、ResourceManage和HistoryServer

start-yarn.sh
mapred --daemon start historyserver
  • 1
  • 2

1.6 集群启动/停止方式总结

1)各个模块分开启动/停止(配置 ssh 是前提)— 常用

(1)整体启动/停止 HDFS

start-dfs.sh/stop-dfs.sh
  • 1

(2)整体启动/停止 YARN

start-yarn.sh/stop-yarn.sh
  • 1

2)各个服务组件逐一启动/停止

(1)分别启动/停止 HDFS 组件

hdfs --daemon start/stop namenode/datanode/secondarynamenode
  • 1

(2)启动/停止 YARN

yarn --daemon start/stop resourcemanager/nodemanager
  • 1

1.7 集群常用脚本

1)Hadoop 集群启停脚本(包含 HDFS,Yarn,Historyserver):hdp

cd ~/bin
vim hdp
  • 1
  • 2

输入如下内容:

#!/bin/bash

if [ $# -lt 1 ]
then
    echo "No Args Input..."
    exit ;
fi

case $1 in
"start")
        echo " =================== 启动 hadoop集群 ==================="

        echo " --------------- 启动 hdfs ---------------"
        ssh node1 "/opt/server/hadoop-3.3.0/sbin/start-dfs.sh"
        echo " --------------- 启动 yarn ---------------"
        ssh node2 "/opt/server/hadoop-3.3.0/sbin/start-yarn.sh"
        echo " --------------- 启动 historyserver ---------------"
        ssh node1 "/opt/server/hadoop-3.3.0/bin/mapred --daemon start historyserver"
;;
"stop")
        echo " =================== 关闭 hadoop集群 ==================="

        echo " --------------- 关闭 historyserver ---------------"
        ssh node1 "/opt/server/hadoop-3.3.0/bin/mapred --daemon stop historyserver"
        echo " --------------- 关闭 yarn ---------------"
        ssh node2 "/opt/server/hadoop-3.3.0/sbin/stop-yarn.sh"
        echo " --------------- 关闭 hdfs ---------------"
        ssh node1 "/opt/server/hadoop-3.3.0/sbin/stop-dfs.sh"
;;
*)
    echo "Input Args Error..."
;;
esac
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

保存后退出,然后赋予脚本执行权限

chmod +x hdp
  • 1

2)查看三台服务器 Java 进程脚本:jpsall

vim jpsall
  • 1

输入如下内容:

#!/bin/bash

for host in node1 node2 node3
do
        echo =============== $host ===============
        ssh $host /usr/java/jdk1.8.0_181-cloudera/bin/jps
done
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

保存后退出,然后赋予脚本执行权限

chmod +x jpsall
  • 1

1.8 常用端口号说明

端口名称Hadoop2.xHadoop3.x
NameNode 内部通信端口8020 / 90008020 / 9000/9820
NameNode HTTP UI500709870
MapReduce 查看执行任务端口80888088
历史服务器通信端口1988819888

2. Zookeeper集群部署

1)在node1主机上,解压zookeeper的压缩包到/opt/server路径下去,然后准备进行安装

tar -zxvf zookeeper-3.4.6.tar.gz -C /opt/server/
  • 1

2)修改配置文件

cd /opt/server/zookeeper-3.4.6/conf/
cp zoo_sample.cfg zoo.cfg
mkdir -p /opt/server/zookeeper-3.4.6/zkdatas/
vim  zoo.cfg
  • 1
  • 2
  • 3
  • 4

3)修改以下内容

#Zookeeper的数据存放目录
dataDir=/opt/server/zookeeper-3.4.6/zkdatas
# 保留多少个快照
autopurge.snapRetainCount=2
# 日志多少小时清理一次
autopurge.purgeInterval=1
# 集群中服务器地址
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

4)添加myid配置

在node1主机的/export/server/zookeeper-3.4.6/zkdatas/这个路径下创建一个文件,文件名为myid ,文件内容为1

echo 1 > /opt/server/zookeeper-3.4.6/zkdatas/myid
  • 1

5)安装包分发并修改myid的值

在node1主机上,将安装包分发到其他机器

第二台机器上修改myid的值为2

echo 2 > /export/server/zookeeper-3.4.6/zkdatas/myid
  • 1

第三台机器上修改myid的值为3

echo 3 > /export/server/zookeeper-3.4.6/zkdatas/myid
  • 1

6)配置Path环境变量

#ZOOKEEPER_HOME
export ZOOKEEPER_HOME=/opt/server/zookeeper-3.4.6
export PATH=:$ZOOKEEPER_HOME/bin:$PATH
  • 1
  • 2
  • 3

7)三台机器启动zookeeper服务

/opt/server/zookeeper-3.4.6/bin/zkServer.sh start
  • 1

8)三台主机分别查看启动状态

/opt/server/zookeeper-3.4.6/bin/zkServer.sh status
  • 1

9)集群shell脚本

#!/bin/bash

case $1 in
"start"){
	for i in node1 node2 node3
	do
        echo ---------- zookeeper $i 启动 ------------
		ssh $i "/opt/server/zookeeper-3.4.6/bin/zkServer.sh start"
	done
};;
"stop"){
	for i in node1 node2 node3
	do
        echo ---------- zookeeper $i 停止 ------------    
		ssh $i "/opt/server/zookeeper-3.4.6/bin/zkServer.sh stop"
	done
};;
"status"){
	for i in node1 node2 node3
	do
        echo ---------- zookeeper $i 状态 ------------    
		ssh $i "/opt/server/zookeeper-3.4.6/bin/bin/zkServer.sh status"
	done
};;
esac
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

3. Hive集群部署

1)上传压缩包到/export/software目录里,并解压安装包

# --------------------Hive安装配置----------------------
cd /opt/software/
tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /opt/server
cd /opt/server
mv apache-hive-3.1.2-bin hive-3.1.2

# 解决hadoop、hive之间guava版本差异
cd /opt/server/hive-3.1.2
rm -rf lib/guava-19.0.jar
cp /opt/server/hadoop-3.3.0/share/hadoop/common/lib/guava-27.0-jre.jar ./lib/

# 添加mysql jdbc驱动到hive安装包lib/文件下
mysql-connector-java-5.1.41-bin.jar

# 修改hive环境变量文件 添加HADOOP_HOME
cd /opt/server/hive-3.1.2/conf/
mv hive-env.sh.template hive-env.sh

vim hive-env.sh
HADOOP_HOME=/opt/server/hadoop-3.3.0
export HIVE_CONF_DIR=/opt/server/hive-3.1.2/conf
export HIVE_AUX_JARS_PATH=/opt/server/hive-3.1.2/lib
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

2)新增hive-site.xml 配置mysql等相关信息

vim hive-site.xml
  • 1

3)添加以下内容:

<configuration>
    <!-- 存储元数据mysql相关配置 -->
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value> jdbc:mysql://node2:3306/hive?createDatabaseIfNotExist=true&amp;useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8</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>

    <!-- H2S运行绑定host -->
    <property>
        <name>hive.server2.thrift.bind.host</name>
        <value>node1</value>
    </property>

    <!-- 远程模式部署metastore 服务地址 -->
    <property>
        <name>hive.metastore.uris</name>
        <value>thrift://node1:9083</value>
    </property>

    <!-- 关闭元数据存储授权  -->
    <property>
        <name>hive.metastore.event.db.notification.api.auth</name>
        <value>false</value>
    </property>

    <!-- 关闭元数据存储版本的验证 -->
    <property>
        <name>hive.metastore.schema.verification</name>
        <value>false</value>
    </property>
</configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

4)初始化metadata(只需要在配置完Hive之后进行一次操作)

# 初始化成功会在mysql中创建74张表
cd /opt/server/hive-3.1.2
bin/schematool -initSchema -dbType mysql -verbos

# 添加环境变量
vim /etc/profile

export HIVE_HOME=/opt/server/hive-3.1.2
export PATH=:$HIVE_HOME/bin:$PATH

# 让环境变量生效
source /etc/profile

# -----------------Metastore 和 Hiveserver2启动----
nohup /opt/server/hive-3.1.2/bin/hive --service metastore  2>&1 &
nohup /opt/server/hive-3.1.2/bin/hive --service hiveserver2 2>&1 &

# 验证是否安装成功!
在Linux中输入hive命令,直接回车,出现一个终端,在该终端中可以输入sql命令:
show databases;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

5)Beeline Client

hive经过发展,推出了第二代客户端beeline,但是beeline客户端不是直接访问metastore服务的,而是需要单独启动hiveserver2服务。

在node1的/export/server/hadoop-3.3.0/etc/hadoop目录下,修改core-site.xml,在该文件中添加以下配置,实现用户代理:

    <property>
        <name>hadoop.proxyuser.root.hosts</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.proxyuser.root.groups</name>
        <value>*</value>
    </property>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

将修改好的core-site.xml文件分发到node2和node3,然后重启Hadoop(stop-all.sh start-all.sh)

在hive运行的服务器上,确保已经启动metastore服务和hiveserver2服务,如果没有启动,则执行以下语句:

nohup /opt/server/hive-3.1.2/bin/hive --service metastore  2>&1 &
nohup /opt/server/hive-3.1.2/bin/hive --service hiveserver2 2>&1 &
  • 1
  • 2

在node1上使用beeline客户端进行连接访问。

beeline

根据提醒进行以下操作:
/opt/server/hive-3.1.2/bin/beeline

Beeline version 3.1.2 by Apache Hive
beeline> !connect jdbc:hive2://node1:10000
Connecting to jdbc:hive2://node1:10000
Enter username for jdbc:hive2://node1:10000:root
Enter password for jdbc:hive2://node1:10000:123456
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

4. Kafka集群部署

4.1 Kafka集群架构及角色功能

img

Kafka中的每个角色以及对应的功能

  • 分布式主从架构【公平】:允许从节点选举成为主节点

  • 主:Kafka Broker 【Controller】

    • 是一种特殊的Broker,从所有Broker中选举出来的,负责普通Broker的工作
    • 负责管理所有从节点:Topic、分区和副本【负责决定一个分区的leader副本和follower副本】
    • 每次启动集群,会从所有Broker中选举一个Controller,由ZK实现
  • 从:Kafka Broker

    • 对外提供读写请求
    • 其他的Broker监听Controller在ZK中创建的临时节点,如果Controller故障,会重新从Broker选举一个新的Controller
  • ZK的功能

    • 辅助选举Controller:启动时所有Broker都会到Zk中创建临时节点,谁创建成功谁就是主节点
    • 存储Kafka元数据
  • Kafka 3.0版本新特性:可以摆脱ZK,独立运行了

  • 小结:理解Kafka集群架构及角色功能

4.2 Kafka分布式集群部署

1)下载解压安装

下载:http://archive.apache.org/dist/kafka/

上传到第一台机器

cd /opt/software/
  • 1

解压

# 解压安装
tar -zxvf kafka_2.12-2.4.1.tgz -C /opt/server/
cd /opt/server/kafka_2.12-2.4.1/
# Kafka数据存储的位置
mkdir datas
  • 1
  • 2
  • 3
  • 4
  • 5

2)修改配置

切换到配置文件目录

cd /opt/server/kafka_2.12-2.4.1/config
  • 1

image-20230221082652491

修改server.properties:vim server.properties

#21行:唯一的 服务端id
broker.id=0
#60行:指定kafka的日志及数据【segment【.log,.index】】存储的位置
log.dirs=/opt/server/kafka_2.12-2.4.1/datas
#123行:指定zookeeper的地址
zookeeper.connect=node1:2181,node2:2181,node3:2181
#在最后添加两个配置,允许删除topic,当前kafkaServer的主机名
delete.topic.enable=true
host.name=node1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

分发

xsync /opt/server/kafka_2.12-2.4.1/
  • 1

第二台:server.properties

#21行:唯一的 服务端id
broker.id=1
#最后
host.name=node2
  • 1
  • 2
  • 3
  • 4

第三台:server.properties

#21行:唯一的 服务端id
broker.id=2
#最后
host.name=node3
  • 1
  • 2
  • 3
  • 4

添加环境变量

vim /etc/profile
  • 1
#KAFKA_HOME
export KAFKA_HOME=/opt/server/kafka_2.12-2.4.1
export PATH=:$PATH:$KAFKA_HOME/bin
  • 1
  • 2
  • 3
source /etc/profile
  • 1

4.3 Kafka启动与关闭

1)启动Zookeeper

启动Kafka:只能启动当前节点

cd /opt/server/kafka_2.12-2.4.1/
bin/kafka-server-start.sh config/server.properties >>/dev/null 2>&1 &

# >>/dev/null 2>&1 将日志重定向到黑洞
  • 1
  • 2
  • 3
  • 4

关闭Kafka

bin/kafka-server-stop.sh 
  • 1

2)封装Kafka启停脚本:kafka.sh

#!/bin/bash
KAFKA_HOME=/opt/server/kafka_2.12-2.4.1
case $1 in
"start"){
        for i in node1 node2 node3
        do
        echo ---------- kafka $i 启动 ------------
				/usr/bin/ssh $i "cd ${KAFKA_HOME};source /etc/profile;export JMX_PORT=9988;${KAFKA_HOME}/bin/kafka-server-start.sh ${KAFKA_HOME}/config/server.properties >>/dev/null 2>&1 &"
				echo "${host} started"
        done
};;
"stop"){
        for i in node1 node2 node3
        do
        echo ---------- zookeeper $i 停止 ------------
                /usr/bin/ssh $i "cd ${KAFKA_HOME};source /etc/profile;${KAFKA_HOME}/bin/kafka-server-stop.sh"
        done
};;
esac

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 关闭,可能需要多等待一会,才看不到进程

5. HBase集群部署

1)上传HBASE安装包到第一台机器的/opt/software目录下

2)解压安装

tar -zxf hbase-2.1.0.tar.gz -C /opt/server/
cd /opt/server/hbase-2.1.0/
  • 1
  • 2

image-20230221145754995

3)修改配置

切换到配置文件目录下

cd /opt/server/hbase-2.1.0/conf/
  • 1

修改hbase-env.sh:注意JDK的版本可能不一致

#28行
export JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera
#125行
export HBASE_MANAGES_ZK=false
  • 1
  • 2
  • 3
  • 4

修改hbase-site.xml

cd /opt/server/hbase-2.1.0/
mkdir datas
vim conf/hbase-site.xml
  • 1
  • 2
  • 3
    <property>
        <!-- 指定hbase中临时文件存储位置 -->    
        <name>hbase.tmp.dir</name>
        <value>/opt/server/hbase-2.1.0/datas</value>
    </property>
    <property>
        <!-- 指定hbase在hdfs中的存储位置 --> 
        <name>hbase.rootdir</name>
        <value>hdfs://node1:8020/hbase</value>
    </property>
    <property>
        <!-- 是否构建分布式hbase --> 
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
    <property>
        <!-- 指定zookeeper地址 --> 
        <name>hbase.zookeeper.quorum</name>
        <value>node1,node2,node3</value>
    </property>
    <property>
        <name>hbase.unsafe.stream.capability.enforce</name>
        <value>false</value>
    </property>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

修改regionservers

vim conf/regionservers
  • 1
node1
node2
node3
  • 1
  • 2
  • 3

4)配置环境变量

#HBASE_HOME
export HBASE_HOME=/opt/server/hbase-2.1.0
export PATH=:$PATH:$HBASE_HOME/bin
  • 1
  • 2
  • 3

5)复制jar包

cp lib/client-facing-thirdparty/htrace-core-3.1.0-incubating.jar lib/
  • 1

6)分发

7)服务端启动与关闭

step1:启动HDFS【第一台机器】,注意一定要等HDFS退出安全模式再启动Hbase

hdp.sh start
  • 1

step2:启动ZK

zk.sh start
  • 1

step3:启动Hbase

start-hbase.sh
  • 1

image-20230221151544230

step4:先关闭Hbase再关闭zk

stop-hbase.sh
zk.sh stop
hdp.sh stop
  • 1
  • 2
  • 3

8)测试

访问Hbase Web UI【node1:16010】

image-20210524120224751

6. Flink on Yarn集群部署

1)关闭YARN的内存检查

# yarn-site.xml中添加配置
vim /opt/server/hadoop/etc/hadoop/yarn-site.xml
  • 1
  • 2

添加如下内容:

    <!-- 关闭yarn内存检查 -->
    <property>
        <name>yarn.nodemanager.pmem-check-enabled</name>
        <value>false</value>
    </property>
    <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
    </property>	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2)配置Application最大的尝试次数

# yarn-site.xml中添加配置
vim /opt/server/hadoop/etc/hadoop/yarn-site.xml
  • 1
  • 2

添加如下内容:

    <property>
        <name>yarn.resourcemanager.am.max-attempts</name>
        <value>4</value>
    </property>
  • 1
  • 2
  • 3
  • 4

3)同步yarn-site.xml配置文件

cd /opt/server/hadoop/etc/hadoop
xsync yarn-site.xml
  • 1
  • 2

4)启动HDFS集群和YARN集群

[root@node1 ~]# hdp.sh start
  • 1

5)添加HADOOP_CONF_DIR环境变量(集群所有机器

# 添加环境变量
 vim /etc/profile
  • 1
  • 2

添加内容:

export HADOOP_CONF_DIR=/opt/server/hadoop-3.3.0/etc/hadoop
  • 1

环境变量生效

source /etc/profile
  • 1

6)上传软件及解压

[root@node1 ~]# cd /opt/software/
上传软件包:flink-1.13.1-bin-scala_2.11.tgz

[root@node1 software]# tar -zxf flink-1.14.5-bin-scala_2.12.tgz -C /opt/server/	
  • 1
  • 2
  • 3
  • 4

7)将Flink依赖Hadoop 框架JAR包上传至/opt/server/flink-1.14.5/lib目录

image-20230221155640501

8)配置HA高可用,依赖Zookeeper及重试次数(node1操作)

# 修改配置文件
vim /opt/server/flink-1.14.5/conf/flink-conf.yaml
  • 1
  • 2

添加如下内容:

high-availability: zookeeper
high-availability.storageDir: hdfs://node1:8020/flink/yarn-ha/
high-availability.zookeeper.quorum: node1:2181,node2:2181,node3:2181
high-availability.zookeeper.path.root: /flink-yarn-ha
high-availability.cluster-id: /cluster_yarn

yarn.application-attempts: 10

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

9)集群所有机器,同步分发Flink 安装包,便于任意机器提交运行Flink Job。

10)启动Zookeeper集群

zk.sh start
  • 1

11)测试

  • 准备测试数据,测试运行批处理词频统计WordCount程序
[root@node1 ~]# vim /opt/data/words.txt
  • 1
  • 添加数据
spark python spark hive spark hive
python spark hive spark python
mapreduce spark hadoop hdfs hadoop spark
hive mapreduce
  • 1
  • 2
  • 3
  • 4
  • 数据文件上传
[root@node1 ~]# hdfs dfs -mkdir -p /wordcount/input/
[root@node1 ~]# hdfs dfs -put /root/words.txt /wordcount/input/
  • 1
  • 2
  • 执行以下命令
export HADOOP_CLASSPATH=`hadoop classpath`

/opt/server/flink-1.14.5/bin/flink run-application \
-t yarn-application \
-Djobmanager.memory.process.size=1024m \
-Dtaskmanager.memory.process.size=1024m \
-Dtaskmanager.numberOfTaskSlots=1 \
/opt/server/flink-1.14.5/examples/batch/WordCount.jar \
--input hdfs://node1:8020/wordcount/input
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

.14.5/conf/flink-conf.yaml


添加如下内容:

```properties
high-availability: zookeeper
high-availability.storageDir: hdfs://node1:8020/flink/yarn-ha/
high-availability.zookeeper.quorum: node1:2181,node2:2181,node3:2181
high-availability.zookeeper.path.root: /flink-yarn-ha
high-availability.cluster-id: /cluster_yarn

yarn.application-attempts: 10

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

9)集群所有机器,同步分发Flink 安装包,便于任意机器提交运行Flink Job。

10)启动Zookeeper集群

zk.sh start
  • 1

11)测试

  • 准备测试数据,测试运行批处理词频统计WordCount程序
[root@node1 ~]# vim /opt/data/words.txt
  • 1
  • 添加数据
spark python spark hive spark hive
python spark hive spark python
mapreduce spark hadoop hdfs hadoop spark
hive mapreduce
  • 1
  • 2
  • 3
  • 4
  • 数据文件上传
[root@node1 ~]# hdfs dfs -mkdir -p /wordcount/input/
[root@node1 ~]# hdfs dfs -put /root/words.txt /wordcount/input/
  • 1
  • 2
  • 执行以下命令
export HADOOP_CLASSPATH=`hadoop classpath`

/opt/server/flink-1.14.5/bin/flink run-application \
-t yarn-application \
-Djobmanager.memory.process.size=1024m \
-Dtaskmanager.memory.process.size=1024m \
-Dtaskmanager.numberOfTaskSlots=1 \
/opt/server/flink-1.14.5/examples/batch/WordCount.jar \
--input hdfs://node1:8020/wordcount/input
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/578120
推荐阅读
相关标签
  

闽ICP备14008679号