stypora-copy-images-to: img
typora-root-url: ./
大数据技术框架转折点:2017年,天猫双十一大屏展示,由以前JStorm框架变为Blink(Flink)。
Flink 1.10版本,阿里将Blink中模块组件开源融合到Apache Flink中,Flink SQL模块主要就是阿里贡献。
学习Flink分析引擎框架,分为2个部分讲解:
- 1)、第一个部分、基础部分,核心点:对Flink框架基本使用,原理性东西,七天
- 2)、第二个部分、项目实战,以Flink框架为主,整合其他大数据框架,进行数据处理分析,10天
Flink 基础理论的讲解,涉及到各种重要概念、原理和 API 的用法,并且会有大量的示例代码实现:
第一章、Flink-安装部署与快速入门
第二章、Flink-批处理API
Flink 流式计算框架,但是可以针对批量数据进行离线分析
第三章、Flink-流处理API
Flink 框架如何实时高效处理流式数据,实时性很高,吞吐量很大,有哪些特性支撑
第四章、Flink-高级特性
四大基石:State、Checkpoint、Window、Time和其他异步IO等等
第五章、Flink-Table与SQL
FlinkSQL模块,由于1.12版本(当前最新版本,20210120)才稳定,功能基本可用,了解即可。
类似SparkSQL模块,但是功能目前远远弱于SparkSQL,提供SQL和Table API(DSL).
第六章、Flink-Action综合案例
讲解三个案例,综合性回顾体验Flink如何使用,为后面项目实战课程做铺垫。
通过理论和实际的紧密结合,可以使学员对 Flink 有充分的认识和理解,在项目实战中对 Flink 和流式处理应用的场景、以及电商分析业务领域有更深刻的认识;并且通过对流处理原理的学习和与批处理架构的对比,可以对大数据处理架构有更全面的了解,为日后成长为架构师打下基础。
主要讲解Flink框架:基本入门和环境搭建。
1)、Flink 概述【了解】
- 实时及未来(大数据分析领域重新定义)
- 前世今生,发展史
- Flink 基本说明,比如组件栈、使用场景,使用公司等等
2)、Flink 安装部署(重点)
- 本地模式运行、集群模式运行(Standalone和HA、YARN)、容器K8s等等
- 尤其Flink 应用程序运行在YARN集群上,企业中大多数据选择。
3)、Flink 入门案例(掌握)
4)、Flink 原理初探
- 类比Spark中原理,比较学习理解概念。
官网:https://flink.apache.org/
Apache Flink is a framework and distributed processing engine for stateful computations over *unbounded and bounded* data streams.
Flink has been designed to run in all common cluster environments, perform computations at in-memory speed and at any scale.
- 1)、framework,框架,类似MapReduce和Spark
- 2)、分布式处理引擎,分布式并行计算框架
- 3)、stateful computations,处理数据时,有状态的
- 可以理解,实时词频统计,spark:1,spark:2,spark:3,。。。。
- 4)、静态数据(批量数据,不变的)和动态数据(流式数据,源源不断产生)
- 静态数据:bounded data streams,有界数据流,有开始,有结束
- 动态数据:unbounded data streams,无界数据流,有开始,无结束
在Flink框架中,将数据分为两种类型:有边界数据流(bounded data streams)和无边界数据流(unbound data streams),针对流式数据进行处理,关键点在于流式数据是否有结束点。
- 1)、有边界数据流(bounded data streams)封装到数据结构:
DataSet
- 类似SparkSQL中数据结构
Dataset
- 2)、无边界数据流(unbound data streams)封装到数据结构:
DataStream
- 类似SparkStreaming中数据结构:
DStream
Flink 分析引擎,针对数据流进行分析,认为所有数据都是:数据流(Data Streams),可以理解为流式数据。接下来,Flink框架如何实时处理数据流的??
Flink 分析数据时如何进行分布式计算呢???
将Source、Transformation、Sink中每个操作(Operator)设置不同并行度(几个人干活)
Flink 计算分析引擎,对数据流按照指定逻辑进行计算处理,所以当开发完应用程序以后,运行程序,需要分配资源,目前来说,Flink 程序运行部署与Spark 程序基本一致。
文档:https://ci.apache.org/projects/flink/flink-docs-release-1.10/ops/deployment/cluster_setup.html
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O6nFH0nT-1611842278846)(/img/1611112034402.png)]
企业中开发Flink应用程序,几乎都是运行在Hadoop YARN集群上。
当运行一个Flink Application应用程序时,首先需要给应用程序分配资源,再调度执行与监控。
- 1)、Flink Client:提交运行Flink 应用程序
- 2)、JobManager:管理资源,分配资源给Flink应用
- 3)、TaskManager:运行Task任务的
需要考虑JobManager 高可用,是的用户可以任何时候提交应用执行,架构如下所示:
https://ci.apache.org/projects/flink/flink-docs-release-1.10/ops/jobmanager_high_availability.html#standalone-cluster-high-availability
关于Flink Standalone集群相关配置:
https://ci.apache.org/projects/flink/flink-docs-release-1.10/ops/config.html
实际项目中,如果启动Standalone 集群,如下参数需要考虑配置:
1、the amount of available memory per JobManager (jobmanager.heap.size),
2、the amount of available memory per TaskManager (taskmanager.memory.process.size and check memory setup guide),
3、the number of available CPUs per machine (taskmanager.numberOfTaskSlots),
4、the total number of CPUs in the cluster (parallelism.default) and
5、the temporary directories (io.tmp.dirs)
在实际项目中,往往将Flink应用程序,运行在YARN集群上,更多好处在于:共享集群资源。
https://ci.apache.org/projects/flink/flink-docs-release-1.10/ops/deployment/yarn_setup.html
- 1)、
Flink YARN Client
:
- 提交Flink应用运行到ResourceManager,分配资源和调度执行
- 2)、
JobManager和AppMaster
,属于同一个JVM 进程,YARN Contanier容器
- 向RM申请资源,运行TaskManager;调度执行Task到TaskManager执行
- 3)、
TaskManager
,也是一个JVM 进程,YARN Contanier容器
- 执行Task任务
当Flink on YARN运行时,可以认为在YARN集群资源在中运行Flink Standalone 集群,JobManager和TaskManager运行 YARN Contanier容器中。
当Flink 程序运行在YARN上有2种模式:
- 1)、Session 会话模式(共享集群资源)
- 多个Flink 程序运行在一个集群上(
Flink Standalone集群
)- 先启动Flink Standalone集群(在YARN上运行),再提交运行Flink Job程序。
Maven Project工程GAV三要素:
工程目录结构:
Maven 工程POM文件中内容(依赖包):
apache.snapshots
Apache Development Snapshot Repository
https://repository.apache.org/content/repositories/snapshots/
false
true
UTF-8
1.8
${java.version}
${java.version}
1.10.0
2.11
2.11
org.apache.flink
flink-java
${flink.version}
org.apache.flink
flink-streaming-java_${scala.binary.version}
${flink.version}
org.apache.flink
flink-runtime-web_${scala.binary.version}
${flink.version}
org.apache.flink
flink-shaded-hadoop-2-uber
2.7.5-10.0
org.slf4j
slf4j-log4j12
1.7.7
runtime
log4j
log4j
1.2.17
runtime
src/main/java
src/test/java
org.apache.maven.plugins
maven-compiler-plugin
3.5.1
1.8
org.apache.maven.plugins
maven-surefire-plugin
2.18.1
false
true
**/*Test.*
**/*Suite.*
org.apache.maven.plugins
maven-shade-plugin
2.3
package
shade
*:*
META-INF/*.SF
META-INF/*.DSA
META-INF/*.RSA
在Maven Module模块中添加日志属性文件:log4j.properties
,内容如下:
# This affects logging for both user code and Flink
log4j.rootLogger=INFO, console
# Uncomment this if you want to _only_ change Flink's logging
#log4j.logger.org.apache.flink=INFO
# The following lines keep the log level of common libraries/connectors on
# log level INFO. The root logger does not override this. You have to manually
# change the log levels here.
log4j.logger.akka=INFO
log4j.logger.org.apache.kafka=INFO
log4j.logger.org.apache.hadoop=INFO
log4j.logger.org.apache.zookeeper=INFO
# Log all infos to the console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %-60c %x - %m%n
# Suppress the irrelevant (wrong) warnings from the Netty channel handler
log4j.logger.org.apache.flink.shaded.akka.org.jboss.netty.channel.DefaultChannelPipeline=ERROR, console
参数传递:
flink应用程序,提供解析工具类:parameterTool,要求参数传递: --host node2.itcast.cn --port 9999
ParameterTool