Flink1.6系列之—分布式运行环境

Distributed Runtime Environment(分布式运行环境)

Tasks and Operator Chains

在分布式执行情况下,Flink将operator subtasks 链接到一起,形成任务(task)。每个任务(subtask)由一个线程执行。将operator subtasks链接到任务中是一个好处:它减少了线程到线程的切换和缓冲的开销,并在减少延迟的同时提高了总体吞吐量。链接行为是可以进行配置的;有关详细信息,请参阅此文档

下图中有5个子任务,因此就有5个并行的线程。对图中内容解释下:source和map是两个operator subtasks,组成一个subtask;keyBy(),window()和apply()三个operator subtasks组成一个subtask。

Job Managers, Task Managers, Clients
Flink的运行过程中有两个进程:

  • JobManagers(master):协调分布式的执行。他们调度任务,协调检查点,协调故障恢复等。至少需要有一个Job Manager,有一个是leader。一个高可用的环境,会有多个Job Manager,永远只有一个是leader,其它则是备用。
  • TaskManager(worker):执行数据流中的子任务,缓冲和交换数据流。至少有一个TaskManager。

JobManagers and TaskManagers运行方式:

  • standalone cluster
  • YARN
  • Mesos

TaskManagers连接到JobManagers,告诉JobManagers自己处于可用状态,可以用来执行任务。

Client不是Flink运行时和程序执行的一部分,而是用于准备并向JobManager发送数据流。之后,客户端可以断开连接,或者保持连接以接收进度报告。Client可以作为触发执行的Java/Scala程序的一部分运行,也可以在命令行进程中运行比如说:./bin/flink run ....

Task Slots and Resources(任务槽与资源)

每个TaskManager(worker)是一个JVM进程,可以执行一个或者多个子任务在不同的线程中。为了控制一个TaskManager(worker)接受多少任务,一个TaskManager至少有一个任务槽。

每个任务槽(task slot)拥有TaskManager固定的资源。例如,一个TaskManager有三个任务槽(task slot),那么每个任务槽(task slot)将会占用TaskManager内存的1/3。任务槽之间的内存资源不存在竞争关系。但是,这里没有发生CPU隔离;目前(Flink1.6),槽只分离,任务的托管内存。

通过调整任务槽的数量,用户可以定义子任务如何相互隔离。每个TaskManager有一个task slot意味着每个任务组在一个单独的JVM中运行(例如,它可以在一个单独的container中启动)。拥有多个task slot意味着更多的子任务共享同一个JVM。相同JVM中的任务共享TCP连接(通过多路复用)和心跳消息。它们还可以共享数据集和数据结构,从而减少每个任务的开销。

默认情况下,Flink允许子任务(subtasks)共享任务槽(task slots),即使它们是不同任务的子任务,只要它们来自同一个任务。也就是一个槽可以容纳整个作业管道。允许这种槽共享有两个主要好处:

  • Flink集群只需要与作业(job)中使用的最高并行度一样多的任务槽即可。不需要计算程序总共包含多少个任务(每个任务中可能具有不同的并行度)。
  • 便于将资源利用最大化。如果没有槽共享,非密集型source/map()子任务将占据与资源密集型窗口子任务一样多的资源。通过task slot共享,将下图示例中的基本并行度从2提高到6,可以充分利用有槽资源,同时确保繁重的子任务在task manager中公平分配。

对图中内容解释一下:图中包含2个进程,也就是两个TaskManager(两个JVM进程);每个TaskManager有三个task slot,如图现在在task slot共享的情况下,并行度是6。如果不存在task slot共享,那么6个task slot,有2个task slot执行source(),map()操作,两个task slot执行keyBy(),window()和apply()操作,sink操作至少需要一个task slot。这就是基本并行度从2提高到6。

APIs中还包括一个资源组机制,可以用来防止不需要的task slot共享。根据经验,一个好的默认任务槽数是CPU内核数(应用中这样配置就可以)。对于超线程,每个task slot需要2个或更多的硬件线程上下文。

State Backends

键/值索引存储的确切数据结构取决于所选的状态后端(State Backends)。一个状态后端(State Backends)将数据存储在一个内存hash map中,另一个状态后端使用RocksDB作为key/value存储。
除了定义保存状态的数据结构外,状态后端(State Backends)还实现了获取key/value状态的时间点快照的逻辑,并将该快照存储为检查点(checkpoint)的一部分。

Savepoints

程序可以从保存点(Savepoints)恢复执行。保存点允许在不丢失任何状态的情况下,更新程序和Flink集群。

保存点(Savepoints)是手动触发的检查点,它获取程序的快照并将其写入状态后端( state backend.)。它们依赖于规则的检查点(checkpoints)机制。在程序执行过程中,在工作节点(works)会定期对程序进行快照,并生成检查点(checkpoints)。对于恢复操作来说,只需要最后一个完成的检查点即可;当新的检查点完成,旧的检查点可以安全地丢弃。

保存点(Savepoints)类似于这些定期检查点,只是它们是由用户触发的,在新的检查点完成时,旧的检查点也不会自动过期。保存点可以通过命令行创建,或者在通过REST API取消作业(job)时创建。

原文地址:https://www.cnblogs.com/dreamfor123/p/9542106.html

时间: 2024-08-30 11:55:55

Flink1.6系列之—分布式运行环境的相关文章

iBatisnet系列(二) 配置运行环境和日志处理

