欢迎访问我的GitHub

https://github.com/zq2599/blog_demos

内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;

为什么要编译flink源码

用于学习,在IDEA上开发的flink job,能直接在IDEA运行,如果运行时依赖的flink框架是我们自己编译构建的,就做到了从业务到框架都可以修改源码并验证,起到了很好的学习和动手实践效果;

环境信息

  1. 电脑:2019版13寸MacBook Pro,2.3 GHz 四核Intel Core i5,8 GB 2133 MHz LPDDR3
  2. 操作系统:macOS Catalina 10.15.3
  3. JDK:1.8.0_211
  4. Maven:3.6.0
  5. IDEA:2018.3.5 (Ultimate Edition)

关于正版IDEA

如何免费使用正版IDEA,可以参考《免费申请和使用IntelliJ IDEA商业版License指南》

全文概览

今天的实战由以下内容组成:

  1. 开发一个最简单的flink任务,在IDEA上以local模式运行;
  2. 下载flink1.9.2源码;
  3. 修改flink1.9.2源码,并且编译构建;
  4. 设置,让步骤1中的flink任务用上刚刚编译的flink1.9.2框架;
  5. 再次运行flink任务,验证修改后的flink框架是否生效;

IDEA上运行flink job工程

  1. 在IDEA上创建flink job的maven工程并运行,请参考《IDEA上运行Flink任务》
  2. 假设您已按上面的步骤在IDEA建好了flink job工程;
  3. 运行起来,在浏览器打开flink页面,如下图,绿框中显示一共有8个Task Slot:

  4. 之所以会有8个Task Slot,和下图红框中的代码有关,这是段flink框架源码(StreamExecutionEnvironment.java),入参parallelism是CPU核数,我这里是开了超线程的四核i5处理器,所以parallelism等于8:

  5. 今天的目标就是修改上图红框中的源码,然后在网页上看是不是生效了(Task Slot数量从8改成5);

准备工作

  1. maven中央仓库地址建议用阿里云的,否则会经常遇到jar下载超时错误,地址:http://192.168.50.43:8081/repository/aliyun-proxy/
  2. flink1.9.2源码的maven工程依赖了一个中央仓库没有的jar,GAV是io.confluent:kafka-schema-registry-client:3.3.1,您需要下载下来在本地仓库做mvn install操作,下载地址:http://packages.confluent.io/maven/io/confluent/kafka-schema-registry-client/3.3.1/kafka-schema-registry-client-3.3.1.jar
  3. 上述准备工作都需要您在本地maven上操作,但是如果您的条件允许,还是强烈推荐在内网搭建maven私服nexus3,参考:《群晖DS218+做maven私服(nexus3)》《Ubuntu部署和体验Nexus3》《Nexus3常用功能备忘》

下载flink1.9.2源码

flink1.9.2源码的下载地址:http://ftp.jaist.ac.jp/pub/apache/flink/flink-1.9.2/flink-1.9.2-src.tgz

修改和编译构建

  1. 将下载好的flink-1.9.2-src.tgz解压,得到文件夹flink-1.9.2
  2. 打开这个文件:flink-1.9.2/flink-streaming-java/src/main/java/org/apache/flink/streaming/api/environment/StreamExecutionEnvironment.java
  3. 如下图红框,找到createLocalEnvironment方法,把setParallelism的入参改成一个固定的数字(每个Task Slot都要分配内存,所以这个数字请不要改得太大,否则启动flink就会报错了,我这里改成了5):

  4. 在文件夹flink-1.9.2下,执行编译构建的命令:mvn clean install -DskipTests -Dfast
  5. 经历漫长等待后提示构建成功:

  6. 确认这个文件已生成,稍后就要用到:flink-1.9.2/flink-dist/target/flink-dist_2.11-1.9.2.jar

设置

  1. 为了用上刚刚构建出来的flink框架jar,要做些设置,打开之前运行的flink job应用,在项目上点击右键,点击菜单Open Module Settings,如下图:

  2. 接下来要做三个和jar有关的操作,注意每一步都很重要:
  3. 下图红框1中的flink-dist_2.11-1.9.2.jar文件,是《IDEA上运行Flink任务》一文中添加的,目的是提供网页服务,现在将其删除,操作如下图红框所示:

  4. 下图红框1中的maven依赖:org.apache.flink:flink-streaming-java_2.11:1.9.2,也请删除,操作如下图红框所示:

  5. 点击下图红框中的加号:

  6. 在弹出的窗口选中刚才构建好的文件flink-1.9.2/flink-dist/target/flink-dist_2.11-1.9.2.jar:

  7. 记得点击右下角的OK按钮保存,修改完毕,接下来验证咱们修改的flink框架源码是否生效了

验证

  1. 当前flink job工程来自《IDEA上运行Flink任务》一文,StreamingJob的工作是读取本机18081端口的数据,所以我们要把18081端口的服务启动起来,不然StreamingJob运行时是连不上端口的,打开一个控制台,执行命令:nc -l 18081
  2. 现在可以将StreamingJob运行起来,如下图,右键点击StreamingJob,选择Run 'StreamingJob.main()':即可启动flink任务:

  3. 在IDEA的控制台搜索关键字localhost,如下图红框,可以查到flink网页的端口,我这里是52704:

  4. 浏览器访问http://localhost:52704,如下图红框,Total Task Slots数量是5,我们修改的flink1.9.2的源码生效了:

  5. 至此,Flink1.9.2的源码从修改到编译构建,再到验证都已经完成了,如果您也在学习flink,希望本文能给您一些参考,一起来动手实战吧;

