Flink 源码解析 —— 源码编译运行
更新一篇知识星球里面的源码分析文章,去年写的,周末自己录了个视频,大家看下效果好吗?如果好的话,后面补录发在知识星球里面的其他源码解析文章。
前言
之前自己本地 clone 了 Flink 的源码,编译过,然后 share 到了 GitHub 上去了,自己也写了一些源码的中文注释,并且 push 到了 GitHub 上去了。这几天阿里开源了宣传已久的 Blink,结果我那个分支不能够继续 pull 下新的代码,再加上自己对 Flink 研究了也有点时间了,所以打算将这两个东西对比着来看,这样可能会学到不少更多东西,因为 Blink 是另外一个分支,所以自己干脆再重新 fork 了一份,拉到本地来看源码。
fork
执行下面命令:
git clone git@github.com:apache/flink.git
拉取的时候找个网络好点的地方,这样速度可能会更快点。
编译
因为自己想看下 Blink 分支的代码,所以需要切换到 blink 分支来,
git checkout blink
这样你就到了 blink 分支了,接下来我们将 blink 源码编译一下,执行如下命令:
mvn clean install -Dmaven.test.skip=true -Dhadoop.version=2.7.6 -Dmaven.javadoc.skip=true -Dcheckstyle.skip=true
maven 编译的时候跳过测试代码、javadoc 和代码风格检查,这样可以减少不少时间。
注意:你的 maven 的 settings.xml 文件的 mirror 添加下面这个:(这样下载依赖才能飞起来)
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*,!jeecg,!jeecg-snapshots,!mapr-releases</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
<mirror>
<id>mapr-public</id>
<mirrorOf>mapr-releases</mirrorOf>
<name>mapr-releases</name>
<url>https://maven.aliyun.com/repository/mapr-public</url>
</mirror>
执行完这个命令后,然后呢,你可以掏出手机,打开微信,搜索下微信号:zhisheng_tian , 然后点击一波添加好友,欢迎来探讨技术。
等了一波时间之后,你可能会遇到这个问题(看到不少童鞋都遇到这个问题,之前编译 Flink 的时候也遇到过):
[ERROR] Failed to execute goal on project flink-mapr-fs: Could not resolve dependencies for project com.alibaba.blink:flink-mapr-fs:jar:1.5.1: Failure to find com.mapr.hadoop:maprfs:jar:5.2.1-mapr in http://maven.aliyun.com/nexus/content/groups/public was cached in the local repository, resolution will not be reattempted until the update interval of nexus-aliyun has elapsed or updates are forced -> [Help 1]

如果你试了两遍都没编译通过,那么我这里就教大家一种方法(执行完编译命令后啥也没动就 OK 的请跳过,谁叫你运气这么好呢):

在 flink-filesystems 中把 flink-mapr-fs module 给注释掉。
上图这是我给大家的忠告,特别管用。
再次执行命令编译起来就没有错误了,如果你还有其他的错误,我猜估计还是网络的问题,导致一些国外的 maven 依赖下载不下来或者不完整,导致的错误,暴力的方法就是和我一样,把这些下载不下来的依赖 module 注释掉,或者你可以像已经编译好的童鞋要下 maven 的 .m2 文件里面已经下载好了的依赖,然后复制粘贴到你的本地路径去,注意路径包名不要弄错了,这样一般可以解决所有的问题了,如果还有问题,我也无能为力了。
编译成功就长下图这样:

运行
然后我们的目录是长这样的:

标记的那个就是我们的可执行文件,就跟我们在 Flink 官网下载的一样,我们可以将它运行起来看下效果。
我把它移到了 /usr/local/blink-1.5.1 下了,个人习惯,喜欢把一些安装的软件安装在 /usr/local/ 目录下面。

目录结构和我以前的安装介绍文章类似,就是多了 batch_conf 目录,和 conf 目录是一样的东西,不知道为啥要弄两个配置文件目录,问过负责的人,没理我,哈哈哈。
那么我们接下来就是运行下 Blink,进入到 bin 目录,执行可执行文件:
./start-cluster.sh

