欢迎来到爱乐透竟彩足球_爱乐透手机新版本下载_爱乐透手机普通版! 联系我们 网站地图

爱乐透竟彩足球_爱乐透手机新版本下载_爱乐透手机普通版

0379-65557469

爱乐透
全国服务热线
0379-65557469

电话: 0379-65557469
0379-63930906
0379-63900388 
0379-63253525   
传真: 0379-65557469
地址:洛阳市洛龙区开元大道219号2幢1-2522、2501、2502、2503、2504、2505室 

爱乐透
当前位置: 首页 | 新闻中心 > 爱乐透

Flink:你绕不过去的 Hello World

作者:admin 发布时间:2019-12-18 02:19:15 浏览次数:306
打印 收藏 关闭
字体【
视力保护色

在学习技能时,总会有一个简略程序 Demo 带着咱们入门,所以参考着官网比如,带咱们快速了解 Flink 的 Hello World~

阐明一下,项目运转的环境如下:

OS : Mac

Flink Version : 1.9

IDE : IDEA

Java Version : 1.8

下面来讲下关于环境预备,假如是 Windows 的用户,请参照每个进程,找到习惯自己的装置 or 发动办法。

环境预备

首要咱们默许现已装置了 Jdk 1.8 和编码东西 IDEA,下面来讲怎么装置 Flink 和树立脚手架。下面展现的项目代码现已放入了 Github[1],能够下载进行本地运转

装置 Flink

$ brew install apache-flink

检查装置是否成功以及版别号

$ flink --version
Version: 1.9.0, Commit ID: 9c32ed9

接着以单机集群形式发动 Flink

$ sh /usr/local/Cellar/apache-flink/1.9.0/libexec/bin/start-cluster.sh
Starting cluster.
Starting standalonesession daemon on host yejingqideMBP-c510.
Starting taskexecutor daemon on host yejingqideMBP-c510.

然后拜访 localhost:8081 监控界面(1.9 版别更新了 UI):



创建项目

