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就能看到对应的输出

相关推荐
自由能燃气设备15 分钟前
燃气容积式热水器厂家选购指南:2026年商用热水设备采购避坑手册
大数据·数据库·数据仓库·人工智能
ApacheSeaTunnel20 分钟前
从 60万行/秒说起,看 SeaTunnel Zeta 基准测试如何做到”测得准“
大数据·数据集成·基准测试·seatunnel·数据同步
2601_963869951 小时前
【计算机毕业设计】基于Java的线上就医平台设计与实现
大数据·人工智能·课程设计
TDengine (老段)2 小时前
TDengine taosAdapter — 多协议网关详解
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
恒拓高科WorkPlus2 小时前
从“可选项”到“必选项”——私有化部署即时通讯如何重塑企业协作新底座
大数据·网络·人工智能
IT摆渡者3 小时前
VM EXSI7.0存储硬盘故障处理
大数据·linux·github
Bobolink_3 小时前
IP更换频率:账号运营里多久换一次IP算正常
大数据·网络协议·tcp/ip
大任视点3 小时前
“我与秦岭”主题征文与故事及“秦岭微镜头”短视频、摄影作品征集活动通知
大数据·人工智能·业界资讯
Bzc11456233 小时前
守正笃行 匠心护康:以中医智慧赋能新时代慢病长效管理
大数据·人工智能·生活
BD_Marathon3 小时前
部署Spark
大数据·javascript·spark