聊的不止技术。跟着小帅写代码,还原和技术大牛一对一真实对话,剖析真实项目筑成的一砖一瓦,了解最新最及时的资讯信息,还可以学到日常撩妹小技巧哦,让我们开始探索主人公小帅的职场生涯吧!
(PS:本系列文章以幽默风趣风格为主,较真侠和学习怪请绕道~)
小帅:“老胡真忙!”
江华:“他不是忙 ,他只是不想搭理逗比。”
小帅:“......”
小帅:“老胡都不教一下我这个TopN怎样写。”
江华:“难道没有他,你还蠢到生活不能自理了?多难的事,自己上网抄一个不就行了呗。”
小帅:“......好吧。”
江华:“maven 工程会搭建吧,看在你这么蠢的份上,我可以略指点一二。”
小帅:“......”
(明明这么好的人,为什么就不能好好说话。)
1、新建工程。
2、编辑pom文件,增加flink依赖。
<!-- https://mvnrepository.com/artifact/org.apache.flink/flink-streaming-java -->
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-java_2.12</artifactId>
<version>1.8.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-core</artifactId>
<version>1.8.1</version>
</dependency>
3、新建类FlinkDemo.java,编写代码。
小帅:“我在网上找到一个例子,不过好像是用socket作为输入流的,我不太会欸。”
江华:“你先把代码贴出来看看。”
package com.mmc.flink.demo;
import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.common.functions.ReduceFunction;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.windowing.time.Time;
import org.apache.flink.util.Collector;
public class FlinkDemo {
public static void main(String[] args) throws Exception {
// the host and the port to connect to
final String hostname = "localhost";
final int port = 9888;
// get the execution environment
final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// get input data by connecting to the socket
DataStream<String> text = env.socketTextStream("localhost", port, "\n");
// parse the data, group it, window it, and aggregate the counts
DataStream<WordWithCount> windowCounts = text
.flatMap(new FlatMapFunction<String, WordWithCount>() {
@Override
public void flatMap(String value, Collector<WordWithCount> 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<WordWithCount>() {
@Override
public WordWithCount reduce(WordWithCount a, WordWithCount b) {
return new WordWithCount(a.word, a.count + b.count);
}
});
System.out.println("bbbbbbbbbbbbbbbbbbbbb");
// print the results with a single thread, rather than in parallel
windowCounts.print().setParallelism(1);
System.out.println("FlinkDemo.main aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
env.execute("Socket Window WordCount 666");
}
}
江华:“这个简单,用现成的工具netcat。”
小帅:“netcat 是啥?”
江华:“自己百度去。”
小帅:“netcat下载好了,然后呢?”
江华:“把项目跑起来啊!”
小帅:“在本地能直接跑起来么?”
江华:“......不好意思,我手机只剩下99%的电了,失陪!”
小帅:“别啊,江兄。组织需要你,国家需要你!”
4、运行项目。
小帅:“好像不行啊,报错了。”
江华:“检查下maven依赖,你拷别人的代码,是不是把scope也复制了?去掉了看看。”
小帅:“神了,老江!跑起来了。等等,又报错了。”
江华:“......你脖子上面那个东西是用来装饰的吧。”
小帅:“你说是脖子上戴的吗?那是貔貅,辟邪招财的,嘿嘿嘿。不过这个跟报错有什么关系?”
江华:“......(深呼吸)请你把netcat跑起来。”
小帅:“哦哦。”
江华:“噼里啪啦的,你在玩啥呢?”
小帅:“启动netcat啊,我看网上说,要进入到解压的目录执行,Windows 的cmd不好使,得cd个半天。”
江华:“你直接按着shift,然后点鼠标右键--从此处选择打开命令窗口,这不就行了。”
小帅:“666,厉害了,江爷!真心牛逼。”
(1)执行命令 nc -l -p 9888
(2)Idea右键启动项目。
(3)在netcat窗口随便输入字符。
(4)IDEA 控制台实时输出统计结果。
5、后记。
小帅:“总算跑起来了,不容易啊!对了,老江,刚才那个maven的scope去掉就能跑起来,这是为什么啊?”
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.flink/flink-streaming-java -->
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-java_2.12</artifactId>
<version>1.8.1</version>
<!--<scope>provided</scope>-->
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-core</artifactId>
<version>1.8.1</version>
</dependency>
</dependencies>
江华:“自己去百度啊,你没看到报class not found么?provided的意思就是运行的时候提供的依赖,你没flink集群跑肯定是没有人给你提供这个jar的。”
小帅:“soga。谢谢啦老江。小檬今天来加班,我去陪陪她。告辞。”
江华:“说得这么好听,你这是偷窥吧。”
小帅:“......”