大型分布式系统监控平台(六)-- 第一个flink应用topN

聊的不止技术。跟着小帅写代码,还原和技术大牛一对一真实对话,剖析真实项目筑成的一砖一瓦,了解最新最及时的资讯信息,还可以学到日常撩妹小技巧哦,让我们开始探索主人公小帅的职场生涯吧!

(PS:本系列文章以幽默风趣风格为主,较真侠和学习怪请绕道~)

 

小帅:“老胡真忙!”

江华:“他不是忙 ,他只是不想搭理逗比。”

小帅:“......”

小帅:“老胡都不教一下我这个TopN怎样写。”

江华:“难道没有他,你还蠢到生活不能自理了?多难的事,自己上网抄一个不就行了呗。”

小帅:“......好吧。”

江华:“maven 工程会搭建吧,看在你这么蠢的份上,我可以略指点一二。”

小帅:“......”

(明明这么好的人,为什么就不能好好说话。)

 

1、新建工程。

大型分布式系统监控平台(六)-- 第一个flink应用topN_第1张图片

 

2、编辑pom文件,增加flink依赖。

        
        
            org.apache.flink
            flink-streaming-java_2.12
            1.8.1
            provided
        

        
            org.apache.flink
            flink-core
            1.8.1
        

 

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 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(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、运行项目。

小帅:“好像不行啊,报错了。”

大型分布式系统监控平台(六)-- 第一个flink应用topN_第2张图片

江华:“检查下maven依赖,你拷别人的代码,是不是把scope也复制了?去掉了看看。”

小帅:“神了,老江!跑起来了。等等,又报错了。”

大型分布式系统监控平台(六)-- 第一个flink应用topN_第3张图片

江华:“......你脖子上面那个东西是用来装饰的吧。”

小帅:“你说是脖子上戴的吗?那是貔貅,辟邪招财的,嘿嘿嘿。不过这个跟报错有什么关系?”

江华:“......(深呼吸)请你把netcat跑起来。”

小帅:“哦哦。”

 

江华:“噼里啪啦的,你在玩啥呢?”

小帅:“启动netcat啊,我看网上说,要进入到解压的目录执行,Windows 的cmd不好使,得cd个半天。”

江华:“你直接按着shift,然后点鼠标右键--从此处选择打开命令窗口,这不就行了。”

小帅:“666,厉害了,江爷!真心牛逼。”

 

(1)执行命令 nc -l -p 9888

 

大型分布式系统监控平台(六)-- 第一个flink应用topN_第4张图片

(2)Idea右键启动项目。

(3)在netcat窗口随便输入字符。

大型分布式系统监控平台(六)-- 第一个flink应用topN_第5张图片

(4)IDEA 控制台实时输出统计结果。

大型分布式系统监控平台(六)-- 第一个flink应用topN_第6张图片

 

5、后记。

小帅:“总算跑起来了,不容易啊!对了,老江,刚才那个maven的scope去掉就能跑起来,这是为什么啊?”

 

        
        
            org.apache.flink
            flink-streaming-java_2.12
            1.8.1
            
        

        
            org.apache.flink
            flink-core
            1.8.1
        

    

江华:“自己去百度啊,你没看到报class not found么?provided的意思就是运行的时候提供的依赖,你没flink集群跑肯定是没有人给你提供这个jar的。”

小帅:“soga。谢谢啦老江。小檬今天来加班,我去陪陪她。告辞。”

江华:“说得这么好听,你这是偷窥吧。”

小帅:“......”

你可能感兴趣的:(flink,java)