Flink简介与部署

本文详细介绍了Apache Flink的基本概念、特点、功能模块和编程模型,包括其对流处理和批处理的支持,如Exactly-once语义、事件时间处理和窗口操作。此外,还阐述了Flink的部署模式,如local、standalone和YARN模式,以及在不同模式下的安装步骤和高可用性设置。最后,解析了`flink run`脚本的使用,包括本地和YARN提交任务的选项。
摘要由CSDN通过智能技术生成

1、Flink基本介绍

1、Flink介绍

Flink起源于一个名为Stratosphere的研究项目,目的是建立下一代大数据分析平台,于2014年4月16日成为Apache孵化器项目。

Apache Flink是一个面向数据流处理批量数据处理的可分布式的开源计算框架,它基于同一个Flink流式执行模型(streaming execution model),能够支持流处理和批处理两种应用类型。

由于流处理和批处理所提供的SLA(服务等级协议)是完全不相同。流处理一般需要支持低延迟、Exactly-once保证;而批处理需要支持高吞吐、高效处理。所以在实现的时候通常是分别给出两套实现方法,或者通过一个独立的开源框架来实现其中每一种处理方案。

比较典型的有:实现批处理的开源方案有MapReduce、Spark;实现流处理的开源方案有Storm;Spark的Streaming 其实本质上也是微批处理

Flink在实现流处理和批处理时,与传统的一些方案完全不同,它从另一个视角看待流处理和批处理,将二者统一起来:Flink是完全支持流处理,也就是说作为流处理看待时输入数据流是无界的;批处理被作为一种特殊的流处理,只是它的输入数据流被定义为有界的

2、Flink特性

1:有状态计算的Exactly-once语义。状态是指flink能够维护数据在时序上的聚类和聚合,同时它的checkpoint机制。

2:支持带有事件时间(event time)语义的流处理和窗口处理。事件时间的语义使流计算的结果更加精确,尤其在事件到达无序或者延迟的情况下。

3:支持高度灵活的窗口(window)操作。支持基于time、count、session,以及data-driven的窗口操作,能很好的对现实环境中的创建的数据进行建模。

4:轻量的容错处理( fault tolerance)。 它使得系统既能保持高的吞吐率又能保证exactly-once的一致性。通过轻量的state snapshots实现。

5:支持高吞吐、低延迟、高性能的流处理。

6:支持savepoints 机制(一般手动触发)。即可以将应用的运行状态保存下来;在升级应用或者处理历史数据是能够做到无状态丢失和最小停机时间。

7:支持大规模的集群模式,支持yarn、Mesos。可运行在成千上万的节点上。

8:支持具有Backpressure功能的持续流模型。

9:Flink在JVM内部实现了自己的内存管理。

10:支持迭代计算。

11:支持程序自动优化:避免特定情况下Shuffle、排序等昂贵操作,中间结果进行缓存。

3、Flink功能模块

在这里插入图片描述

Deployment层: 该层主要涉及了Flink的部署模式,Flink支持多种部署模式:本地、集群(Standalone/YARN),(GCE/EC2)。

Runtime层:Runtime层提供了支持Flink计算的全部核心实现,比如:支持分布式Stream处理、JobGraph到ExecutionGraph的映射、调度等等,为上层API层提供基础服务。

API层: 主要实现了面向无界Stream的流处理和面向Batch的批处理API,其中面向流处理对应DataStream API,面向批处理对应DataSet API。

Libraries层:该层也可以称为Flink应用框架层,根据API层的划分,在API层之上构建的满足特定应用的实现计算框架,也分别对应于面向流处理和面向批处理两类。面向流处理支持:CEP(复杂事件处理)、基于SQL-like的操作(基于Table的关系操作);面向批处理支持:FlinkML(机器学习库)、Gelly(图处理)

4、Flink编程模型

在这里插入图片描述

有状态的数据流处理层。最底层的抽象仅仅提供有状态的数据流,它通过处理函数(Process Function)嵌入到数据流api(DataStream API). 用户可以通过它自由的处理单流或者多流,并保持一致性和容错。同时用户可以注册事件时间和处理时间的回调处理,以实现复杂的计算逻辑。

 核心API层。 它提供了数据处理的基础模块,像各种transformation, join,aggregations,windows,stat 以及数据类型等等。

Table API层。 定了围绕关系表的DSL(领域描述语言)。Table API遵循了关系模型的标准:Table类型关系型数据库中的表,API也提供了相应的操作,像select, project, join, group-by, aggregate等。Table API声明式的定义了逻辑上的操作(logical operation)不是code for the operation;Flink会对Table API逻辑在执行前进行优化。同时代码上,Flink允许混合使用Table API和DataStram/DataSet API。

SQL层。 它很类似Table API的语法和表达,也是定义与Table API层次之上的,但是提供的是纯SQL的查询表达式。

3、Flink架构模型图