欢迎关注公众号:程序员欣宸

微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界...

https://github.com/zq2599/blog_demos

Flink1.9.2源码编译和使用的更多相关文章

  1. Android 5.0源码编译问题

    如果是自己通过repo和git直接从google官网上download的源码,请忽略这个问题,但是由于google在国内被限制登录,通过这一种方法不是每个人都能download下来源码,通常的做法就是 ...

  2. Android stdio Apktool源码编译

    Android Apktool源码编译 标签(空格分隔): Android Apktool 源码编译 需求 习惯NetBeans调试smali需要用Apktool反编译apk,需要用-d的参数才能生成 ...

  3. SSH/SSL 源码编译安装简易操作说明

    环境:CentOS 6.7 安全加固需求,由于某盟扫描系统主机有SSL系列漏洞,客户要求必须修复: 解决方案:将SSH/SSL升级到最新版本,删除SSL旧版本(实测不删除旧版本某盟扫描无法通过). 当 ...

  4. Hadoop源码编译过程

    一.           为什么要编译Hadoop源码 Hadoop是使用Java语言开发的,但是有一些需求和操作并不适合使用java,所以就引入了本地库(Native Libraries)的概念,通 ...

  5. World Wind .NET源码编译问题处理

    World  Wind  .NET源码编译问题处理 下载了World_Wind_1.4.0_Source源码(http://worldwindcentral.com/wiki/NASA_World_W ...

  6. 源码编译安装 MySQL 5.5.x 实践

    1.安装cmakeMySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具.因此,我们首先要在系统中源码编译安装cmake工具. # wget ht ...

  7. Linux 安装node.js ---- 源码编译的方式

    一 : 普通用户: 安装前准备环境: 1.检查Linux 版本 命令: cat /etc/redhat-release 2.检查 gcc.gcc-c++ 是否安装过 命令: rpm -q gcc rp ...

  8. 烂泥:mysql5.5数据库cmake源码编译安装

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 以前也写过一篇有关mysql5.0源码编译的文章,该文章为<烂泥:mysql5.0数据库源码编译安装>.但是MySQL自5.5版本以后,就开 ...

  9. Centos7.X 源码编译安装subversion svn1.8.x

    说明:SVN(subversion)的运行方式有两种:一种是基于Apache的http.https网页访问形式:还有一种是基于svnserve的独立服务器模式.SVN的数据存储方式也有两种:一种是在B ...

随机推荐

  1. 转载:tf.gfile的用法

    https://blog.csdn.net/a373595475/article/details/79693430

  2. CentOS7 【linux系统】配置 JDK 教程

    1. 下载 [linux版本] JDK 1.8 的包. 2. 导入linux系统里面. 如何导入,下载一个winSCP 软件 破解安装,然后再linux 系统里面 查询IP,连接即可. 在linux解 ...

  3. P1879 [USACO06NOV] Corn Fields G

    题目描述 农场主John新买了一块长方形的新牧场,这块牧场被划分成M行N列(1 ≤ M ≤ 12; 1 ≤ N ≤ 12),每一格都是一块正方形的土地.John打算在牧场上的某几格里种上美味的草,供他 ...

  4. Linux系统如何在离线环境或内网环境安装部署Docker服务和其他服务

    如何在离线环境或纯内网环境的Linux机器上安装部署Docker服务或其他服务.本次我们以Docker服务和Ansible服务为例. 获取指定服务的所有rpm包 保证要获取rpm包的机器能够上网. 本 ...

  5. Java 客户端操作 FastDFS 实现文件上传下载替换删除

    FastDFS 的作者余庆先生已经为我们开发好了 Java 对应的 SDK.这里需要解释一下:作者余庆并没有及时更新最新的 Java SDK 至 Maven 中央仓库,目前中央仓库最新版仍旧是 1.2 ...

  6. 【Flutter Widgets大全】电子书开源

    [Flutter Widgets大全]是老孟耗费大量精力整理的,总共有330多个组件的详细用法,开源到Github上,希望可以帮助到大家,开源不易,点个赞可不可以. [Flutter Widgets ...

  7. 从0到1进行Spark history分析

    一.总体思路 以上是我在平时工作中分析spark程序报错以及性能问题时的一般步骤.当然,首先说明一下,以上分析步骤是基于企业级大数据平台,该平台会抹平很多开发难度,比如会有调度日志(spark-sub ...

  8. golang RSA2加密/解密

    $go get github.com/wenzhenxi/gorsa test.go文件的内容 运行: $go run test.go package main import ( "fmt& ...

  9. day67:Vue:es6基本语法&vue.js基本使用&vue指令系统

    目录 Vue前戏:es6的基本语法 1.es6中的let特点 1.1.局部作用域 1.2.不存在变量提升 1.3.不能重复声明 1.4.let声明的全局变量不从属于window对象,var声明的全局变 ...

  10. 发布MeteoInfo 2.3

    主要的更新如下: Using SVG icons in GUI. Update netCDF java library to 5.3.3. Update FlatLaf to 0.40. Update ...