一个任务的子任务占据一个slot,不同任务可以占据同一个slot。
元组:
资料:
scala插件下载:http://plugins.jetbrains.com
flink的官方文档:https://flink.apache.org/zh/flink-architecture.html
flnk是流式的处理,spark是批式的处理。
处理的架构:
---01---
oltp关系
基于事件实时的响应的,问题是数据量非常多的话数据库的压力会很大的。
olap分析
演化还是基于事件的方式的。
不是读取关系型数据库而是保存在本地的状态。
checkpoint检查点。
flink解决了批和流的两套,合并为一套。
---
flink是事件的驱动的。
基于流的处理:
批处理是有界的流。
flink的分层api
主要是中间层。
---02---
开发环境写flink的代码。
代码实现一个简单的wordcount
代码:
关于flatMap:
map和flatmap:
flatmap的很牛逼的解释:
flatMap:http://dblab.xmu.edu.cn/blog/961-2/
DataSet是我们中间层的api:
这个过程flink是要做统一的管理的。
---03---
几个具体的语义:
flink是事件驱动的,在流式处理的时候才会有事件的概念。读取文件的每一行式一个事件。
第一步:
第二步:再来
第三步:再来再次得到的式GroupDataSet
---04---
注意之前是批处理的,现在是流处理的。
流处理的代码:
keyBy实际做的事情是和groupBy是一样的, keyBy是重分区的。flink需要外部的事件去驱动的。
启动参数:
一台机器多个线程,模拟分布式,序号是线程的编号,默认的并行度是cpu核心的数量:
我们是可以调整并行度的:
再次运行,看到不是默认的4核心了。
全局的并行度是8,实际上每一步都是可以单独配置并行度的。
两个并行度配置6个
reblance 上游的任务和下游的任务的关系
---05---
我的版本是什么:
yarn是必须要有hadoop支持的版本的。
需要下载binaries
需要hadoop支持的话:
增加了hadoop
用这个就可以了。
部署和提交,部署到集群环境里面去。
部署:flink的下载地址:http://archive.apache.org/dist/flink/
我的flink部署在哪里:
在实际的生产中用yarn是比较普遍的方式的,我们是standlone模式的。
怎么安装的自己要好好看下的。
flink的机器是133这个机器。
在bin下面:
yarn-session:创建yarn-session在yarn-session创建job和提交的。
配置文件:注意版本是1.10.0
1.看下配置文件,在哪里启动集群,一个集群的job-manager就是一个的
2.jobmanager和其他节点通信都是rpc的方式的,默认的是6123。
3.第一个式jvm的堆大小,第二个是堆和堆外的大小
实际是taskmanager是干活的要的资源要多的。jobmanager是调度的。
4.指的是一个taskmanageer可以提供多少个slots 一个slot就是用来执行任务的最小的单元 一个并行的任务不同的子任务必须执行再不同的taskSlot上。
5.默认的并行度,第一个是能力,第二个是我的执行力就是默认的,能力很大但是我可以不用。代码配置的优先级是最高的。
6.故障恢复的策略。
7.访问的端口
8.其它的配置 需要配置slaves文件去增加taskmanager
如何启动呢?
还有文件masters和slaves
本地的机器即启动了JobManager也启动了taskManager。
参数的解读:192.168.244.133:8081
这里:task Manager是1,配置文件一个task Manage提供1个slot。每个taskManager的taskSlot的数量就是节点的核心数量。
设置时间同步:
在哪里打包呢?
生成的jar包是带后缀的。
并行度的优先级,从高到底:
1.代码最高单独配置最高
2.全局声明的环境第二
3.
读取文本流是不能控制
同一个任务的并行子任务而言的,同一个任务的并行子任务是不可以分配到一个slot的,但是不同任务的并行子任务是可以的。
主要是因为i同一个任务的并行子任务可能会共享数据,这样是线程不安全的。
一般是一个slot对应的与一个cpu资源的。
4.flink的配置文件的
参数:com.atguigu.wc.StreamWordCount
--host localhost --port 7777
---
目前只有1个slot,被分配了。
这个指的是两个任务,并行度是1,每个子任务是共享的处理槽。
相同的key的hashcode是一样的,就会分配到同一个分区里面去。
两个任务是可以用一个处理槽处理的。同一个任务的并行子任务必须分配到不同的slot。
另一种提交方式:
其中p是并行度。
结束:
提交方式还要再看的,先不看了。
---06---
前后执行的任务可以共享slot。
slot就是定义好的最小的处理任务的单元。
dispatch收到应用,启动jobManager,将应用提交给jobManager,jobManager分析应用,向resourcemanager去请求slot。
resourcemanager启动对应的taskManager。
这里的resourceManager实际上是yarn的resourceManager。
客户端提交job给yarn的resourcemanager。
ApplicationMaster去加载HFDFS上的资源。
这个是5个任务,这5个任务并不需要都独立的占用一个taskSlot。
可以让不同的任务共享一个slot。
一个TM有三个slot就是内存分为3份给每一个slot
slot之间内存是独享的,是隔离的。cpu不是独享的。slot数量配置为核心线程数,不会出现cpu轮转竞争资源的方式。
上面那个图有5个任务。
并行度就是slot的个数,上图的并行度是6。一共是13个任务。
什么是任务?逻辑图是算子,物理图是任务。一个算子可以有多个任务的。一个任务占据一个处理槽。多个不同算子的任务可以共享有个处理槽。
13个任务,不同任务共享slot。
一个slot是可以包含完整的操作的步骤的,完整的管道是可以保留下来的。
跨slot要序列化反序列化的。
一个程序需要的slot的数量就是整个流处理流程中那个最大的并行度。
taskmanager是任务,一个slot是一个子任务。
并行度即使slot的数量。
---07---
任务链:
看下并行度我们是如何定义的:
这个按照并行度,我们分为了7个任务,这些任务是如何占用slot的呢?
图中几个圆圈就是几个任务,不一样的任务是可以共享slot的,可以只占用两个slot:
最后两个slot五个任务。
并行度相同还是窄依赖的可以合并的。
---08---