在这里插入图片描述

  • Client:Flink 作业在哪台机器上面提交,那么当前机器称之为Client。用户开发的Program
    代码,它会构建出DataFlow graph,然后通过Client提交给JobManager。
  • JobManager:是主(master)节点,相当于YARN里面的ResourceManager,生成环境中一般可以做HA高可用。JobManager会将任务进行拆分,调度到TaskManager上面执行。
  • TaskManager:是从节点(slave),TaskManager才是真正实现task的部分。Client提交作业到JobManager,就需要跟JobManager进行通信,它使用Akka框架或者库进行通信,另外Client与JobManager进行数据交互,使用的是Netty框架。Akka通信基于ActorSystem,Client可以向JobManager发送指令,比如Submit job或者Cancel /update job。JobManager也可以反馈信息给Client,比如status updates,Statistics和results。

Client提交给JobManager的是一个Job,然后JobManager将Job拆分成task,提交给TaskManager(worker)。JobManager与TaskManager也是基于Akka进行通信,JobManager发送指令,比如Deploy/Stop/Cancel Tasks或者触发Checkpoint,反过来TaskManager也会跟JobManager通信返回Task Status,Heartbeat(心跳),Statistics等。另外TaskManager之间的数据通过网络进行传输,比如Data Stream做一些算子的操作,数据往往需要在TaskManager之间做数据传输。

当Flink系统启动时,首先启动JobManager和一至多个TaskManager。JobManager负责协调Flink系统,TaskManager则是执行并行程序的worker。当系统以本地形式启动时,一个JobManager和一个TaskManager会启动在同一个JVM中。当一个程序被提交后,系统会创建一个Client来进行预处理,将程序转变成一个并行数据流的形式,交给JobManager和TaskManager执行。

2、Flink安装部署

2.1、Flink部署运行模式

类似于spark一样,flink也有各种运行模式,其中flink主要支持三大运行模式

第一种运行模式:local模式,适用于测试调试
Flink 可以运行在 Linux、Mac OS X 和 Windows 上。本地模式的安装唯一需要的只是Java 1.7.x或更高版本,本地运行会启动Single JVM,主要用于测试调试代码。一台服务器即可运行

第二种运行模式:standAlone模式,适用于flink自主管理资源
Flink自带了集群模式Standalone,主要是将资源调度管理交给flink集群自己来处理,standAlone是一种集群模式,可以有一个或者多个主节点JobManager(HA模式),用于资源管理调度,任务管理,任务划分等工作,多个从节点taskManager,主要用于执行JobManager分解出来的任务

第三种模式:flink on yarn模式,使用yarn来统一调度管理资源
在这里插入图片描述

Flink ON YARN工作流程如下所示:
首先提交job给YARN,就需要有一个Flink YARN Client。

  • 第一步:Client将Flink 应用jar包和配置文件上传到HDFS。
  • 第二步:Client向ResourceManager注册resources和请求APPMaster Container。
  • 第三步:REsourceManager就会给某一个Worker节点分配一个Container来启动APPMaster,JobManager会在APPMaster中启动。
  • 第四步:APPMaster为Flink的TaskManagers分配容器并启动TaskManager,TaskManager内部会划分很多个Slot,它会自动从HDFS下载jar文件和修改后的配置,然后运行相应的task。TaskManager也会与APPMaster中的JobManager进行交互,维持心跳等。

Flink的支持以上这三种部署模式,一般在学习研究环节,资源不充足的情况下,采用Local模式就行,生产环境中Flink ON YARN比较常见。

2.2、Flink的部署安装

部署安装准备工作:关闭防火墙,关闭selinux,安装jdk,更改主机名,更改主机名与IP地址的映射关系,ssh免密码登录等。

1、Flink的local模式部署安装

在local模式下,不需要启动任何的进程,仅仅是使用本地线程来模拟flink的进程,适用于测试开发调试等,这种模式下,不用更改任何配置,只需要保证jdk8安装正常即可。

第一步:上传安装包并解压
将我们编译之后的压缩包,上传到node01服务器的/kkb/soft路径下,然后进行解压

cd /kkb/soft/
tar -zxf flink-1.8.1.tar.gz  -C /kkb/install/

第二步:直接使用脚本启动
flink在处于local模式下,不需要更改任何配置,直接解压之后启动即可
执行以下命令直接启动local模式

cd /kkb/install/flink-1.8.1
bin/start-cluster.sh
-- bin/stop-cluster.sh

启动成功之后,执行jps就能查看到启动了两个进程

18180 StandaloneSessionClusterEntrypoint
18614 TaskManagerRunner

第三步:webUI界面访问
启动两个进程成功之后,访问8081端口号即可访问到flink的web管理界面
http://node01:8081/#/overview

第四步:运行flinkbin自带的测试
node01使用linux的nc命令来向socket当中发送一些单词

sudo yum -y install nc
nc -lk 9000

node01启动flink的自带的单词统计程序,接受输入的socket数据并进行统计

cd /kkb/install/flink-1.8.1
bin/flink run examples/streaming/SocketWindowWor
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值