Flink部署

Flink部署

Flink提交作业和执行任务的关键组件:

  • 客户端(Client):代码由客户端获取并转换以后,提交给JobManager
  • JobManager:就是Flink集群里的"话事人",对作业进行中央调度管理,他获取到要执行的作业后,会进一步处理转换。然后分发给众多的TackManager
  • TaskManager:真正的"干活的人",他们来进行数据的处理操作。
节点服务器 hadoop102 hadoop103 hadoop104
角色 JobManager、TaskManager JobManager JobManager

步骤

  1. 创建三台虚拟机centOS7.5三台
  2. 修改主机名
  3. 配置hosts的ip地址
shell 复制代码
#/etc/hosts
192.168.xxx.xxx jobmanager
192.168.xxx.xxx taskone
192.168.xxx.xxx tasktwo

环境配置

修改CentOS镜像源

备份原有 Yum 源配置

shell 复制代码
sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak

下载阿里云 Yum 源配置文件

shell 复制代码
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

阿里源配置

shell 复制代码
# 1. 删掉带内网地址的 repo
rm -f /etc/yum.repos.d/*aliyun*.repo \
       /etc/yum.repos.d/CentOS-Base-*.repo

# 2. 重新下载公共版阿里云 CentOS 7 源
curl -o /etc/yum.repos.d/CentOS-Base.repo \
     http://mirrors.aliyun.com/repo/Centos-7.repo

# 3. 重建缓存
yum clean all
yum makecache
JAVA环境配置
shell 复制代码
echo "2. 安装 OpenJDK 1.8(devel 带编译工具)..."
yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel

环境变量

shell 复制代码
#~/.bashrc
export JAVA_HOME=$(readlink -f /usr/bin/java | sed 's:/bin/java::' | sed 's:/jre/bin/java::')
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH

source ~/.bashrc

关闭防火墙
shell 复制代码
[root@jobmanager flink]# systemctl stop firewalld
[root@jobmanager flink]# systemctl disable firewalld
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.
[root@jobmanager flink]#
配置ssh免密连接(JobManager节点)
shell 复制代码
# 1. 生成密钥(如果还没)
ssh-keygen -t rsa   # 一路回车
# 2. 把公钥拷到三个taskmanager
ssh-copy-id root@192.168.47.133
ssh-copy-id root@192.168.47.134
ssh-copy-id root@192.168.47.135

压缩包下载

下载Flink安装包,在Flink官网

Downloads | Apache Flink

找个东西确实不好找直接Ctrl+F,搜索"1.17"

上传至虚拟机

解压后配置配文件(注意这是yaml文件,在写参数的时候,要在冒号后面加空格)

shell 复制代码
#.../flink/conf/flink-conf.yaml
jobmanager.rpc.address: jobmanager
jobmanager.bind-host: 0.0.0.0
taskmanager.bind-host: 0.0.0.0
taskmanager.host: jobmanager
rest.address: jobmanager
rest.bind-address: 0.0.0.0

参数解释

shell 复制代码
#指定jobmanager节点的地址
jobmanager.rpc.address: jobmanager  
#指定允许访问的ip,这里的0.0.0.0是允许所有ip访问
jobmanager.bind-host: 0.0.0.0
taskmanager.bind-host: 0.0.0.0
#当前节点的TaskManager的地址
taskmanager.host: jobmanager
#WebUI的访问地址
rest.address: jobmanager
rest.bind-address: 0.0.0.0

配置文件解析

  1. jobmanager.memory.process.size:对JobManager进程可使用到的全部内存进行配置,包括JVM元空间和其他开销,默认为1600M,可以根据集群规模进行适当调整。
  2. taskmanager.memory.process.size:对TaskManager进程可使用到的全部内存进行配置,包括JVM元空间和其他开销,默认为1728M,可以根据集群规模进行适当调整。
  3. taskmanager.numberOfTaskSlots:对每个TaskManager能够分配的Slot数量进行配置,默认为1,可根据TaskManager所在的机器能够提供给Flink的CPU数量决定。所谓Slot就是TaskManager中具体运行一个任务所分配的计算资源。
  4. parallelism.default:Flink任务执行的并行度,默认为1。优先级低于代码中进行的并行度配置和任务提交时使用参数指定的并行度数量。

文件传输

通过scp指令将写好的配置文件发送到指定的节点的对应的目录下(这里的-r指的是把对应目录下的所有文件一并发送)

shell 复制代码
scp -r (待发送文件) usrname@ip:地址

在两个Task节点修改相关的配置信息

其实只需要修改taskmanager.host参数改成当前节点的ip或者hostname

最后在jobmanager节点的conf/worker文件添加taskManager节点的ip

shell 复制代码
#.../flink/conf/worker
192.168.xxx.xxx
192.168.xxx.xxx
192.168.xxx.xxx

启动

执行启动脚本

shell 复制代码
[root@jobmanager flink]# bin/start-cluster.sh
Starting cluster.
Starting standalonesession daemon on host jobmanager.
Starting taskexecutor daemon on host jobmanager.
Starting taskexecutor daemon on host taskone.
Starting taskexecutor daemon on host tasktwo.
[root@jobmanager flink]# jps
22112 StandaloneSessionClusterEntrypoint
22592 Jps
22460 TaskManagerRunner
[root@jobmanager flink]#

TaksManager节点:

shell 复制代码
[root@taskone flink]# jps
5024 TaskManagerRunner
5132 Jps
[root@taskone flink]#

访问网页端

http://192.168.xxx.xxx:8081(JobManagerIP)

作业提交执行

我们在搭建好集群以后,来尝试将Java程序打包到Flink集群执行

pom.xml配置
xml 复制代码
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.10.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>

        <!-- 新增:尚硅谷推荐的 shade 插件,专门打 fat-jar -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.2.4</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <!-- 排除 Flink 集群已提供的依赖,减小体积并避免冲突 -->
                        <artifactSet>
                            <excludes>
                                <exclude>com.google.code.findbugs:jsr305</exclude>
                                <exclude>org.slf4j:*</exclude>
                                <exclude>log4j:*</exclude>
                                <exclude>org.apache.flink:flink-*</exclude>
                            </excludes>
                        </artifactSet>

                        <!-- 过滤签名文件,防止安全异常 -->
                        <filters>
                            <filter>
                                <artifact>*:*</artifact>
                                <excludes>
                                    <exclude>META-INF/*.SF</exclude>
                                    <exclude>META-INF/*.DSA</exclude>
                                    <exclude>META-INF/*.RSA</exclude>
                                </excludes>
                            </filter>
                        </filters>

                        <!-- 合并 META-INF/services 等资源 -->
                        <transformers combine.children="append">
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

成功得到两个jar包

集群执行jar包

将jar包提交到集群

在IDEA中选择复制类的全限定名

点击submit提交到集群

记得启动流处理对应节点的服务

这时我们在Task Manager标签下发现taskTwo节点的资源减少了,说明我们的任务运行在了TaskTwo节点,我们点击进入TaskTwo节点查看他的Stdout就能看到对应的输出

相关推荐
徐先生 @_@|||4 小时前
数据分析体系全览导图综述
大数据·hadoop·分布式·数据分析
q_35488851534 小时前
机器学习:Python地铁人流量数据分析与预测系统 基于python地铁数据分析系统+可视化 时间序列预测算法 ✅
大数据·人工智能·python·算法·机器学习·信息可视化·数据分析
房产中介行业研习社4 小时前
2026年1月房产中介管理系统评测
大数据·人工智能
jkyy20145 小时前
赋能药品零售:以数智化慢病管理应用平台构建健康服务新节点
大数据·人工智能·健康医疗·零售
JNU freshman5 小时前
从 Ceph 16(Pacific)到 Ceph 18(Reef):cephadm 的伸缩性演进与 cephadm agent 到底“成熟”了吗?
java·大数据·ceph
萤丰信息6 小时前
数字经济与 “双碳” 战略双轮驱动下 智慧园区的智能化管理实践与未来演进
大数据·人工智能·科技·智慧城市·智慧园区
pingao1413786 小时前
实时远程监控,4G温湿度传感器守护环境安全
大数据·人工智能·安全
你才是臭弟弟6 小时前
TDengine TSDB(数据备份与恢复)
大数据·时序数据库·tdengine
川西胖墩墩6 小时前
网站开发完整流程梳理
大数据·数据库·架构·流程图·敏捷流程