flink初识及安装flink standalone集群
flink architecture

1.flink可以运行在本地,也可以类似spark一样on yarn或者standalone模式(与spark standalone也很相似)
2.Runtime部分是flink的核心数据处理引擎,他将我们通过api编程的程序生成任务图(JobGraph),任务图是一个并行的数据流,含有tasks来生产和消费数据。
3.dataStrem api是用于流式处理,dataset api是用于批量处理,而任务图也就是由这些api编写的代码生成的。dataset api 最后也会有优化器来生成优化后的执行计划。根据实际的部署模式,优化后的jobGraph将被
提交到excutors执行。
Flink 分布式程序执行
flink程序在执行时候的三个重要的部分:job client、job manager、task manager。详见官网

flink 程序提交之后,会首先提交给job client,然后job client提交任务给job manager,job manager负责资源分配,资源分配完成以后,将task提交给各自的task manager,task manager在接收到task之后,将初始化线程来执行task,并且task manager会持续跟进报告task执行状态给job manager,比如task 开始运行、正在处理、处理完成。
job manager协调和管理程序执行,其主要任务包括调度任务,断点(checkpoint)管理,故障恢复等等。job manager一样也可以启动多个做成HA的形式,其中active的为leader,其他为standby。
job manager几个重要的部分:actor system、scheduler、check pointing,flink内部使用的是akka actor system来负责job manager和task manager之间的通信。

关于scheduler:
在flink中,executor被定义为task slots,每个task manager需要管理一个或多个task slots,flink通过slotShareGroup和coLocationGroup来分配哪些tasks共同使用一个task slot或者哪些task必须放置在特殊的slot中。
关于check pointing:
check pointing是flink用于容错的核心部分,check pointing容错机制是通过持续的对分布式数据流以及executor的状态做轻量级的快照来实现(这种方式是基于Chandy-Lamport算法做的,但是flink对其做了部分修改),快照可以配置存放到hdfs上,如果程序发生了故障,flink会重启executors,然后从最新可用的checkpoint开始执行。如下图:

task manager:
task manager是 work nodes,在jvm中通过一个或者多个线程来执行task,跟spark很相似。
一个 TaskManger 就是一个 JVM 进程,并且会用独立的线程来执行 task,为了控制一个 TaskManger 能接受多少个 task,Flink 提出了 Task Slot 的概念。
我们可以简单的把 Task Slot 理解为 TaskManager 的计算资源子集。假如一个 TaskManager 拥有 5 个 slot,那么该 TaskManager 的计算资源会被平均分为 5 份,不同的 task 在不同的 slot 中执行,避免资源竞争。但是需要注意的是,slot 仅仅用来做内存的隔离,对 CPU 不起作用。那么运行在同一个 JVM 的 task 可以共享 TCP 连接,减少网络传输,在一定程度上提高了程序的运行效率,降低了资源消耗。

job client:
job client不属于flink程序执行内的一部分,但是他是程序开始执行的启动点,job client负责接收用户编程的代码,然后创建数据流(data flow)并提交data flow给job manager来进一步的执行,。一旦程序执行完成,job client将执行结果返回给用户
data flow代表执行计划,比如word count:

job client将其转成data flow,对于wordcount这个程序的data flow大概是下面这个样子:

对于map这种算子,不存在shuffle,但是对于groupBy来说,需要shuffle数据,那么详细的图大概就是下面这个样子:

