Flink 笔记01:安装部署与快速入门


stypora-copy-images-to: img
typora-root-url: ./


Flink 笔记01:安装部署与快速入门

Flink 笔记01:安装部署与快速入门_第1张图片

一、课程回安排与内容提纲

大数据技术框架转折点:2017年,天猫双十一大屏展示,由以前JStorm框架变为Blink(Flink)

Flink 1.10版本,阿里将Blink中模块组件开源融合到Apache Flink中,Flink SQL模块主要就是阿里贡献。

学习Flink分析引擎框架,分为2个部分讲解:

  • 1)、第一个部分、基础部分,核心点:对Flink框架基本使用,原理性东西,七天
  • 2)、第二个部分、项目实战,以Flink框架为主,整合其他大数据框架,进行数据处理分析,10天

1、Flink 基础课程安排

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 和流式处理应用的场景、以及电商分析业务领域有更深刻的认识;并且通过对流处理原理的学习和与批处理架构的对比,可以对大数据处理架构有更全面的了解,为日后成长为架构师打下基础。

2、今日课程内容提纲

主要讲解Flink框架:基本入门和环境搭建

  • 1)、Flink 概述【了解】

    • 实时及未来(大数据分析领域重新定义)
    • 前世今生,发展史
    • Flink 基本说明,比如组件栈、使用场景,使用公司等等
  • 2)、Flink 安装部署(重点)

    • 本地模式运行、集群模式运行(Standalone和HA、YARN)、容器K8s等等
    • 尤其Flink 应用程序运行在YARN集群上,企业中大多数据选择。

    Flink 笔记01:安装部署与快速入门_第2张图片

  • 3)、Flink 入门案例(掌握)

    • 分别编写批处理和流处理程序,使用词频统计WordCount

    • 批处理WordCount:从本地文件系统加载数据,进行词频统计,类似SparkCore

    • 流处理WordCount:从TCP Socket消费数据,进行词频统计,类似StructuredStreaming

    • 提交运行到集群(掌握)

      1611106892414

  • 4)、Flink 原理初探

    • 类比Spark中原理,比较学习理解概念。

二、乘风破浪:Flink 概述

官网:https://flink.apache.org/

Flink 笔记01:安装部署与快速入门_第3张图片

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 笔记01:安装部署与快速入门_第4张图片

在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 笔记01:安装部署与快速入门_第5张图片

Flink 分析数据时如何进行分布式计算呢???

将Source、Transformation、Sink中每个操作(Operator)设置不同并行度(几个人干活)

Flink 笔记01:安装部署与快速入门_第6张图片

三、Flink 安装部署

​ 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任务的

Flink 笔记01:安装部署与快速入门_第7张图片

需要考虑JobManager 高可用,是的用户可以任何时候提交应用执行,架构如下所示:

https://ci.apache.org/projects/flink/flink-docs-release-1.10/ops/jobmanager_high_availability.html#standalone-cluster-high-availability

Flink 笔记01:安装部署与快速入门_第8张图片

关于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 on YANR

在实际项目中,往往将Flink应用程序,运行在YARN集群上,更多好处在于:共享集群资源。

https://ci.apache.org/projects/flink/flink-docs-release-1.10/ops/deployment/yarn_setup.html

Flink 笔记01:安装部署与快速入门_第9张图片

  • 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应用运行到ResourceManager,申请应用管理者,分配资源和调度执行
  • resourcemanager在nodemanager启动一个容器运行appmaster,当appmaster运行完成后会在hdfs上拉取jar包和配置文件然后构建一个jobmanager主节点,当jobmanager构建完成后向resourcemanager请求资源,运行taskmanager,当resourcemanager分配完资源以后,每一个nodemanager会启动一个容器到hdfs上拉取jar包和配置文件,运行task

当Flink 程序运行在YARN上有2种模式:

  • 1)、Session 会话模式(共享集群资源
    • 多个Flink 程序运行在一个集群上(Flink Standalone集群
    • 先启动Flink Standalone集群(在YARN上运行),再提交运行Flink Job程序。

Flink 笔记01:安装部署与快速入门_第10张图片

  • 2)、Job 分离模式(独立私有资源

    • 每个Flink应用程序运行,都会运行Flink Standalone集群
    • 此种方式,需要考虑资源浪费

    Flink 笔记01:安装部署与快速入门_第11张图片

附录一、创建Maven模块

1)、Maven 工程结构

Maven Project工程GAV三要素:

Flink 笔记01:安装部署与快速入门_第12张图片

工程目录结构:

Flink 笔记01:安装部署与快速入门_第13张图片

2)、POM 文件内容

​ 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
                    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 

Flink 笔记01:安装部署与快速入门_第14张图片

Flink 笔记01:安装部署与快速入门_第15张图片

你可能感兴趣的:(#,Flink,flink)