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

相关推荐
财经三剑客1 小时前
AI元年,春节出行安全有了更好的答案
大数据·人工智能·安全
岁岁种桃花儿2 小时前
Flink CDC从入门到上天系列第一篇:Flink CDC简易应用
大数据·架构·flink
TOPGUS2 小时前
谷歌SEO第三季度点击率趋势:榜首统治力的衰退与流量的去中心化趋势
大数据·人工智能·搜索引擎·去中心化·区块链·seo·数字营销
2501_933670793 小时前
2026 高职大数据与会计专业零基础能考的证书有哪些?
大数据
ClouderaHadoop3 小时前
CDH集群机房搬迁方案
大数据·hadoop·cloudera·cdh
TTBIGDATA3 小时前
【Atlas】Ambari 中 开启 Kerberos + Ranger 后 Atlas Hook 无权限访问 Kafka Topic:ATLAS_HOOK
大数据·kafka·ambari·linq·ranger·knox·bigtop
程序员清洒3 小时前
CANN模型部署:从云端到端侧的全场景推理优化实战
大数据·人工智能
lili-felicity4 小时前
CANN多设备协同推理:从单机到集群的扩展之道
大数据·人工智能
pearbing5 小时前
天猫UV量提高实用指南:找准方向,稳步突破流量瓶颈
大数据·uv·天猫uv量提高·天猫uv量·uv量提高·天猫提高uv量
Dxy12393102166 小时前
Elasticsearch 索引与映射:为你的数据打造一个“智能仓库”
大数据·elasticsearch·搜索引擎