Linux软件安装 —— Flink集群安装(集成Zookeeper、Hadoop高可用)

文章目录


一、节点说明

1、相关软件

IP 主机名 部署软件
192.168.10.102 node02 jdk,hadoop,zookeeper,flink
192.168.10.103 node03 jdk,hadoop,zookeeper,flink
192.168.10.104 node04 jdk,hadoop,zookeeper,flink

2、相关进程

node02 node03 node04
HDFS NameNode DFSZKFailoverController JournalNode DataNode NameNode DFSZKFailoverController JournalNode DataNode JournalNode DataNode
YARN ResourceManager NodeManager ResourceManager NodeManager NodeManager
zookeeper QuorumPeerMain QuorumPeerMain QuorumPeerMain
flink

二、配置节点间免密登录

参考本人此篇文章:Linux软件安装 ------ SSH免密登录


三、JDK安装

参考本人此篇文章:Linux软件安装 ------ JDK安装


四、Zookeeper安装

参考本人此篇文章:Linux软件安装 ------ zookeeper集群安装


五、Hadoop安装

参考本人此篇文章:Linux软件安装 ------ Hadoop高可用安装(集成Zookeeper)


六、Flink安装

1、基础环境准备

(1)下载安装包

官方文档:Downloads | Apache Flink 一直拉倒最后就会显示所有历史版本

本文使用版本为:flink-1.13.6-bin-scala_2.12.tgz

(2)上传并解压
shell 复制代码
# 加压到安装目录
tar -zxvf flink-1.13.6-bin-scala_2.12.tgz -C /opt/module/

# 修改名称
mv flink-1.13.6/ flink

2、修改配置

(1)配置zookeeper

使用flink内置zookeeper才配,自己搭的不用配此项

shell 复制代码
# 编辑flink中的zookeeper文件
vim /opt/module/flink/conf/zoo.cfg

# 添加data和log位置
dataDir=/opt/module/flink/flink-zookeeper/data
dataLogDir=/opt/module/flink/flink-zookeeper/logs

# 修改zookeeper集群信息
server.2=node02:2888:3888
server.3=node03:2888:3888
server.4=node04:2888:3888
yaml 复制代码
# 备份原始文件
cp flink-conf.yaml flink-conf.yaml.bak

# 编辑flink-conf.yaml文件
vim /opt/module/flink/conf/flink-conf.yaml

# ==================== 基础配置 ====================
# JobManager节点,指定node02为JobManager
jobmanager.rpc.address: node02
jobmanager.rpc.port: 6123
# JobManager堆内存(根据实际内存调整,建议4G以上)
jobmanager.memory.process.size: 1024m
# TaskManager堆内存(根据实际内存调整)
taskmanager.memory.process.size: 1024m
# 每个TaskManager的slot数量(根据CPU核心数调整)
taskmanager.numberOfTaskSlots: 1
# 并行度默认值
parallelism.default: 1
web.tmpdir: /opt/module/flink/flink-jar
blob.storage.directory: /opt/module/flink/flink-blob
yarn.maximum-failed-containers: 200
taskmanager.tmp.dirs: /opt/module/flink/flink-data
flink_log_bak_dir: /opt/module/flink/logs
flink_log_dir: /opt/module/flink/logs

# ==================== 高可用配置 ====================
high-availability: zookeeper
high-availability.zookeeper.quorum: node02:2181,node03:2181,node04:2181
# Zookeeper中Flink的根路径
high-availability.zookeeper.path.root: /flink
# JobManager元数据存储路径(使用HDFS)
high-availability.zookeeper.storageDir: hdfs:///flink/recovery
fs.hdfs.hadoopconf: /opt/module/hadoop/etc/hadoop
fs.hdfs.hdfssite: /opt/module/hadoop/etc/hadoop/hdfs-site.xml

# ==================== 故障恢复、checkpoint ====================
restart-strategy: fixed-delay
restart-strategy.fixed-delay.attempts: 3
restart-strategy.fixed-delay.delay: 5 s
state.backend: rocksdb
state.backend.incremental: true
state.checkpoint-storage: filesystem
state.checkpoints.dir: hdfs:///flink/flink-checkpoints
state.checkpoints.num-retained: 1
state.savepoints.dir: hdfs:///flink/flink-savepoints


