• Flink 任务提交


    概述

    这张图表明了flink是如何看待用户的处理流程的:抽象化为一系列operator,以source开始,以sink结尾,中间的operator做的操作叫做transform,并且可以把几个操作串在一起执行。


    image_1cae39t06eoo3ml1be8o0412c69.png-43.5kB



    什么是operator?

    在源码中,我们可以看到一个flatMap算子,最终会被转化成一个operator,下图是flatMap被转化成一个 operator。

    image

    下图是map转化成一个 operator。

    image

    我们可以认为用户使用的各种算子,最终都是转化成一个 operator。


    多个operator如何排序组合

    Flink采用了类似责任链模式的方式对operator进行组合,责任链模式下,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。具体参见:https://www.runoob.com/design-pattern/chain-of-responsibility-pattern.html


    程序什么时候运行

    在编写代码的时候,不管是flatMap还是map等算子的使用,都是将operator注册到环境中,并没有开始执行任务。当用户调用execute方式的时候,程序才开始准备执行。

    env.execute("word count")

    这里面主要做了两件事情,一件事情是根据上面配置的责任链模式将生成StreamGraph,即程序的拓扑结构图。另外一件事情就是生成JobGraph,也就是task list。

    接下来的事情就比较好理解了,回到了客户端提交任务到服务端的模式。服务端接收到我们的任务信息,先放入任务队列、然后执行任务(申请资源、task分配、任务调度)。
    个人网站:shuoyizui.com 公众号:写个框架玩 近期在公众号会发布一系列文章,主要是想完成一个简化的MapReduce框架的编写。实现Mapreduce编程模型、任务远程提交、任务分配、任务执行等功能。设计到了动态代理、反射、网络通信、序列化、消息队列、netty、自定义类加载器、多线程、shell等技术点。
  • 相关阅读:
    ajax
    文件下载--getOutputStream输出二进制字符
    文件上传功能实现代码
    java动态生成验证码
    项目中用到的jar包简介(2)
    python字符串的常见操作
    python切片使用方法(超详细)
    for循环结合range使用方法
    python使用while循环实现九九乘法表
    石家庄云修科技有限公司
  • 原文地址:https://www.cnblogs.com/maoxiangyi/p/10830525.html
Copyright © 2020-2023  润新知