Apache Flink 是新一代的基于 Kappa 架构的流处理框架,近期底层部署结构基于 FLIP-6 做了大规模的调整,我们来看一下在新的版本(1.6-SNAPSHOT)下怎样从源码快速编译执行 Flink 样例。

环境要求

  • Mac OS X 10.12.6
  • Java 8 (特别注意 Java 9 和 10 还不支持,会出现奇怪的 Failure)
  • Maven 3.5.3 (Maven 在较新版本也有较大的变动,最好确保版本匹配)

下载并编译 Flink

我们打算从源码直接编译最新的 SNAPSHOT 版本的 Flink,从 GitHub 上抓取代码仓库。

$ git clone https://github.com/apache/flink

切换到文件夹内并使用 Maven 构建,注意由于 maven-shade-plugin 的问题,在上面给定版本的环境下需要两步构建。

$ cd flink
$ mvn clean install -DskipTests
$ cd flink-dist
$ mvn clean install

这个过程可能需要花点时间,如果相关的包之前没有下载过,可能需要小几十分钟。下载完成后,进入 build-target 目录,这个实际上是 Flink 发布版 Binary 将会包含的内容,我们在该目录下实践简单的样例。

开启本地的 Flink 集群

build-target 目录下执行以下命令以开启一个本地的 Flink 集群,注意早前版本的 start-local.sh 已经废弃,不再产生了。

$ bin/start-cluster.sh
Starting cluster.
Starting standalonesession daemon on host localhost.
Starting taskexecutor daemon on host localhost.

在浏览器中打开地址 http://localhost:8081/#/overview 可以看到 Flink 集群的概览页面,这类似于 Apache Hadoop 采取的 Dashboard 方案。

执行流处理的样例

这里我们选择 SocketWindowWordCount.jar 作为流处理的样例来测试。

顾名思义,这个例程的功能是连接一个 Socket,接受它发来的信息,并对其中的单词进行单词计数。

我们先使用 netcat 程序打开监听本地(localhost)9000 端口的服务。

$ nc -l 9000

再启动 Flink 例程。

$ bin/flink run examples/streaming/SocketWindowWordCount.jar --port 9000
Starting execution of program

回到 netcat 的窗口,输入一段文本,比如

$ nc -l 9000
There is more than one way to do it.
Do what I mean.
Life is short. I use Python.
^C

最后的 ^C 表示按下 ctrl-c 断开 netcat。现在,我们可以在 build-target/log 目录下找到相应的 .out 文件,记录着刚才单词计数的结果。

$ cat log/flink-*-taskexecutor-*.out
There : 1
it. : 1
do : 1
to : 1
way : 1
one : 1
than : 1
more : 1
is : 1
Do : 1
mean. : 1
I : 1
what : 1
There : 1
it. : 1
do : 1
to : 1
way : 1
one : 1
than : 1
more : 1
is : 1
Do : 1
mean. : 1
I : 1
what : 1
Life : 1
Python. : 1
use : 1
I : 1
short. : 1
is : 1

注意这里两次出现的 I 被统计了两个一次,这是因为原程序以 5 秒钟为窗口处理数据。如果你的输入速度较快,那么两个 I 可能被统计在一起,如果你在输入后过早按下 ^C,那么可能就有数据没被统计。

执行批处理的样例

Flink 通过对抽象上无限的流数据人为的划定界限来支持批处理。这里我们同样选择单词计数程序 WordCount.jar 来作为批处理的样例。

首先是保证你已经按上面提到的步骤正确开启了一个本地的 Flink 集群,这一次我们直接执行对应的程序。

$ bin/flink run ./examples/batch/WordCount.jar --input NOTICE
Starting execution of program
Printing result to stdout. Use --output to specify output path.
(2009,1)
(2012,1)
(2014,1)
(2015,2)
(2018,1)
(a,1)
(and,5)
(apache,5)
(ashkenas,1)
(at,1)
(based,1)
(code,1)
...
(the,7)
(their,2)
(these,1)
(this,1)
(to,1)
(underscore,1)
(underscorejs,1)
(use,1)
(with,1)
(www,1)
(your,1)
Program execution finished
Job with JobID 5af6875fe52a171a5c5de528d8dde4c9 has finished.
Job Runtime: 720 ms
Accumulator Results:
- 89f67bbe6783a9bfe37ba2a22b126422 (java.util.ArrayList) [60 elements]

中间的 ... 为省略的部分输出,这里的输入文件 NOTICE 是构建 Flink 后必定在目录 build-target 下的。可以看到,用 Flink 来执行批处理任务操作起来也十分轻松写意。

结语

首先不要忘记关掉打开的 Flink 集群(笑)。

$ bin/stop-cluster.sh

这篇文章的主要目的是介绍 Flink 的基础用法。我个人的学习经验是,无论学习的主题,其全体多么的宏伟,其深处多么的有趣,但是如果作为初学者一开始就撞上艰深晦涩的部分,那么大部分的潜在受众可能就会生出畏惧之心,进而跑路了。所以我在这里避开代码不谈,仅仅展示 Flink 如何实践大数据背景下的 HelloWorld 程序,即 WordCount 例程,希望能藉此引发各位 Flink 潜在受众的兴趣,更深入的了解这个超越了 Apache Storm 的,基于 Kappa 架构的,高速发展的新生代流处理框架。