windows 可以点击 start-cluster.bat 启动,这点对 windows 用户比较友好。
执行完后命令后,在浏览器里访问地址,http://localhost:8081/ , 出现下图这样就代表 Blink 成功启动了:

上图是开源版本的白色主题,骚气的黑色主题通过在 Flink 群里得知如何改之后,编译运行后的效果如下:

一次好奇的执行了多次上面启动命令,发现也能够正常的运行。
然后启动的日志是这样的:

说明已经启动了 9 个 Task Manager,然后看到我们页面的监控信息如下:

可以看到监控信息里面已经有 40 个可用的 slot,这是因为 Blink 默认的是一个 Task Manager 4 个 slot,我们总共启动了 10 个 Task Manager,所以才会有 40 个可用的 slot,注意:Flink 默认的配置是 1 个 Task Manager 只含有 1 个 slot,不过这个是可以自己分配的。
注意:开启了多个 Task Manager 后,要关闭的话,得执行同样次数的关闭命令:
./stop-cluster.sh
中文源码分析
https://github.com/zhisheng17/flink
配套视频解析
视频录制过程难免说错,还请大家可以指教
相关
更多源码解析的文章和 Flink 资料请加知识星球!

本文地址是:http://www.54tianzhisheng.cn/2019/01/30/Flink-code-compile/,未经允许,禁止转载!
总结
本篇文章是《从1到100深入学习Flink》的第一篇,zhisheng 我带带大家一起如何 clone 项目源码,进行源码编译,然后运行编译后的可执行文件 blink。下篇文章会分析项目源码的结构组成。