Flink 的优势及与其他框架的区别
架构
Stom 的架构是经典的主从模式,并且强依赖 ZooKeeper;Spark Streaming 的架构是基于 Spark 的,它的本质是微批处理,每个 batch 都依赖 Driver,我们可以把 Spark Streaming 理解为时间维度上的 Spark DAG。
Flink 也采用了经典的主从模式,DataFlow Graph 与 Storm 形成的拓扑 Topology 结构类似,Flink 程序启动后,会根据用户的代码处理成 Stream Graph,然后优化成为 JobGraph,JobManager 会根据 JobGraph 生成 ExecutionGraph。ExecutionGraph 才是 Flink 真正能执行的数据结构,当很多个 ExecutionGraph 分布在集群中,就会形成一张网状的拓扑结构。
容错
Storm 在容错方面只支持了 Record 级别的 ACK-FAIL,发送出去的每一条消息,都可以确定是被成功处理或失败处理,因此 Storm 支持至少处理一次语义。
针对以前的 Spark Streaming 任务,我们可以配置对应的 checkpoint,也就是保存点。当任务出现 failover 的时候,会从 checkpoint 重新加载,使得数据不丢失。但是这个过程会导致原来的数据重复处理,不能做到“只处理一次”语义。
Flink 基于两阶段提交实现了精确的一次处理语义。
反压(BackPressure)
反压是分布式处理系统中经常遇到的问题,当消费者速度低于生产者的速度时,则需要消费者将信息反馈给生产者使得生产者的速度能和消费者的速度进行匹配。
Stom 在处理背压问题上简单粗暴,当下游消费者速度跟不上生产者的速度时会直接通知生产者,生产者停止生产数据,这种方式的缺点是不能实现逐级反压,且调优困难。设置的消费速率过小会导致集群吞吐量低下,速率过大会导致消费者 OOM。
Spark Streaming 为了实现反压这个功能,在原来的架构基础上构造了一个“速率控制器”,这个“速率控制器”会根据几个属性,如任务的结束时间、处理时长、处理消息的条数等计算一个速率。在实现控制数据的接收速率中用到了一个经典的算法,即“PID 算法”。
Flink 没有使用任何复杂的机制来解决反压问题,Flink 在数据传输过程中使用了分布式阻塞队列。我们知道在一个阻塞队列中,当队列满了以后发送者会被天然阻塞住,这种阻塞功能相当于给这个阻塞队列提供了反压的能力。
安装Flink standalone集群
1.下载flink https://flink.apache.org/downloads.html
2.官网参考 https://ci.apache.org/projects/flink/flink-docs-release-1.8/ops/deployment/cluster_setup.html
另外,如果已有hadoop平台,并且想使用flink读写hadoop上的数据,那要下载相对应的兼容hadoop的jar包

2.安装JDK8、配置ssh免密

3. 选择节点作为master(job manager)和slave(task manage)
比如这里有三个节点,其中10.0.0.1为master,其他两个为slaves,右边为相关配置应设置的内容

4.修改配置文件 flink-1.8.2/conf/flink-conf.yaml
相关的配置,端口号,内存根据实际配置调整,此外还可以在此文件中export JAVA_HOME=/path/to/you
jobmanager.rpc.address: master01.hadoop.xxx.cn # The RPC port where the JobManager is reachable. jobmanager.rpc.port: # The heap size for the JobManager JVM jobmanager.heap.size: 1024m # The heap size for the TaskManager JVM taskmanager.heap.size: 1024m # The number of task slots that each TaskManager offers. Each slot runs one parallel pipeline.每台机器可用的cpu数量,如果只是计算集群,16核的服务器可以配置14个,留2个给系统 taskmanager.numberOfTaskSlots: # The parallelism used for programs that did not specify and other parallelism.默认情况下task的并行度 parallelism.default:
比较重要的配置参数(完整配置参数详解可参加官网链接):
the amount of available memory per JobManager (jobmanager.heap.mb),
the amount of available memory per TaskManager (taskmanager.heap.mb),
the number of available CPUs per machine (taskmanager.numberOfTaskSlots),
the total number of CPUs in the cluster (parallelism.default) and
the temporary directories (io.tmp.dirs)
5.修改配置文件 flink-1.8.2/conf/masters和slaves
masters文件:指定master所在节点以及端口号
master01.hadoop.xxx.cn:
slavers文件:指定slavers所在节点
worker01.hadoop.xxx.cn
worker02.hadoop.xxx.cn
6. 分发flink包到各个节点
scp .....
7. 启动standalone集群
bin/start-cluster.sh
查看状态:
在master节点jps
StandaloneSessionClusterEntrypoint
在work节点jps
TaskManagerRunner
查看ui界面
http://master01.hadoop.xxx.cn:8081



运行flink自带的wordcount例子
nc -l 9999
bin/flink run examples/streaming/SocketWindowWordCount.jar --hostname 172.xx.xx.xxx --port 9999
界面:


