flink入门第一课

2019-01-16  本文已影响0人  打怪兽的黄小妹

1.什么是flink

        flink官网的解释是:Apache Flink is a framework and distributed processing engine for stateful computations over unbounded and bounded data streams. Flink has been designed to run in all common cluster environments, perform computations at in-memory speed and at any scale。

        即:flink是一个分布式的处理无限(无边界)或者有限(有边界)流数据的有状态的框架。它可以在任何规模的集群环境中运行,工作状态优先存在内存中,当内存空间不够时,继续往磁盘存储,所以计算速度非常快,是一个实时的流计算框架。

       我们的现实生活中几乎所有的数据都可以成为是流数据,比如信用卡交易数据、传感器测量数据、机器日志数据或者用户在网页上的交互数据。无边界数据是指有起点而没有终点的数据,它们必须被连续的处理。有边界的数据有终点,它们可以被存储下来集中处理,对有边界数据的处理成为“批处理”。下图可以清晰的展示有边界数据和无边界数据的区别。

有边界和无边界数据

      Flink既可以处理有边界数据也可以处理无边界数据。并且flink使用同一个引擎处理这两种数据。

2.flink的安装与运行

    2.1 提前需求:Java1.8及以上版本

    2.2 安装:brew install apache-flink

    2.3 检查是否安装成功:flink --version

    2.4 启动一个本地flink集群:./bin/start-cluster.sh(/usr/local/Cellar/apache-flink/1.7.1/libexec目录下)

    2.5 浏览器输入:http://localhost:8081检查集群是否启动成功

本地集群启动成功

3.第一个flink程序(WordCount)

    3.1 Idea中创建一个maven项目

    3.2 pom文件中加入flink的依赖:

          </dependency>

            <groupId>org.apache.flink</groupId>

            <artifactId>flink-streaming-java_2.12</artifactId>

            <version>1.7.1</version>

            <scope>provided</scope>

        </dependency>

    3.3 复制 flink git项目中wordcount代码(该代码逻辑请自行学习,此处不再详述)

        代码地址:https://github.com/apache/flink/blob/master/flink-examples/flink-examples-streaming/src/main/java/org/apache/flink/streaming/examples/socket/SocketWindowWordCount.java

    3.4 进入项目目录下打包:maven package

    3.5 在flink集群上运行程序

        3.5.1 使用netcat监听9000端口:$ nc -l 9000

        3.5.2 运行项目:(注:启动时,一定要写全主类的全路径,否则会出现报错,详见后面)

            $ flink run --class com.hui.learn.SocketWindowWordCount /Users/didi/IdeaProjects/flinklearn/target/flink-learn-1.0-SNAPSHOT.jar --port 9000

            此时,会在flink的监控页面出现任务信息:

任务运行信息

        3.5.3 在9000端口下输入以下信息:

            $ nc -l 9000

                what is is you r name

            此时,flink监控界面每5s钟读取页面的输入流,并对单词进行计数,结果将输出到:log/flink-*-taskexecutor-*.out文件中,查看结果:

wordcount输出结果

    3.6 停止集群:$ ./bin/stop-cluster.sh

4.异常分析:

    4.1 $ flink run /Users/didi/IdeaProjects/flinklearn/target/flink-learn-1.0-SNAPSHOT.jar --port 9000

        异常:org.apache.flink.client.program.ProgramInvocationException: Neither a 'Main-Class', nor a 'program-class' entry was found in the jar file.未指定主类异常,将主类加上:

    4.2 $ flink run --class SocketWindowWordCount /Users/didi/IdeaProjects/flinklearn/target/flink-learn-1.0-SNAPSHOT.jar --port 900

        异常:org.apache.flink.client.program.ProgramInvocationException: The program's entry point class 'SocketWindowWordCount' was not found in the jar file.提示找不到该主类,将主类全路径写上:

    4.3 $ flink run --class com.hui.learn.SocketWindowWordCount /Users/didi/IdeaProjects/flinklearn/target/flink-learn-1.0-SNAPSHOT.jar --port 9000

        Bingo!!!启动成功!!!!

5.查看任务列表

任务列表

6.取消任务(根据任务ID)

取消任务
上一篇 下一篇

猜你喜欢

热点阅读