这儿引荐的是运用 maven 进行构建,在指令行中输入如下内容(# 号后边是阐明,请不要输入):

$ mvn archetype:generate \
-DarchetypeGroupId=org.apache.flink \ # flink 的 group.id
-DarchetypeArtifactId=flink-quickstart-java \ # flink 的 artifact.id
-DarchetypeVersion=1.9.0 \ # flink 的 version,以上三个请不要修正,依照默许即可
-DgroupId=wiki-edits \ # 项目的 group.id
-DartifactId=wiki-edits \ # 项目的 artifact.id
-Dversion=0.1 \ # 项目的 version.id
-Dpackage=wikiedits \ # 项目的根底包名
-DinteractiveMode=false # 是否需要和用户交互以取得输入,因为上面现已自己写了项目的参数,所以禁用了。反之请删掉 上面项目的装备,将交互形式设为 true

假如依照官方的比如填写,那么你将得到如下的项目结构:

$ tree wiki-edits
wiki-edits/
├── pom.xml
└── src
└── main
├── java
│ └── wikiedits
│ ├── BatchJob.java
│ └── StreamingJob.java
└── resources
└── log4j.properties

假如是自己自定义的,包结构会不共同,可是经过脚手架创建的,pom 文件中预置的依靠都将共同,引入了 Flink 根底开发相关的 API,然后经过 IDEA 翻开该项目目录,就能够开端咱们的 Hello world。

开端项目

首要告知一下待会的流程,编写程序代码,发动 netcat 指令来监听 9000 端口,发动或提交 Flink 程序,最终监听日志输出信息。

1、项目代码

Demo 的代码作用是监听 netcat 输入的字符,然后进行聚合操作,最终输出字符计算

public class SocketTextStreamWordCount {
public static void main(String[] args) throws Exception {
String hostName = "127.0.0.1";
int port = 9000;
// 设置运转环境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// 获取数据源
DataStreamSource stream = env.socketTextStream(hostName, port);
// 计数
SingleOutputStreamOperator> sum = stream
.flatMap((new LineSplitter()))
.keyBy(0)
.sum(1);
// 输出
sum.print();
// 提交使命
env.execute("Java Word from SocketTextStream Example");
}
public static final class LineSplitter implements FlatMapFunction> {
@Override
public void flatMap(String s, Collector> collector) throws Exception {
String[] tokens = s.toLowerCase().split("\\W+");
for (String token : 美国连体姐妹tokens) {
if (token.length() > 0) {
collector.collect(new Tuple2(token, 1));
}
}
}
}
}


简略阐明一下,上面呈现了 SocketTextStream 套接字字符 数据源(Source),接着是 算子(Operator):FlatMap(一个输入源,能够输出零个或多个成果)、KeyBy(依照某字段或许 tuple 元组中某个下标进行分类) 和 sum(跟翻译相同,便是进行聚合汇总) ,最终输出

2、敞开 tcp 长链接

为了模仿流数据,咱们造的场景是不断往 9000 端口输入字符,Flink 程序增加的数据源是 SocketTextStream (套接字字符流)。

在你的终端中输入以下指令

$ nc -l 9000

有关 netcat 指令的用法,请看参考资料第二条,这儿的作用便是翻开 TCP 长链接,监听 9000 端口

3、发动 Flink 程序

方才第一个进程中,现已修正好了程序代码,第二个进程也现已发动了一个 TCP 客户端,发动 Flink 程序有两种办法:

3.1、本地调试

运用 IDEA 的优点许多,代码补全,语法检查和快捷键之类的。我常常运用的调试办法便是增加一个 psvm 的 main 办法,在里面写履行代码,最终点击绿色的发动按钮~



假如不需要调试,想直接看成果,挑选第一个 Run,但有时不确定代码履行进程和犯错的详细原因,能够经过第二个选项 Debug 进行调试。

这是本地开发常常运用的办法,进行成果的验证。

3.2、提交到 JobManager

前面咱们发动的是单机集群版,发动了一个 JobManager 和 TaskWorker,翻开的 localhost:8081 便是 JobManager 的监控面板,所以咱们要经过下面的办法,将 Flink程序提交到 JobManager。

这儿教一个简略的办法,咱们经过 mvn clean package 进行打包后,能够在 IDEA 集成的终端标签栏下提交咱们的程序:



因为每个人的绝对途径都不相同,所以咱们经过 IDEA 的终端,它会主动定位到项目的途径,然后履行时填写相对途径的 jar 包姓名即可

$ flink run -c cn.sevenyuan.wordcount.SocketTextStreamWordCount target/flink-quick-start-1.0-SNAPSHOT.jar

-c 参数是指定运转的主程序进口,接着咱们去检查监控面板,能够发现使命状况现已处于监控中:

顶部信息讲的是运转程序姓名、时刻、时刻线、装备参数等信息,底下 Name 一栏,阐明该程序逻辑进程(读取数据源,进行映射处理,运用 keyBy 和聚合运算,最终输出到【打印 sink】)

4、输入数据 & 验证成果

前面验证了程序正常发动,接下来咱们来验证输入和输出

先来监听输出,进入 Flink 的日志目录,接着经过 tail 指令监听使命履行者 TaskWorkder(默许会发动一个使命履行者,所以编码为 0) 的日志输出

$ usr/local/Cellar/apache-flink/1.9.0/liFlink:你绕不过去的 Hello Worldbexec/log
$ tail -400f flink*-taskexecutor-0*.out

接着,在 nc -l 9000 对应的终端窗口中输入如下数据:

$ nc -l 9000
hello world
test world
test hello
hello my world

最终就能够看到以下输出成果:

(hello,1)
(world,1)
(test,1)
(world,2)
(test,2)
(hello,2)
(hello,3)
(my,1)
(world,3)

每行字符以空格进行切割,然后别离进行汇总计算,得到的输出成果共同。

扩展阅读

假如你在官网阅读,应该也曾看到过 TimeWindow 时刻窗口的比如,下面是 Demo 代码

public class SocketWindowWordCount {
public static void main(String[] args) throws Exception {
// the port to connFlink:你绕不过去的 Hello Worldect to
String hostName = "127.0.0.1";
int port = 9000;
// get the execution environment
final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// get input data by connecting to the socket
DataStream text = env.socketTextStream("localhost", port, "\n");
// parse the data, group it, window it, and aggregate the counts
DataStream windowCounts = text
.flatMap(new FlatMapFunction() {
@Override
public void flatMap(String value, Collector out) {
for (String word : value.split("\\s")) {
out.collect(new WordWithCount(word, 1L));
}
}
})
.keyBy("word")
.timeWindow(Time.seconds(5), Time.seconds(1))
.reduce(new ReduceFunction() {
@Override
public WordWithCount reduce(WordWithCount a, WordWithCount b) {
return new WordWithCount(Flink:你绕不过去的 Hello Worlda.getWord(), a.getCount() + b.getCount());
}
});
// print the results with a single thread, rather than in parallel
windowCounts.print().setParallelism(1);
env.execute("Socket Window WordCount");
}
}

这儿的程序代码中心点在于,比之前的多了一个算子 timeWindow,并且有两个参数,别离是时刻窗口巨细以及滑动窗口巨细(Time size, Time slide),下面是简略的输入和输出示意图:

因为滑动窗口巨细是 1s,窗口是有重合的部分,然后每秒计算自己地点窗口的数据(5s 内传输过来的数据),能够看到第 6s 时,现已放弃掉第 0s 输入的字符串数据。

小伙伴们也能够修正一下时刻窗口巨细和滑动窗口巨细,然后输入自定义的数据,进行不同参数的设置,看下输出作用怎么,是否有到达自己的预期。

这儿先开始触摸一下 时刻(Time)和窗口(Window)概念,之后渐渐触摸逐渐加深了解吧。


总结

本文根据 Mac 体系、 Apache Flink 1.9 版别进行了项目搭建和 Demo 编写,介绍了 Suorce -> Transformation -> Sink 的流程。简略的完成了一个字符计数器,往套接字数据源 SocketTextStream,连绵不断的输入,然后进行计算呈现的次数,如有疑问或不对之处请与我评论~


项目地址

https://github.com/Vip-Augus/flink-learning-note[2]

git clone https://github.com/Vip-Augus/flink-learning-note


原文:https://mp.weixin.qq.com/s/lz4igq815ZUK14rcZcHc1g

作者:惊讶

来历:微信大众号

版权所有:洛阳市建设工程咨询有限责任公司 联系人:李经理 电话: 地址:洛阳市洛龙区开元大道219号2幢1-2522、2501、2502、2503、2504、2505室
版权所有 爱乐透竟彩足球 鄂ICP备133619384号-1