flink standalone集群中job的容错
1.jobmanager挂掉的话,正在执行的任务会失败,所以jobmanager应该做HA。
2.taskmanager挂掉的话,如果有多余的taskmanager节点,flink会自动把任务调度到其他节点上执行。
flink初识及安装flink standalone集群的更多相关文章
- flink部署操作-flink standalone集群安装部署
flink集群安装部署 standalone集群模式 必须依赖 必须的软件 JAVA_HOME配置 flink安装 配置flink 启动flink 添加Jobmanager/taskmanager 实 ...
- Flink 集群搭建,Standalone,集群部署,HA高可用部署
基础环境 准备3台虚拟机 配置无密码登录 配置方法:https://ipooli.com/2020/04/linux_host/ 并且做好主机映射. 下载Flink https://www.apach ...
- flink idea 打包jar 并放到集群上运行
flink idea 打包jar 并放到集群上运行 在开始之前注意前提,当前项目的scala的版本要和集群上的scala一致 我已经创建好一个wordCount的flink项目 注意项目的po ...
- (二)win7下用Intelij IDEA 远程调试spark standalone 集群
关于这个spark的环境搭建了好久,踩了一堆坑,今天 环境: WIN7笔记本 spark 集群(4个虚拟机搭建的) Intelij IDEA15 scala-2.10.4 java-1.7.0 版本 ...
- spark standalone集群部署 实践记录
本文记录了一次搭建spark-standalone模式集群的过程,我准备了3个虚拟机服务器,三个centos系统的虚拟机. 环境准备: -每台上安装java1.8 -以及scala2.11.x (x代 ...
- 04、Spark Standalone集群搭建
04.Spark Standalone集群搭建 4.1 集群概述 独立模式是Spark集群模式之一,需要在多台节点上安装spark软件包,并分别启动master节点和worker节点.master节点 ...
- Standalone集群搭建和Spark应用监控
注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6815920501530034696/ 承接上一篇文档<Spark词频前十的统计练习> Spark on ...
- 安装spark ha集群
安装spark ha集群 1.默认安装好hadoop+zookeeper 2.安装scala 1.解压安装包 tar zxvf scala-2.11.7.tgz 2.配置环境变量 vim /etc/p ...
- HDP2.4安装(五):集群及组件安装
HDP(Hortonworks Data Platform)是hortworks推出的100%开源的hadoop发行版本,以YARN 作为其架构中心,包含pig.hive.phoniex.hbase. ...
随机推荐
- IntelliJ IDEA Debug模式启动项目
导入项目,没有看到debug模式 点击 next next next next
- 网络编程之TCP三次握手,四次断开
目录 TCP三次握手 1:上图的名词解释 2:TCP三次握手过程 3:为什么不能改成两次握手? TCP三次握手 1:上图的名词解释 SYN:同步序号.它表示建立连接.TCP规定SYN=1时不能携带数据 ...
- Django链接MySQL,数据库迁移
form表单默认是以get请求提交数据的 http://127.0.0.1:8000/login/?username=admin&password=123 action 1 不写,默认向当前地 ...
- android 动态壁纸开发
转:http://www.eoeandroid.com/thread-100389-1-1.html android 动态壁纸开发参考:http://www.ophonesdn.com/article ...
- 073、Java面向对象之利用构造方法为属性赋值
01.代码如下: package TIANPAN; class Book { // 定义一个新的类 private String title; // 书的名字 private double price ...
- eclipse中maven web项目部署时缺少classes文件或者resources文件
写这篇博客的原因 问题描述 昨天发现eclipse中maven web项目部署时缺少classes文件或者resources文件 本来以为是很常见的原因, 依次检查"Java Build P ...
- MVC、MVT简介
一.MVC MVC的产生理念: 分工.让专门的人去做专门的事. MVC的核心思想: 解耦. M: Model,模型, 和数据库进行交互. V: View,视图, 产生html页面. C: Contro ...
- QQ企业通----类库的设计----UDPSocket组件等
知识点: IPEndPoint 将网络端点表示为 IP 地址和端口号. UdpClient 提供用户数据报 (UDP) 网络服务. UdpClient对象.Close 关闭 UDP 连接. ...
- arm linux 移植 gdb/gdbserver
背景 调试工具gdb的使用对于嵌入式Linux开发人员来说是一项不可少的技能. 目前,嵌入式 Linux系统中,主要有三种远程调试方法,分别适用于不同场合的调试工作:用ROM Monitor调试目标机 ...
- 在 Rolling Update 中使用 Health Check【转】
上一节讨论了 Health Check 在 Scale Up 中的应用,Health Check 另一个重要的应用场景是 Rolling Update.试想一下下面的情况: 现有一个正常运行的多副本应 ...