?Flink基于zookeeper/yarn(基于zookeeper),zookeeper挂掉如何处理
?slot底层是什么
?什么时候flink的流批进行统一处理
?Flink的datastream与spark的dataframe有什么区别
?从Kafka向Flink输入数据,过程中kafka宕机,如何保证数据不丢失,不重复读取
?ack机制与checkpoint区别
?jvm堆内存一般放什么
flink:
一个框架和分布式处理引擎,用于在无边界和有边界数据流上进行有状态的计算
优势:
1高性能,高吞吐,低延迟;(如何实现?)
2支持event Time(如何实现?)
3支持有状态计算(如何实现?)
4支持灵活的window(Time/Count/Session/Data-driven),灵活的触发条件(如何实现?)
5基于轻量级分布式快照CheckPoint,支持容错,将拆解成的小计算过程分布到节点上处理,checkpoint将执行状态中状态信息进行持久化存储,确保处理数据在过程中的一致性(与ack机制的区别)
6基于JVM实现独立的内存管理,将所有数据对象转化城二进制在内存中存储,降低存储大小,对内存空间充分利用
7savePoint将任务执行的快照存储,任务重启时可直接从save点恢复
什么是状态?
计算过程中产生的中间结果,每次计算新结果是基于中间结果,不需进行全量计算,减少计算过程中间损耗和硬件存储
主要应用:
实时智能推荐、复杂事件处理(工业领域)、实时欺诈检测、实时数仓、ETL类型、流数据分析类型、实时报班类型等业务场景
流处理案例:
main
val env=StreamExecutionEnvironment.getExecutionEnvironment
import org.apache.flink.streaming.api.scala._
val stream=env.sockTextStream("node1",8888)
stream.flatmap(_.split(","))
.map((_,1))
.keyby(0)
.sum(1)
.print
env.execute("wordcount")
集群基本架构
Master-Server架构原则(JobManger TaskManager)
采用多线程方式,比MR的多JVM进程方式,提高CPU效率,在多个任务和Task之间通过TaskSlot共享系统资源,每个TaskManager管理多个TaSlot资源池对资源进行管理
Slot与并行度区别:一个是实际拥有能力,一个是实际使用的并发能力
集群运行模式
Standalone:不依赖其他平台,独立部署
on yarn:
(改yarn尝试次数及关闭内存限制;下载Pre-bundied Hadoop 2.7.5连接jar包)
1session-cluster,yarn中初始化一个集群
2Pre-job-cluster,每次提交job,创建一个新的flink集群
Flink集群的HA:
依赖zookeeper和hdfs,分配多台jobmanager(写在masters文件中)
配置flink-shaded-hadoop-2-uber-2.7.5-10.0.jar依赖包
Flink On Yarn HA:
部署:
借助zookeeper完成,
配置jobmanager元数据存储路径到hdfs(flink-conf.yaml high-availabilty.storageDir:hdfs://mycluster/flink/yarnha/)
配置zookeeper集群节点
实现原理(运行逻辑):
1.启动Flink Yarn client 会话,申请资源,检查资源是否可用,上传jar包、conf到hdfs
2.client向Yarn Manager 请求 资源、ApplicationMaster、Container ,同一容器有 ApplicationMaster 和JobManager
3.Yarn Manager 分配ApplicationMaster 、JobManager
4.JobManager 分配 taskerManager
5.taskerManager 从hdfs下载 jar和conf(配置环境)
提交任务模式
1.session-cluster
YARN中提前初始化一个Flink集群(称为Flink yarn-session),开辟指定的资源。Flink集群会常驻在YARN集群中,除非手工停止(yarn application -kill id)
2.per-Job
每次提交Flink任务都会创建一个新的Flink集群,每个Flink任务之间相互独立
任务并行度设置的优先顺序:
算子层面(Operator level)>执行环境..(Execution Environment..)>客户端..(Client..)>系统..(System..)
Flink常用API
SQL/Table API(dynamic tables)
DataStream Api(Streams,windows)
ProcessFunction(events,state,time)
DataStream
Environment
DataSource
--HDFS:
env.readTextFile("hdfs://node2:8020/xx")
--Sqe:
env.fromCollection(Array(
new Tuple(,)
))
--Element:
env.fromElement(('A',1),('B',1))
--Kafka:
①读取Kafka String
val pops=new Properties()
pops.setProperty("bootstrap","nodex:9092")
pops.setProperty("key.deserializer",classOf[StringDeserializer].getName)
...
env.addSource(new FlinkKafkaConsumer[String]("name",new SimpleStringSchema(),pops)
②读取Kafka KV类型
...
val xx=new FlinkKafkaConsumer[(String,Int)])(
"name",
new KafkaDeserializationSchema[(Int, String)] {
},
props)
)
env.addSource(flinkKafkaConsumer.setStartFromLatest())
--自定义Source:
实现SourceFunction
实现ParallelSourceFunction 继承RichParallelSourceFunction
Transformation
--Map(DataStream->D)
--FlatMap(D->D)
--Filter(D->D)
--KeyBy(D->KeyStream)
--Reduce(K->D)
val reduceStream = keyedStream.reduce {
(t1, t2) =>
(t1._1, t1._2 + t2._2)}
--Aggregations(K->D)
将reduce函数进行封装,sum min max minby maxby...
--Union(D->D)
val unionStream = dataStream1.union(dataStream_02)
--Connect CoMap CoFlatMap(D->connected stream ->D)
**Union两流格式必须一样
**Connect两流或者多流格式可以不一样,connectStream后,需Comap调整为一样的格式
val connectstream=datastream1.connect(datastream2)
connectstream.map(t1=>(t1._1,t1._2),t2=>(t2,0))
--Split select(D->Split stream->D)
val splitStream=datastream.split(t=>if (t._2%2==0) seq("even")else seq("odd"))
val eventstream=splitstream.select("even")
val allstream=splitstream.select("even","odd")
Sink
--HDFS
设置滚动规则 DefaultRollingPolicy.create()
( * withInactivityInterval :桶不活跃的间隔时长,如果一个桶最近一段时间都没有写入,那么这个桶被认为是不活跃的,sink 默认会每分钟检查不活跃的桶、关闭那些超过一分钟没有数据写入的桶。
* withMaxPartSize : 设置文件多大后生成新的文件,默认128M。
* withRolloverInterval :每隔多长时间生成一个新的文件,默认1分钟)
StreamingFileSink.forRowFormat[StationLog](
new Path("hdfs://mycluster/flinkresult"),
new SimpleStringEncoder[StationLog]("UTF-8"))
.withBucketCheckInterval(1000)//检查分桶的间隔时间,默认每分钟检查桶(目录),是否生成新的桶目录,默认是每小时生成一个桶。
.withRollingPolicy(policy) )
--Redis
val confg=new FlinkJedisPoolConfig.builder().setDatabase(1).setPort(6379).build()
result.addSink(new RedisSink[(String, Int)](config,new RedisMapper[(String, Int)] {
override def getCommandDescription = new RedisCommandDescription(RedisCommand.HSET,"t_wc") //t_wc是表名
override def getKeyFromData(data: (String, Int)) = {
data._1 //单词
}
override def getValueFromData(data: (String, Int)) = {
data._2+"" //单词出现的次数
}
}))
--Kafka
val props = new Properties()
props.setProperty("bootstrap.servers","hadoop101:9092,
相关推荐
Flink 内存梳理与遇到的问题修复
flink
flink-shaded-hadoop-2-uber-2.7.5-10.0.jar
flink整合Hadoop,注意:以 Yarn 模式部署 Flink 任务时,要求 Flink 是有 Hadoop 支持的版本,Hadoop 环境需要保证版本在 2.2 以上,并且集群中安装有 HDFS 服务。
Flink面试题梳理
公众号:小晨说数据 微信:weixin605405145 基础 1.Flink计算单位是什么? 2.Flink时间类型有那些,他们有什么区别? 3.Flink窗口类型有哪些,你们目前用的什么窗口? 4.Flink的状态你们有没有用过,用的什么类型的状态? 5.Flink如何处理延迟数据? 6.Flink中managed state和raw state区别? 7.Flink的keystate有什...
flink-shaded-hadoop-2-uber-2.7.5-10.0.jar.zip
flink-shaded-hadoop-2-uber-2.7.5-10.0
Flink集群搭建
Flink-1.11.2集群搭建,StandAlone模式和On Yarn模式
[1133]flink问题集锦
文章目录 问题1: Could not get job jar and dependencies from JAR file: JAR file does not exist: -yn 原因:flink1.8版本之后已弃用该参数,ResourceManager将自动启动所需的尽可能多的容器,以满足作业请求的并行性。解决方法:去掉即可 问题2: java.lang.IllegalStateException: No Executor found. Please make sure to export t
Flink知识梳理
flink 知识点梳理
flink 基础知识梳理
Flink、Kafka梳理
flink和kafka梳理
Flink概念梳理
Flink分层架构 StateFul Stream Processing,最底层的实现,主要方法是processSunction,编程灵活度高,但是开发比较复杂。
flink-shaded-hadoop-2-uber-3.0.0-cdh6.2.0-7.0.jar
# 解压命令 tar -zxvf flink-shaded-hadoop-2-uber-3.0.0-cdh6.2.0-7.0.jar.tar.gz # 介绍 用于CDH部署 Flink所依赖的jar包
flink-shaded-hadoop-2-uber-2.7.4-11.0.jar
hadoop版本2.7.4,flink 版本1.11,官网没有编译好的flink-shaded-hadoop-2-uber-2.7.4-11.0.jar,自己编译成功的jar,可以直接放到flink下lib目录下即可
flink-shaded-hadoop-2-uber-2.7.5-10.0.zip
flink-shaded-hadoop-2-uber-2.7.5-10.0
Flink DataStream 算子梳理
.一 .前言1.1. Flink算子分类1.2. 数据类型转换关系二 .算子清单2.1. Map2.2. FlatMap2.3. Filter2.4. KeyBy2.5. Reduce2.6. Fold [废弃]2.7. Aggregation2.8. Window2.9. WindowAll2.10. Window Apply2.11. Window reduce2.12. Window Fold [废弃]2.13. Window Aggregation2.14. Window Join2.15.Uni
Flink heartbeat逻辑梳理
背景 最近看了一个flink相关的issue,主要是在heartbeat来带上TaskManager的status作为payload,主要是为了解决TaskExecutor#updateTaskExecutionState会因为暂时的网络异常原因导致将TM的状态通知到JM失败的问题,如果是terminal state的通知失败会导致JM无法感知TM的结束。具体讨论细节请看issue issue地址: https://issues.apache.org/jira/browse/FLINK-17075 flin
flink基础概念梳理
监控 Dashboard 时,先看 JM 的 Checkpoint 和异常,再看 TM 的背压和内存,基本能定位 90% 的问题。
Flink基础知识梳理
Flink入门基础编程框架wordcount批处理版本wordcount流处理版本Flink基本APIExecutionEnvironmentLazy EvaluationSpecifying KeysSpecifying Transformation Functions使用lambda function自定义FunctionRich FunctionFunction体系结构 基础编程框架 不管是...
1416




被折叠的 条评论
为什么被折叠?