# =============== 禁用flink类加载器,优先使用用户上传===============
classloader.check-leaked-classloader: false
classloader.resolve-order: child-first
(3)配置workers
shell 复制代码
vim workers

node02
node03
node04
(4)创建必要的目录
shell 复制代码
mkdir -p /opt/module/flink/flink-data
mkdir -p /opt/module/flink/flink-blob
mkdir -p /opt/module/flink/flink-jar
mkdir -p /opt/module/flink/flink-zookeeper/data
mkdir -p /opt/module/flink/flink-zookeeper/logs
(5)配置环境变量
shell 复制代码
# 编辑环境变量,创建单独文件方便管理
vim /etc/profile.d/my_env.sh

# JAVA_HOME,JDK文章中已配置,此处不配,仅做展示
export JAVA_HOME=/opt/module/jdk8
export PATH=$PATH:$JAVA_HOME/bin

# ZOOKEEPER_HOME,zookeeper文章中已配置,此处不配,仅做展示
export ZOOKEEPER_HOME=/opt/module/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin

# HADOOP_HOME,hadoop文章中已配置,此处不配,仅做展示
export HADOOP_HOME=/opt/module/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_CLASSPATH=$(hadoop classpath)
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HADOOP_PID_DIR=/opt/module/hadoop/pid
export HADOOP_SECURE_PID_DIR=${HADOOP_PID_DIR}
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_JOURNALNODE_USER=root
export HDFS_ZKFC_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

# FLINK_HOME
export FLINK_HOME=/opt/module/flink
export PATH=$PATH:$FLINK_HOME/bin

# 退出后,刷新环境变量
source /etc/profile.d/my_env.sh
shell 复制代码
# 将配好的flink分发到node03,node04
scp -r flink/ root@node03:/opt/module/
scp -r flink/ root@node04:/opt/module/

七、集群测试

1、启动zookeeper,hadoop

shell 复制代码
# 启动zookeeper,三个节点分别启动
zkServer.sh start

# 启动hadoop,node02
# 启动hdfs集群
start-dfs.sh
# 启动hdfs集群
start-yarn.sh

2、Yarn Session测试

(1)模式介绍

YARN Session模式特点:

  1. 先启动一个长期运行的Flink集群
  2. 在该集群上可以提交多个作业
  3. 适合短作业频繁提交的场景
  4. 资源共享,启动速度快
(2)准备测试资源
shell 复制代码
# 创建测试用的HDFS目录
hdfs dfs -mkdir -p /flink/test/input
hdfs dfs -mkdir -p /flink/test/output

# 上传测试数据到HDFS
echo "hello world hello flink
flink is fast
hello hadoop
flink streaming" > test.txt

hdfs dfs -put test.txt /flink/test/input/
(3)启动YARN Session
shell 复制代码
# 在node02上执行(作为客户端)
cd $FLINK_HOME

# 方法1:交互式启动(推荐测试用)
./bin/yarn-session.sh -d

# 方法2:分离模式启动
./bin/yarn-session.sh -d -jm 1024m -tm 2048m -s 2 -nm "FlinkYarnSession"

# 参数说明:
# -d: 分离模式(后台运行)
# -jm: JobManager内存(默认1024m)
# -tm: 每个TaskManager内存(默认1024m)
# -s: 每个TaskManager的slot数量(默认1)
# -nm: YARN应用名称
# -qu: YARN队列名称
# -D: 传递Flink配置参数

# 示例:指定更多资源
./bin/yarn-session.sh \
  -d \
  -jm 2048m \
  -tm 4096m \
  -s 4 \
  -nm "FlinkTestSession" \
  -D taskmanager.memory.network.min=128mb \
  -D taskmanager.memory.network.max=256mb \
  -D parallelism.default=4
(4)查看YARN Session状态
shell 复制代码
# 查看YARN上的应用
yarn application -list

# 查找Flink Session应用ID
yarn application -list | grep Flink

# 查看应用详情
yarn application -status <application_id>