博客
1、Flink 从0到1学习 —— Apache Flink 介绍
2、Flink 从0到1学习 —— Mac 上搭建 Flink 1.6.0 环境并构建运行简单程序入门
3、Flink 从0到1学习 —— Flink 配置文件详解
4、Flink 从0到1学习 —— Data Source 介绍
5、Flink 从0到1学习 —— 如何自定义 Data Source ?
6、Flink 从0到1学习 —— Data Sink 介绍
7、Flink 从0到1学习 —— 如何自定义 Data Sink ?
8、Flink 从0到1学习 —— Flink Data transformation(转换)
9、Flink 从0到1学习 —— 介绍 Flink 中的 Stream Windows
10、Flink 从0到1学习 —— Flink 中的几种 Time 详解
11、Flink 从0到1学习 —— Flink 读取 Kafka 数据写入到 ElasticSearch
12、Flink 从0到1学习 —— Flink 项目如何运行?
13、Flink 从0到1学习 —— Flink 读取 Kafka 数据写入到 Kafka
14、Flink 从0到1学习 —— Flink JobManager 高可用性配置
15、Flink 从0到1学习 —— Flink parallelism 和 Slot 介绍
16、Flink 从0到1学习 —— Flink 读取 Kafka 数据批量写入到 MySQL
17、Flink 从0到1学习 —— Flink 读取 Kafka 数据写入到 RabbitMQ
18、Flink 从0到1学习 —— Flink 读取 Kafka 数据写入到 HBase
19、Flink 从0到1学习 —— Flink 读取 Kafka 数据写入到 HDFS
20、Flink 从0到1学习 —— Flink 读取 Kafka 数据写入到 Redis
21、Flink 从0到1学习 —— Flink 读取 Kafka 数据写入到 Cassandra
22、Flink 从0到1学习 —— Flink 读取 Kafka 数据写入到 Flume
23、Flink 从0到1学习 —— Flink 读取 Kafka 数据写入到 InfluxDB
24、Flink 从0到1学习 —— Flink 读取 Kafka 数据写入到 RocketMQ
25、Flink 从0到1学习 —— 你上传的 jar 包藏到哪里去了
26、Flink 从0到1学习 —— 你的 Flink job 日志跑到哪里去了
28、Flink 从0到1学习 —— Flink 中如何管理配置?
29、Flink 从0到1学习—— Flink 不可以连续 Split(分流)?
30、Flink 从0到1学习—— 分享四本 Flink 国外的书和二十多篇 Paper 论文
32、为什么说流处理即未来?
33、OPPO 数据中台之基石:基于 Flink SQL 构建实时数据仓库
36、Apache Flink 结合 Kafka 构建端到端的 Exactly-Once 处理
38、如何基于Flink+TensorFlow打造实时智能异常检测平台?只看这一篇就够了
40、Flink 全网最全资源(视频、博客、PPT、入门、实战、源码解析、问答等持续更新)
源码解析
4、Flink 源码解析 —— standalone session 模式启动流程
5、Flink 源码解析 —— Standalone Session Cluster 启动流程深度分析之 Job Manager 启动
6、Flink 源码解析 —— Standalone Session Cluster 启动流程深度分析之 Task Manager 启动
7、Flink 源码解析 —— 分析 Batch WordCount 程序的执行过程
8、Flink 源码解析 —— 分析 Streaming WordCount 程序的执行过程
9、Flink 源码解析 —— 如何获取 JobGraph?
10、Flink 源码解析 —— 如何获取 StreamGraph?
11、Flink 源码解析 —— Flink JobManager 有什么作用?
12、Flink 源码解析 —— Flink TaskManager 有什么作用?
13、Flink 源码解析 —— JobManager 处理 SubmitJob 的过程
14、Flink 源码解析 —— TaskManager 处理 SubmitJob 的过程
15、Flink 源码解析 —— 深度解析 Flink Checkpoint 机制
16、Flink 源码解析 —— 深度解析 Flink 序列化机制
17、Flink 源码解析 —— 深度解析 Flink 是如何管理好内存的?
18、Flink Metrics 源码解析 —— Flink-metrics-core
19、Flink Metrics 源码解析 —— Flink-metrics-datadog
20、Flink Metrics 源码解析 —— Flink-metrics-dropwizard
21、Flink Metrics 源码解析 —— Flink-metrics-graphite
22、Flink Metrics 源码解析 —— Flink-metrics-influxdb
23、Flink Metrics 源码解析 —— Flink-metrics-jmx
24、Flink Metrics 源码解析 —— Flink-metrics-slf4j
25、Flink Metrics 源码解析 —— Flink-metrics-statsd
26、Flink Metrics 源码解析 —— Flink-metrics-prometheus