最后附上 Apache Flink 的 GitHub 地址ASF JIRA 地址

Apache Flink Quickstart的更多相关文章

  1. Apache Flink

    Flink 剖析 1.概述 在如今数据爆炸的时代,企业的数据量与日俱增,大数据产品层出不穷.今天给大家分享一款产品—— Apache Flink,目前,已是 Apache 顶级项目之一.那么,接下来, ...

  2. Apache Flink 流处理实例

    维基百科在 IRC 频道上记录 Wiki 被修改的日志,我们可以通过监听这个 IRC 频道,来实时监控给定时间窗口内的修改事件.Apache Flink 作为流计算引擎,非常适合处理流数据,并且,类似 ...

  3. 终于等到你!阿里正式向 Apache Flink 贡献 Blink 源码

    摘要: 如同我们去年12月在 Flink Forward China 峰会所约,阿里巴巴内部 Flink 版本 Blink 将于 2019 年 1 月底正式开源.今天,我们终于等到了这一刻. 阿里妹导 ...

  4. Apache Flink初接触

    Apache Flink闻名已久,一直没有亲自尝试一把,这两天看了文档,发现在real-time streaming方面,Flink提供了更多高阶的实用函数. 用Apache Flink实现WordC ...

  5. Stream Processing for Everyone with SQL and Apache Flink

    Where did we come from? With the 0.9.0-milestone1 release, Apache Flink added an API to process rela ...

  6. Peeking into Apache Flink's Engine Room

    http://flink.apache.org/news/2015/03/13/peeking-into-Apache-Flinks-Engine-Room.html   Join Processin ...

  7. [Essay] Apache Flink:十分可靠,一分不差

    Apache Flink:十分可靠,一分不差 Apache Flink 的提出背景 我们先从较高的抽象层次上总结当前数据处理方面主要遇到的数据集类型(types of datasets)以及在处理数据 ...

  8. [Note] Apache Flink 的数据流编程模型

    Apache Flink 的数据流编程模型 抽象层次 Flink 为开发流式应用和批式应用设计了不同的抽象层次 状态化的流 抽象层次的最底层是状态化的流,它通过 ProcessFunction 嵌入到 ...

  9. 新一代大数据处理引擎 Apache Flink

    https://www.ibm.com/developerworks/cn/opensource/os-cn-apache-flink/index.html 大数据计算引擎的发展 这几年大数据的飞速发 ...

随机推荐

  1. ajax核心技术1---XMLHttpRequset对象的使用

    AJAX即"Asynchronous Javascript And XML"(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术.AJAX = 异步 Ja ...

  2. [mysql]一次主从数据不一致的问题解决过程

    之前一篇: 主从更换ip之后重新建立同步 情况时这样的 昨天晚上主动2个机器都迁移了,然后今天才把主动重新连接上,但是从库的偏移量是从今天当前时刻开始的,也就是说虽然现在主动看似正常,其实是少了昨天的 ...

  3. EBS DBA指南笔记(二)

    第三章 监控和诊断   本章涵盖以下几个主题:监测的方法,数据库的监测,apache的监测,forms的监测,并发管理器的监测,服务器的监测,网络的监测,其它的一些监测和诊断方法. 1.监测的方法:主 ...

  4. 我为什么选择go语言

    这里,我并不打算引起语言争论的口水仗,我并不是什么大牛,对语言的造诣也不深,只是想通过自己实际的经历,来说说为什么我在项目中选择go. 其他语言的经历 C++ 在接触go之前,我已经有多年的c++开发 ...

  5. 怎样写一个与Windows10 IE11兼容的标准BHO?

    p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; f ...

  6. Uva - 1607 - Gates

    题目理解麻烦,估计提交量少(总共只有32个人...)也是因为题目比较麻烦,看起来像物理题,实际理解了还可以.整个电路的功能就4种,先判断x=0和x=1的输出是否相同,吐过相同,而整个电路是常熟,随便输 ...

  7. RecyclerView 实现横向滚动效果

    我相信很久以前,大家在谈横向图片轮播是时候,优先会选择具有HorizontalScrollView效果和ViewPager来做,不过自从Google大会之后,系统为我们提供了另一个控件Recycler ...

  8. 解决在onCreate()过程中获取View的width和Height为0的方法

    最近在看Android底层代码的view绘制原理的时候讲到一个很有意思的事情,也是我几年前刚开始学习Android开发的时候比较纳闷的一个问题,如果你不理解Android的底层绘制,请看我之前一片文章 ...

  9. Python基础:条件判断与循环的两个要点

    一.条件判断: Python中,条件判断用if语句实现,多个条件判断时用if...elif实现:看下面一段程序 #python 3.3.5 #test if...elif age = 20 if ag ...

  10. Dynamics CRM2013 Server2012下部署ADFS和IFD遇到的问题No Organization were retrived

    最近一直在折腾Windows Server2012下的IFD部署,其中各种纠结啊错误百出,要想顺利的一步到位只能说看你的RP怎么样了,具体的操作过程推荐看下勇哥的博客:http://luoyong02 ...