# 也可以直接打开yarn页面查看
(5)提交作业
shell 复制代码
# 首先找到刚刚启动的session,获取YARN应用ID
yarn application -list

# 测试1:提交WordCount示例作业
./bin/flink run \
  -m yarn-cluster \
  -yid application_1765702106723_0004 \
  ./examples/streaming/WordCount.jar \
  --input hdfs://ns/flink/test/input/test.txt \
  --output hdfs://ns/flink/test/output/wordcount_result

# 测试2:提交Socket作业(需要先启动netcat)
# 在一个终端启动netcat
nc -lk 9999

# 在另一个终端提交Socket作业
./bin/flink run \
  -m yarn-cluster \
  -yid application_1765702106723_0004 \
  ./examples/streaming/SocketWindowWordCount.jar \
  --hostname node02 \
  --port 9999
(6)停止YARN Session
shell 复制代码
# 方法1:通过YARN命令停止
yarn application -kill application_1765702106723_0004

# 方法2:通过Flink命令停止
echo "stop" | ./bin/yarn-session.sh -id application_1765702106723_0004

# 方法3:在Web UI中停止
# 访问ApplicationMaster Web UI -> Cluster -> Stop Cluster

3、Per-Job测试

(1)Per-Job模式介绍

Per-Job模式特点:

  1. 每个作业独立启动一个Flink集群
  2. 作业完成后集群自动释放资源
  3. 资源隔离性好
  4. 适合长时间运行的生产作业
(2)提交per-job作业
shell 复制代码
./bin/flink run -d \
  -m yarn-cluster \
  -ynm "FlinkPerJobWordCount" \
  -yjm 1024m \
  -ytm 1024m \
  -ys 1 \
  -p 1 \
  ./examples/batch/WordCount.jar \
  --input hdfs://ns/flink/test/input/test.txt \
  --output hdfs://ns/flink/test/output/perjob_wordcount
  
  
nc -lk 9999
# 在另一个终端提交Socket作业
bin/flink run -d \
  -m yarn-cluster \
  -ynm "FlinkPerJobWordCount" \
  -yjm 1024m \
  -ytm 1024m \
  -ys 1 \
  -p 1 \
  ./examples/streaming/SocketWindowWordCount.jar \
  --hostname node02 \
  --port 9999
  

# 参数详细说明:
# -m yarn-cluster: 指定YARN Per-Job模式
# -ynm: YARN应用名称
# -yjm: JobManager内存
# -ytm: TaskManager内存
# -ys: 每个TaskManager的slot数量
# -yqu: YARN队列名称
# -p: 作业并行度
# -yD: 传递动态参数,如:-yD taskmanager.memory.network.min=128mb
相关推荐
木卫四科技6 小时前
Agent Supply Chain Security:MCP、Skills 与 AI Agent 软件供应链安全新边界 | 木卫四科技
大数据·人工智能·安全·ai-bom·robot security·机器人安全·具身安全
ha_lydms6 小时前
HDFS的读写流程
大数据·hadoop·hdfs·mapreduce·yarn·maxcompute·odps
牛油果子哥q6 小时前
Prompt工程核心落地:结构化约束、Few-Shot示例、输出稳定性控
大数据·人工智能·prompt
千里码aicood6 小时前
Flask-基于python的智能健康监控系统-随机森林
大数据
Java后端的Ai之路6 小时前
23、Python - 策略模式
linux·python·策略模式
IT毕设实战小研6 小时前
基于大数据的白鹿的抖音评论分析与可视化
大数据·机器学习·信息可视化·数据分析·毕业设计·旅游
诸神缄默不语13 小时前
备战 AI 出海 DAY 0:海外数据采集
大数据·人工智能
名字还没想好☜15 小时前
用 systemd 托管后台服务:Restart 策略、日志接管、资源限制与开机自启全踩一遍
运维·docker·kubernetes
洋洋不叫杨杨15 小时前
揭秘当下知名的SEO优化渠道,你知道几个?
大数据·python
大大大大晴天15 小时前
用 Helm、CRD 与 Operator 管大数据:声明式运维如何替代脚本化部署
大数据