Flink
1、 Flink:StandAlone cluster 模式
此模式,不依赖hadoop的yarn,主要用于测试和学习
步骤
1.上传flink的压缩包到主节点
解压flink的压缩包 flink-1.11.2
2.修改配置文件
第一个配置文件 flink-conf.yaml
flink-conf.yaml
#该配置文件中主要有一下配置
1 jobmanager.rpc.address: master
#端口默认是6123
2 jobmanager.rpc.port: 6123
#jobmanager的内存默认大小
3 jobmanager.memory.process.size: 1600m
#taskmanager的内存默认大小
4 taskmanager.memory.process.size: 1728m
5 taskmanager.numberOfTaskSlots: 1
#默认并行度 优先级较低
6 parallelism.default: 1
#这些配置根据公司服务器的情况修改
第二个配置文件 workers
workers 改成你的从节点的主机名(前提是你要配置主机名地址映射)
第三个配置文件 masters
masters
配置文件里配置你的主节点和端口
默认是: localhost:8081
3.同步到从节点
将flink文件夹直接同步到另外两个从节点上
4.启动flink集群
cd flink/bin
./start-cluster.sh
主节点会有一个jobmanager,在主节点的名字是StandaloneSessionClusterEntrypoint
两个从节点会有taskmanager ,在从节点的名字是TaskManagerRunner
启动完成会有一个web页面供我们来访问和设置任务
http://hadoop01:8081
大致是这样一个页面
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r9dHoSuW-1628474340372)(https://i.loli.net/2021/08/06/US1NzHc5kOBM8v7.png)]
flink提交任务可以在命令行提交也可在可视化页面中提交任务
提交的话,需要将代码打成jar包上传之后,配置需要运行的类的路径名,配置并行度等等,配置完成即可运行此任务。
任务运行的输出结果可以在可视化页面看到
也可以通过命令行的方式提交任务
Jar包必须在命令行执行的路径下
提交了任务之后,这个任务也会出现在web页面显示执行的状态
flink run -c 类名路径(com.che.WorrCount) jar包名
注意: 1.我们提交的代码中可能会使用到kafka和flink之间连接的依赖包,这个需要提前将这个依赖包传到flink下的lib目录中,不然我们在运行有关kafka的项目的时候,会找不到kafka消费者的类。如果一开始忘记导入这个jar包,那么flink的集群需要在Jar包导入后,重新启动集群。并且这个jar包,三个节点都要导入,因为最终执行任务是在子节点taskmanager中。
2.在消费kafka的数据的时候,要注意消费者组的变化,第一次消费时的消费者组,在第二次如果消费者组不改变,默认是消费不到数据的,需要改变消费者组。
2、OnYarn cluster模式
这个模式需要依赖hadoop集群了,并且需要启动yarnsession进程,
所以flink需要整合Yarn
整合yarn,不需要改动上边里的配置文件,他不需要更改,只需配置一下环境变量,然后按照下面的步骤来即可
2.1 整合yarn
整合之前:
先关闭flink进程
只需要在主节点配置flink即可,从节点的两个flink可以删除
整合过程:
1、首先在etc/profile 中添加一个hadoop的配置文件路径
example:
export HADOOP_CONF_DIR=/opt/modules/hadoop-2.7.6/etc/hadoop/
加进去之后,
soure /etc/profile
2、需要一个flink整合hadoop的jar依赖包(flink-shaded-hadoop-2-uber2.7.6)
将这个依赖包上传到flink安装目录下的lib下
flink和spark一样,都是粗粒度资源调度
2.2 启动方式
启动之前需要先启动hadoop集群
启动方式1:yarn-session
在yarn里面启动一个flink集群 jobmanager
yarn-session.sh -jm 1024m -tm 1096m
成功启动之后,会返回一个地址,通过这个地址可以进入flink的web页面
-----------------------------------
jm=jobmanager tm=taskmanager
提交任务:
1.在web页面提交任务
2.使用flink命令提交任务
flink run -c com.che300.test flink-1.0.jar
com.che300.test 代表你的要运行的任务的包路径名
flink-1.0.jar 代表你的代码达成的jar包的名字
3.rpc方式提交任务
注意:这个启动方式,有缺点,就是你的任务如果占用的资源较多,他就会一直占用整个集群的资源,导致后续的任务不能执行
启动方式2:
直接提交任务到yarn 每一个任务都会有一个jobManager
flink run -m yarn-cluster -yjm 1024m -ytm 1096m -c com.shujia.flink.soure.Demo4ReadKafka flink-1.0.jar
杀掉yarn上的任务
yarn application -kill application_1599820991153_0005
两种方式的对比:
yarn-session先在yarn中启动一个jobMansager ,所有的任务共享一个jobmanager (提交任务更快,任务之间共享jobmanager , 相互有影响)
直接提交任务模型,为每一个任务启动一个joibmanager (每一个任务独立jobmanager , 任务运行稳定)
3 、编写代码测试flink
2021-8-9 9:44
暂时先不写
记录:
1.对于flink的任务,我们这里只要启动了任务,就会一直运行下去,实时计算过来的数据,就不需要使用调度工具进行调度了。
4、flink是什么?
flink是一个框架和分布式处理引擎,用于在无边界和有边界数据流上进行有状态的计算。flink能子啊所有常见集群环境中运行,并能以内存速度和任意规模进行计算。
4.1 处理无界和有界数据
任何类型的数据都可以形成一种事件流,信用卡交易、传感器测量、机器日志、网站或移动应用程序上的用户交互记录,所有这些数据都形成一种流。
1、无界流有定义流的开始但没有定义流的结束。它会无休止地产生数据。无界流的数据必须持续处理,即数据被摄取后需要立刻处理。我们不能等到所有数据都到达再处理,因为输入是无限的。在任何时候输入都不会完成。处理无界数据通常要求以特定顺序摄取事件,例如事件发生的顺序,以便能够推断结果的完整性。
2、有界流有定义流的开始,也有定义流的结束。有界流可以在摄取所有数据后再进行计算。有界流所有数据可以被排序,所以并不需要有序摄取。有界流处理通常被称为批处理
4.2 部署应用到任意地方
Apache Flink 是一个分布式系统,它需要计算资源来执行应用程序。Flink 集成了所有常见的集群资源管理器,例如 Hadoop YARN、 Apache Mesos 和 Kubernetes,但同时也可以作为独立集群运行。
Flink 被设计为能够很好地工作在上述每个资源管理器中,这是通过资源管理器特定(resource-manager-specific)的部署模式实现的。Flink 可以采用与当前资源管理器相适应的方式进行交互。
部署 Flink 应用程序时,Flink 会根据应用程序配置的并行性自动标识所需的资源,并从资源管理器请求这些资源。在发生故障的情况下,Flink 通过请求新资源来替换发生故障的容器。提交或控制应用程序的所有通信都是通过 REST 调用进行的,这可以简化 Flink 与各种环境中的集成。
4.3 运行任意规模应用
Flink 旨在任意规模上运行有状态流式应用。因此,应用程序被并行化为可能数千个任务,这些任务分布在集群中并发执行。所以应用程序能够充分利用无尽的 CPU、内存、磁盘和网络 IO。而且 Flink 很容易维护非常大的应用程序状态。其异步和增量的检查点算法对处理延迟产生最小的影响,同时保证精确一次状态的一致性。
Flink 用户报告了其生产环境中一些令人印象深刻的扩展性数字
- 处理每天处理数万亿的事件,
- 应用维护几TB大小的状态, 和
- 应用在数千个内核上运行。
4.4 利用内存性能
有状态的 Flink 程序针对本地状态访问进行了优化。任务的状态始终保留在内存中,如果状态大小超过可用内存,则会保存在能高效访问的磁盘数据结构中。任务通过访问本地(通常在内存中)状态来进行所有的计算,从而产生非常低的处理延迟。Flink 通过定期和异步地对本地状态进行持久化存储来保证故障场景下精确一次的状态一致性。