Flink相关整理

Flink

Apache Flink是一个计算框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。其针对数据流的分布式计算提供了数据分布、数据通信以及容错机制等功能。基于流执行引擎,Flink提供了诸多更高抽象层的API以便用户编写分布式任务

DataSet API, 对静态数据进行批处理操作,将静态数据抽象成分布式的数据集,用户可以方便地使用Flink提供的各种操作符对分布式数据集进行处理,支持Java、Scala和Python。

DataStream API,对数据流进行流处理操作,将流式的数据抽象成分布式的数据流,用户可以方便地对分布式数据流进行各种操作,支持Java和Scala。

Table API,对结构化数据进行查询操作,将结构化数据抽象成关系表,并通过类SQL的DSL对关系表进行各种查询操作,支持Java和Scala。

Table API和SQL通过join API集成在一起,这个join API的核心概念是Table,Table可以作为查询的输入和输出。

JobManager

Master进程,负责Job的管理和资源的协调。包括任务调度,检查点管理,失败恢复等。

对于集群HA模式,可以同时多个master进程,其中一个作为leader,其他作为standby。当leader失败时,会选出一个standby的master作为新的leader(通过zookeeper实现leader选举)。

Flink内部使用Akka模型作为JobManager和TaskManager之间的通信机制。

Flink On Yarn
图示:

1.申请资源
3.申请资源
4.分配集群
YarnClinet
ResourceManager
2.启动FlinkJobManager
Nodemanager即TaskManger
JobClient
  1. 在yarn启动ApplicationMaster的时启动ResourceManager分配节点给Flink的JobMaster
  2. JobMaster将Jobmanger和TaskManager的信息提交到ResourceManager,申请容器资源,通过ResourceManager返回的容器资源对Flink集群进行初始化
  3. 集群初始化后,有JobMaster统一调度Jobmanger

Flink Client的相关操作

一、创建任务

核心方法

/**
*Pipeline:YarnClient的通道,用来对Hadoop集群进行操作
*Configuration:Flink的相关配置,初始化Flink的
*
*/
AbstractJobClusterExecutor.execute(@Nonnull Pipeline pipeline, @Nonnull Configuration configuration)
二、暂停任务

暂停任务两个方法

  1. RestClusterClient.stopWithSavepoint

这个方法是有问题的,经过测试发现,Flink的任务只存在运行和结束状态,并不会存在停止,所以,在反复调用这个方法的时候,只会生成快照,但不会返回路径,因为要等待Flink任务执行完成之后请求才会返回路径,否则请求一直等待


/**
*这个方法是用来暂停Flink任务并生成快照的
*jobId:Flink的Job唯一标识
*advanceToEndOfTime:是否提前结束任务
*savepointDirectory:快照保存点路径
*/
public CompletableFuture<String> stopWithSavepoint(JobID jobId, boolean advanceToEndOfTime, @Nullable String savepointDirectory)
  1. RestClusterClient.cancelWithSavepoint

如果根据需求和Flink的状态,系统的暂停任务应当是调用此方法,结束Flink任务,生成快照,并返回快照的绝对路径

/**
*这个方法是用来取消Flink任务并生成快照的
*jobId:Flink的Job唯一标识
*savepointDirectory:快照保存点路径
*/
 public CompletableFuture<String> cancelWithSavepoint(JobID jobId, @Nullable String savepointDirectory)
三、取消任务

由于Flink集群是Flink-ON-Yarn的模式,所以取消任务也可以有两种用法

1.通过JobManger进行任务取消
RestClusterClient.cancel

/**
*jobId:Flink的Job唯一标识
*
*/
public CompletableFuture<Acknowledge> cancel(JobID jobID)

2.通过ResourceManager直接杀掉集群

YarnClient.killApplication

/**
*var1:表示ApplicationMater的唯一标识
*
*/
 public abstract void killApplication(ApplicationId var1) 

Flink任务提交方式

一、yarn seesion

需要先启动集群,然后在提交作业,接着会向yarn申请一块空间后,资源永远保持不变。如果资源满了,下一个作业就无法提交,只能等到yarn中的其中一个作业执行完成后,释放了资源,那下一个作业才会正常提交.
如图:

1.申请空间
yarn-seesion
启动hadoop集群
一块固定空间的
Flink-Job1
Flink-Job2
Flink-Job3
二、Flink run

一个任务会对应一个job,即没提交一个作业会根据自身的情况,向yarn申请资源,直到作业执行完成,并不会影响下一个作业的正常运行,除非是yarn上面没有任何资源的情况下。
如图:

Flink-run
Flink-Job1
Yarn集群空间
Flink-Job2
Flink-Job3

Flink source和sink

flink中的source作为整个stream中的入口,而sink作为整个stream的终点

SourceFunction为所有flink中source的根接口,其定义了run()方法和cancel()方法。
在SourceFunction中的run()方法用以作为source向整个stream发出数据,并用以控制数据的进入。

Flink的两层API

DataStream API

DataStream是Flink的第二层Api,Table API转换成DataStream
DataStream支持两种Sink输出方式

  1. AppendStream
  2. RetractStream

Table API
Table是Flink的最顶层API,Table对象由TableEnvironment生成,TableEnvironment包括:

  1. BatchTableEnvironment 批处理Table
  2. StreamTableEnvironment 流处理Table
    等等

Table支持

  1. AppendStream
  2. RetractStream
  3. UpsertStream(需要通过group by实现)
三种Stream对应的Sink
  1. AppendStreamTableSink
  • 可将动态表转换为Append流。适用于动态表只有Insert的场景
  1. RetractStreamTableSink
  • 可将动态表转换为Retract流。适用于动态表有Insert、Delete、Update的场景
  1. UpsertStreamTableSink
  • 可将动态表转换为Append流可将动态表转换为Upsert流。适用于动态表有Insert、Delete、Update的场景

RetractStreamTableSink中: Insert被编码成一条Add消息; Delete被编码成一条Retract消息;Update被编码成两条消息(先是一条Retract消息,再是一条Add消息),即先删除再增加。

UpsertStreamTableSink: Insert和Update均被编码成一条消息(Upsert消息); Delete被编码成一条Delete消息。

UpsertStreamTableSink和RetractStreamTableSink最大的不同在于Update编码成一条消息,效率上比RetractStreamTableSink高。

TableEnvironment创建Table的基本操作

TableEnvironment.fromCollection通过集合创建表,作为Flink入口

/**
*data:数据内容
*typeInfo:数据列项
*/
 public <OUT> DataStreamSource<OUT> fromCollection(Collection<OUT> data, TypeInformation<OUT> typeInfo)
Table的基本操作

TableEnvironment.createTemporaryView将数据创建成视图

/**
*var1:视图名称
*var2:table数据内容
*/
 void createTemporaryView(String var1, Table var2);

TableEnvironment.registerFunction 注册Flink函数

/**
*var1:函数名称
*var2:函数定义
*/
 <T> void registerFunction(String var1, TableFunction<T> var2)
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值