27、Flink 源码解析 —— 如何获取 ExecutionGraph ?
30、Flink Clients 源码解析原文出处:zhisheng的博客,欢迎关注我的公众号:zhisheng
Flink 源码解析 —— 源码编译运行的更多相关文章
- Ubuntu TensorFlow 源码 Android Demo的编译运行
Ubuntu TensorFlow 源码 Android Demo的编译运行 一. 安装 Android 的SDK和NDK SDK 配置 A:下载 国内下载地址选最新的: SDK: https://d ...
- EventBus源码解析 源码阅读记录
EventBus源码阅读记录 repo地址: greenrobot/EventBus EventBus的构造 双重加锁的单例. static volatile EventBus defaultInst ...
- Collection集合重难点梳理,增强for注意事项和三种遍历的应用场景,栈和队列特点,数组和链表特点,ArrayList源码解析, LinkedList-源码解析
重难点梳理 使用到的新单词: 1.collection[kəˈlekʃn] 聚集 2.empty[ˈempti] 空的 3.clear[klɪə(r)] 清除 4.iterator 迭代器 学习目标: ...
- Syncthing源码解析 - 源码目录说明!
Syncthing是一个免费开源的p2p软件,Go语言编写的! 官网:https://syncthing.net/ 源码:https://github.com/syncthing/syncthing/ ...
- 设计模式课程 设计模式精讲 8-8 单例设计模式-Enum枚举单例、原理源码解析以及反编译实战
1 课堂解析 2 代码演练 2.1 枚举类单例解决序列化破坏demo 2.2 枚举类单例解决序列化破坏原理 2.3 枚举类单例解决反射攻击demo 2.4 枚举类单例解决反射攻击原理 3 jad的使用 ...
- Flink 源码解析 —— 如何获取 ExecutionGraph ?
https://t.zsxq.com/UnA2jIi 博客 1.Flink 从0到1学习 -- Apache Flink 介绍 2.Flink 从0到1学习 -- Mac 上搭建 Flink 1.6. ...
- Flink 源码解析 —— 深度解析 Flink 是如何管理好内存的?
前言 如今,许多用于分析大型数据集的开源系统都是用 Java 或者是基于 JVM 的编程语言实现的.最着名的例子是 Apache Hadoop,还有较新的框架,如 Apache Spark.Apach ...
- Flink 源码解析 —— 如何获取 JobGraph?
JobGraph https://t.zsxq.com/naaMf6y 博客 1.Flink 从0到1学习 -- Apache Flink 介绍 2.Flink 从0到1学习 -- Mac 上搭建 F ...
- Flink 源码解析 —— Flink JobManager 有什么作用?
JobManager 的作用 https://t.zsxq.com/2VRrbuf 博客 1.Flink 从0到1学习 -- Apache Flink 介绍 2.Flink 从0到1学习 -- Mac ...
随机推荐
- 仿照Spring自己实现有各种通知的AOP,AOP实现的步骤分解
一.需求: 仿照Spring的AOP写的 MyAOP 2.0,有环绕通知.前置通知.后置通知.返回通知.异常通知等. 已实现:①通过动态代理+通知的注解类,实现了前置通知.后置通知等各种通知:②切点( ...
- 配置Python虚拟环境
最小化安装的centos7中并没有安装python3 1.安装python3 1)下载安装包: wget https://www.python.org/ftp/python/3.6.2/Python- ...
- 花5分钟时间来了解一下高性能网关Kong会有意外收获
前言 前几天开源发布了 Kong.Net 项目,收到了大量园友的反馈,开源当天就突破了 100 个star ,可喜可贺,但是从侧面也说明,我们 .NetCore 阵营真的非常需要拥抱开源,应该敞开心扉 ...
- c++学习书籍推荐《C++ GUI Qt 4编程(第2版)》下载
下载地址:点我 百度云及其他网盘下载地址:点我 编辑推荐 <C++ GUI Qt 4编程(第2版)>讲授的大量Qt4编程原理和实践,都可以轻易将其应用于Qt4.4.Qt4.5及后续版本的Q ...
- 手动启动log4j|nginx实现http https共存
手动加载log4j.xml文件 DOMConfigurator.configure("src/main/resources/log4j.xml"); log4j.propertie ...
- RestTemplate真实案例
1. 场景描述 现在越来越的系统之间的交互采用http+json的交互方式,以前用的比较多的HttpClient,后来用的RestTemplate,感觉RestTemplate要比httpClent简 ...
- Dom4J的基本使用
初始化数据 <?xml version="1.0" encoding="UTF-8"?> <RESULT> <VALUE> ...
- Docker笔记(五):整一个自己的镜像
原文地址:http://blog.jboost.cn/2019/07/17/docerk-5.html 获取镜像的途径有两个,一是从镜像仓库获取,如官方的Docker Hub,二是自定义.上文已经介绍 ...
- Code Review最佳实践
我一直认为Code Review(代码审查)是软件开发中的最佳实践之一,可以有效提高整体代码质量,及时发现代码中可能存在的问题.包括像Google.微软这些公司,Code Review都是基本要求,代 ...
- SpringBoot快速入门01--环境搭建
SpringBoot快速入门--环境搭建 1.创建web工程 1.1 创建新的工程. 1.2 选择maven工程,点击下一步. 1.3 填写groupid(maven的项目名称)和artifacti ...