Flink学习笔记-基础的概念

定义: Apache Flink 是一个框架和分布式处理引擎,用于对无界和有界数据流进行计算。
为什么选择Flink:

  • 流数据更真实反应了我们的生活方式
  • 传统的数据架构都是基于有限数据集的
  • 低延迟,高吞吐,结果的正确性和良好的容错性
    主要特点:事件驱动,基于流的世界观(离线数据是有界流,实时数据是无界流)

部署方式

Standalone模式
  1. 下载flink
  2. fink-conf.yaml的配置文件阅读
# JobManager runs.
jobmanager.rpc.address: localhost
# The RPC port where the JobManager is reachable.
jobmanager.rpc.port: 6123
# The total process memory size for the JobManager.
#
# Note this accounts for all memory usage within the JobManager process, including JVM metaspace and other overhead.
jobmanager.memory.process.size: 1600m
# The total process memory size for the TaskManager.
#
# Note this accounts for all memory usage within the TaskManager process, including JVM metaspace and other overhead.
taskmanager.memory.process.size: 1728m

# To exclude JVM metaspace and overhead, please, use total Flink memory size instead of 'taskmanager.memory.process.size'.
# It is not recommended to set both 'taskmanager.memory.process.size' and Flink memory.
#
# taskmanager.memory.flink.size: 1280m

# The number of task slots that each TaskManager offers. Each slot runs one parallel pipeline.

taskmanager.numberOfTaskSlots: 1

# The parallelism used for programs that did not specify and other parallelism.
# 默认并行度
parallelism.default: 1
  1. 启动集群
    ./start-cluster.sh
    连接本机端口号 nc -lk port

  2. 本地shell脚本执行jar包时
    /bin/flink run -c com.sofency.top.StreamWordCount -p 3 wordcount.jar --host localhost --port 7777

  3. 展示运行的任务
    /bin/flink list

  4. 取消任务
    /bin/flink cancel 312421241ds34s4cf5yf7h6

Yarn模式

单机模式的缺点:需要手动分配资源才能让任务运行
以Yarn模式部署Flink任务时,要求Flink是有Hadoop支持的版本,Hadoop的环境需要保持版本在2.2以上,并且集群中安装有HDFS服务。
Flink提供了两种在yarn上运行的模式,分别为Session-Cluster和Per-Job-Cluster模式

  • Session-Cluster模式
    Flink学习笔记-基础的概念_第1张图片
    Session-Cluster模式需要先启动集群,然后再提交作业,接着会向yarn申请一块空间后,资源永远保持不变。如果资源满了,下一个作业就无法提交,只能等到yarn中的其中一个作业执行完成后,释放了资源,下一个作业才会正常提交。所有作业共享Dispatcher和ResourceManager;共享资源适合规模小执行时间短的作业。
          在yarn中初始化一个flink集群,开辟指定的资源,以后提交的任务都向这里提交,这个flink集群会常驻在yarn集群中,除非手工停止。
    启动步骤:
    1. 启动hadoop集群
    2. 启动yarn-session
      ./yarn-session.sh -n 2 -s 2 -jm 1024 -tm 1024 -nm test -d
      其中:
      -n(–container)TaskManager的数量
      -s(–slots)每个TaskManager的slot数量,默认一个slot一个core,默认每个taskmanager的slot的个数为1,有时可以多一些taskmanager
      -jm: JobManager的内存(单位MB)
      -tm:每个TaskManager的内存(单位MB)
      -nm:yarn的appName(现在yarn的ui上的名字)
      -d:后台运行
    3. 执行任务
      /bin/flink run -c com.sofency.top.StreamWordCount -p 3 wordcount.jar --host localhost --port 7777
    4. 去yarn控制台查看任务状态
    5. 取消yarn-session
      yarn application --kill application_21212121_0001
    • Per-Job-Cluster模式
      Flink学习笔记-基础的概念_第2张图片
      一个Job会对应一个集群,每提交一个作业会根据自身的情况,都会单独向yarn申请资源,直到作业执行完成,一个作业的失败与否并不会影响下一个作业的正常提交和运行,独享Dispatcher和ResourceManager,按需接受资源申请;适合大规模长时间运行的作业。
            每次提交都会创建一个新的flink集群,任务之间互相独立,互不影响,方便管理,任务执行完成后创建的集群也会消失
      启动步骤:
    1. 启动hadoop集群
    2. 直接启动job
      /bin/flink run -m yarn-cluster -c com.sofency.top.StreamWordCount -p 3 wordcount.jar --host localhost --port 7777

运行架构

主要任务:运行组件,任务提交流程,任务调度原理

  • 运行组件

    1. 作业管理器:JobManager
      • 控制一个应用程序执行的主进程,也就是说,每个应用程序都会被一个不同的JobManager所控制执行。
      • JobManager会先接收要执行的应用程序,这个应用程序会包括:作业图,逻辑数据流图和打包了所有的类、库和其他资源的JAR包。
      • JobManager会把作业图转换成一个物理层面的数据流图,这个图被叫做执行图,包含了所有可以J并发执行的任务。
      • JobManager会向资源管理器请求执行任务必要的资源,也就是任务管理器上的slot,一旦它获取到了足够的资源,就会将执行图分发到真正运行它们的TaskManager上,而在运行过程中JobManager会负责所有需要中央协调的操作,比如检查点的协调。
    2. 任务管理器:TaskManager
      • Flink中的工作进程,通常在flink中会有多个TaskManager运行,每一个TaskManager都包含了一定数量的插槽,插槽的数量限制了TaskManager能够执行的任务数量。
      • 启动之后,TaskManager会向资源管理器注册它的插槽;收到资源管理器的指令后,TaskManager就会将一个或多个插槽提供给JobManager调用,JobManager就可以向插槽分配任务来执行。
      • 在执行过程中,一个TaskManager可以跟运行统一应用程序的TaskManager交换数据。
    3. 资源管理器:ResourceManager
      • 主要负责管理任务管理器(TaskManager)的插槽(slot)TaskManager插槽是flink中定义的处理资源单元。
      • Flink为不同的环境和资源管理工具提供了不同资源管理器,比如YARN,Mesos,K8s以及stanalone部署。
      • 当JobManager申请插槽资源时,ResourceManager会将有空间插槽的TaskManager分配给JobManager。如果ResourceManager没有足够的插槽来满足JobManager的请求,它可以向资源提供平台发起会话,以提供启动TaskManager进程的容器。
    4. 分发器:Dispatcher
      • 可以跨作业运行,它为应用提交提供了REST接口。
      • 当一个应用被提交执行时, 分发器就会启动并将应用移交给一个JobManager。
      • Dispatcher也会启动一个Web UI,用来方便的展示和监控作业执行的信息。
      • Dispatcher在架构中可能并不是必须的,这取决于应用提交运行的方式。
  • 任务提交流程。
    Flink学习笔记-基础的概念_第3张图片
    Flink学习笔记-基础的概念_第4张图片

  • 任务调度原理
    Flink学习笔记-基础的概念_第5张图片
    并行度:一个特定算子的子任务的个数被称为其并行度。
    Flink中每一个TaskManager都是一个JVM进程,他可能会在独立的线程上执行一个或多个子任务。
    为了控制一个TaskManager能接收多少个task,TaskManager通过task slot来控制 (配置文件中的numberOfSlots
    默认情况下。Flink允许子任务共享slot,即使他们是不同任务的子任务,这样的结果是,一个slot可以保存作业的整个管道。
    Task Slot是静态的概念,是指TaskManager的并发执行能力。设置slotSharingGroup 共享组

你可能感兴趣的:(大数据,flink,hadoop)