Flink 源码(二): Flink Client 实现原理与源码解析(一)

摘要:
问题2:如何确保Flink框架依赖关系与用户代码依赖关系不冲突?你有没有想过Flink框架本身依赖于很多类库,但我们自己的代码也依赖于许多类库。如果类库Flink框架依赖于与我们自己的类库的冲突呢?

来源:https://mp.weixin.qq.com/s/WiRyQEoDfuowT3LNfZ-NSw

0 本文大纲:

Flink 源码(二): Flink Client 实现原理与源码解析(一)第1张

一、我们本次的目的是什么?

这次我们的目的是,在本地的 IDEA 中去 debug flink-clients 代码,然后远程提交给 flink standalone 集群上去执行,看一看 flink 客户端在提交代码之前都干了什么。就像下面这样:

Flink 源码(二): Flink Client 实现原理与源码解析(一)第2张

 很简单是不是,瞬间自信心爆棚!在开始之前,我想要提两个发人深省的问题,你平时一定没有考虑过:

问题 1:用户代码如何变成 DAG 图

DataStream<Tuple2<String, Integer>> counts =
   text.flatMap(new Tokenizer())
   .keyBy(value -> value.f0).sum(1);

Flink 源码(二): Flink Client 实现原理与源码解析(一)第3张

这个过程就是你经常刷源码解析博客看到的一个问题,“ StreamGraph 是如何生成的?”

问题2:如何保证 Flink 框架依赖和用户代码依赖不冲突

不知道你有没有想过,Flink 框架本身是要依赖很多类库的,但我们自己写的代码也是要依赖很多类库的,万一 Flink 框架依赖的类库,跟我们自己的类库冲突了怎么办?

举个例子,Flink 框架会去依赖一个 2.0 版本的 kafka,你自己的代码中依赖的是 2.1 版本的 kafka,那很有可能就类冲突了啊。这个问题该如何解决?

问题1,可能要下次再解答;问题2,这次就解答!

二、把环境弄好先跑一个,有一个直观感受

之前我已经写了一篇文章,关于搭建环境的,这次就不细说了,只想补充两个跟上次不一样的点。

(1)Virtual Box 虚拟机,装好 linux,并且下载了官方发布包(1.12.0),解压到服务器某个目录上

Flink 源码(二): Flink Client 实现原理与源码解析(一)第4张

(2)IDEA 环境中,已经导入了 flink 1.12.0 的源码(注意这里是源码,上面是发布包)

File - Project Structure - Project 改成 1.8

Flink 源码(二): Flink Client 实现原理与源码解析(一)第5张

 File - Settings - Build,Execution,Deployment - Compiler - Java Compiler  这里全部改成 8

Flink 源码(二): Flink Client 实现原理与源码解析(一)第6张

 然后把下面这些全部删掉

Flink 源码(二): Flink Client 实现原理与源码解析(一)第7张

 把 Maven 标签,这里的 java11 勾掉

Flink 源码(二): Flink Client 实现原理与源码解析(一)第8张

 然后重新 reload 工程

Flink 源码(二): Flink Client 实现原理与源码解析(一)第9张

 (3)重新 reload 之后,把这个工程 package 一下

Flink 源码(二): Flink Client 实现原理与源码解析(一)第10张

 (4)IDEA 中新建一个运行配置

Flink 源码(二): Flink Client 实现原理与源码解析(一)第11张

 参数如下:

Flink 源码(二): Flink Client 实现原理与源码解析(一)第12张

几个比较长的字符如下(根目录换成你自己的)
org.apache.flink.client.cli.CliFrontend
 run D:Codeflinkflinkflink-examplesflink-examples-streaming	argetWordCount.jar
FLINK_CONF_DIR=D:Codeflinkflinkflink-distsrcmain
esources

(5)这个 JobManager 修改成你虚拟机的地址

Flink 源码(二): Flink Client 实现原理与源码解析(一)第13张

 (6)直接 debug 运行

Flink 源码(二): Flink Client 实现原理与源码解析(一)第14张

 (7)可以顺利执行。

 

免责声明:文章转载自《Flink 源码(二): Flink Client 实现原理与源码解析(一)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇s-HR导出excel方式二# Vue 使用树形穿梭框下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Windows下 VS2015编译RocksDB

VS2015编译RocksDB RocksDB 是一个来自 facebook 的可嵌入式的支持持久化的 key-value 存储系统,也可作为 C/S 模式下的存储数据库,但主要目的还是嵌入式。RocksDB 基于 LevelDB 构建。 1、下载rocksdb源码 git clone https://github.com/facebook/rocksdb...

深入Vue

摘要: Vue源码阅读第一步。 原文:深入vue - 源码目录及构建过程分析 公众号:前端小苑 Fundebug经授权转载,版权归原作者所有。 本文主要梳理一下vue代码的目录,以及vue代码构建流程,旨在对vue源码整体有一个认知,有助于后续对源码的阅读。 1. 目录结构 上图是对vue的代码的所有目录进行的梳理,其中源码位于src目录下,下面对...

源码剖析——深入Windows句柄本质

参考资料: 1. http://www.codeforge.cn/read/146318/WinDef.h__html windef.h头文件 2. http://www.codeforge.cn/read/146318/WinNT.h__html winnt.h头文件 3. https://msdn.microsoft.com/en-us/library...

Tomcat8源码编译及导入Eclipse中研究

最近因为需求需要修改Tomcat中的某些功能,无奈只能研究那部分源码然后稍作修改。 目前Tomcat最新版是8.0,下载了源码包,编译并导入Eclipse中研究比较方便。 1. Tomcat8源码编译步骤 1.1 先到Apache Tomcat 8.0官网下载最新版Source Code Distributions,解压到某个目录下,如D:apache-t...

Ubuntu中安装Cmake3.22.0

来源:https://www.cnblogs.com/yanqingyang/p/12731855.html 一.使用安装命令 1 sudoaptinstallcmake 注意此种方式安装的可能不是最新版本的Cmake. 二.Cmake源码编译安装 第一步:卸载原来的cmake版本: 1 sudoapt-get remove cmake...

Mysql源码学习——打造专属语法

语法分析——YACC 接触过SQL语句的人都会看过这家或者那家的SQL手册,其语法标准应该是从SQL92开始吧,在看SQL92标准的时候,你会发现里面定义的都是一些巴科斯范式(BNF),就是一种语法定义的标准。不管是牛X哄哄的ORACLE,还是不幸被其收购的Mysql,都会遵循里面的标准语法,当然一些扩展的语法除外,比如今天我们就会扩展一个简单的语法^...