http://hjf1223.cnblogs.com/archive/2006/04/24/383119.aspx 刚爬完鼓山回来,想到这篇刚刚开始,不敢怠慢,洗完澡休息一下就到电脑旁边来了.现在我开始介绍一下iBatis的配置和日志处理吧. iBatis基本的运行环境配置主要由两个文件组成,分别是SqlMap.config和Provider.config.它们是必需的两个配置文件,基中SqlMap.config的功能类似于web.config或者app.config,是iBatis核心的配置文

分布式光伏系列:分布式光伏电站 运行与维护方案一览(zz)

原文:http://www.toutiao.com/a6353487210709516546/ 中小型光伏电站的特点是占地面积小.安装位置灵活且日常维护量少.由于光伏电站不同的运行环境,为了能够使光伏发电系统更安全.更稳定的运行,提高发电效率,增加用户收益,特编制本运维手册,以便于有一定专业知识人员在条件允许的情况下对电站进行适当维护. 分布式光伏电站运维管理 1 建立完善的技术文件管理体系 技术文件主要包括: 1)建立电站的设备技术档案和设计施工图纸档案: 2)建立电站的信息化管理系统: 3)

hadoop1学习系列1——运行环境搭建

1.VirtualBox 安装 恩,一路默认即可安装完毕. 2.宿主机网络环境配置(使用Host-Only模式,上网啥的不用改配置) 2.1 右击VirtualBox选择属性,更改网络IP设置 2.2 设置为Ip地址和子网掩码为如下属性:,点击确定.(注意Centos默认网段为56) 3. Centos6.4 运行环境设置(双击图标文件) 3.1 出现VIrtualBox界面 3.2 点击设置,将USB设备禁用(不启用啦) 3.3 网络模式选择Host-Only 3.3 点击确定. 一个搭建ha

仙剑奇侠传1系列:本地运行环境及兼容性设置

介绍 本系列笔者将带着各位看官,从windows NT6.x系列(windows Vista/7/8/10)配置兼容性及运行经典游戏:仙剑奇侠传1直至手工编译安装开源项目“仙剑奇侠传” 笔者以此过程来锻炼自己的c语言编程能力,最初的想法来自于知乎“学习C语言一直学不会,心态崩溃怎么办?”,扶余城里小老二的推荐的学习方法,因为笔者 平时工作和生活之余空闲时间有限,空的时候才回来学习这些东西,该系列文章涉及的周期可能会比较长,时间跨度大,更新慢敬请见谅. 笔者日常家庭使用的都是Windows 7/W

[原]iBatis.Net(C#)系列一:简介及运行环境

转载请注明http://www.cnblogs.com/13590/archive/2013/02/27/2934580.html 摘要:介绍iBatis.Net的基本情况和运行原理,运行环境中各参数的配置情况,并通过一个实例项目,详细讲解通过VS2012建立的C#项目中如何使用iBatis.Net. 关键词:iBatis.Net:C#语言:运行环境:实例 1 iBatis.Net简介 iBatis一词来源于"internet"和"abates"的组合,是一个由Cl

Spark入门实战系列--4.Spark运行架构

[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 1. Spark运行架构 1.1 术语定义 lApplication:Spark Application的概念和Hadoop MapReduce中的类似,指的是用户编写的Spark应用程序,包含了一个Driver 功能的代码和分布在集群中多个节点上运行的Executor代码: lDriver:Spark中的Driver即运行上述Application的main()函数并且创建SparkContext

Mahout分布式运行实例:基于矩阵分解的协同过滤评分系统

Apr 08, 2014  Categories in tutorial tagged with Mahout hadoop 协同过滤  Joe Jiang 前言:之前配置Mahout时测试过一个简单的推荐例子,当时是在Eclipse上运行的,由于集成插件的缘故,所以一切进行的都比较顺利,唯一不足的是那是单机运行的,没有急于分布式系统处理.所以基于测试分布式处理环境的目的,下午找了一个实例来运行,推荐系统原型是一个电影评分的系统. 一.问题描述 对于协同过滤(Collaborative Filt

Apache Spark源码走读之12 -- Hive on Spark运行环境搭建

欢迎转载,转载请注明出处,徽沪一郎. 楔子 Hive是基于Hadoop的开源数据仓库工具,提供了类似于SQL的HiveQL语言,使得上层的数据分析人员不用知道太多MapReduce的知识就能对存储于Hdfs中的海量数据进行分析.由于这一特性而收到广泛的欢迎. Hive的整体框架中有一个重要的模块是执行模块,这一部分是用Hadoop中MapReduce计算框架来实现,因而在处理速度上不是非常令人满意.由于Spark出色的处理速度,有人已经成功将HiveQL的执行利用Spark来运行,这就是已经非常

[转]Docker学习笔记之一,搭建一个JAVA Tomcat运行环境

本文转自:http://www.blogjava.net/yongboy/archive/2013/12/12/407498.html 前言 Docker旨在提供一种应用程序的自动化部署解决方案,在 Linux 系统上迅速创建一个容器(轻量级虚拟机)并部署和运行应用程序,并通过配置文件可以轻松实现应用程序的自动化安装.部署和升级,非常方便.因为使用了容器,所以可以很方便的把生产环境和开发环境分开,互不影响,这是 docker 最普遍的一个玩法.更多的玩法还有大规模 web 应用.数据库部署.持续