【Flink】搭建单机环境

搭建单机版环境

一 安装环境

搭建一个单机版的运行环境
环境:Ubuntu 18

  1. 下载不带Hadoop组件的Flink程序包
    这里按下载最新:Apache Flink 1.8.0 for Scala 2.11 (asc, sha512)
    官网地址:https://flink.apache.org/downloads.html#apache-flink-180

  2. 解压运行

tar xzf flink-1.8.0-bin-scala_2.11.tgz

cd flink-1.8.0/

sudo ./bin/start-cluster.sh

在这里插入图片描述

启动完成后,打开localhost:8081可看到 WebUI

【Flink】搭建单机环境_第1张图片

同时在log目录下,会生成对应日志
可通过这个查看
例如:tail log/flink-root-standalonesession-0-donald-pro.log



二 运行 SocketWindowWordCount 程序

参考官网教程:https://ci.apache.org/projects/flink/flink-docs-release-1.8/tutorials/local_setup.html

(1)启动一个端口号为 9000 的 Socket server

nc -l 9000

【Flink】搭建单机环境_第2张图片

Linux nc命令用于设置路由器。

命令相关可查看:http://www.runoob.com/linux/linux-comm-nc.html


(2)运行 SocketWindowWordCount 应用程序

sudo ./bin/flink run examples/streaming/SocketWindowWordCount.jar --port 9000

【Flink】搭建单机环境_第3张图片

查看输出结果
tail -f log/flink-root-taskexecutor-0-donald-pro.out

【Flink】搭建单机环境_第4张图片

SocketWindowWordCount 应用程序根据处理时间开滚动窗口,每秒计算一次窗口接收单词的次数

object SocketWindowWordCount {

    def main(args: Array[String]) : Unit = {

        // the port to connect to
        val port: Int = try {
            ParameterTool.fromArgs(args).getInt("port")
        } catch {
            case e: Exception => {
                System.err.println("No port specified. Please run 'SocketWindowWordCount --port '")
                return
            }
        }

        // get the execution environment
        val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment

        // get input data by connecting to the socket
        val text = env.socketTextStream("localhost", port, '\n')

        // parse the data, group it, window it, and aggregate the counts
        val windowCounts = text
            .flatMap { w => w.split("\\s") }
            .map { w => WordWithCount(w, 1) }
            .keyBy("word")
            .timeWindow(Time.seconds(5), Time.seconds(1)) // 
            .sum("count")

        // print the results with a single thread, rather than in parallel
        windowCounts.print().setParallelism(1)

        env.execute("Socket Window WordCount")
    }

    // Data type for words with count
    case class WordWithCount(word: String, count: Long)
}

timeWindow 为开窗机制
如果应用程序的时间特征为事件时间,则开长度为5秒的事件时间窗口,否则开长度位1秒的处理时间窗口


(3) 配置IDEA

使用MavenFlink官网下载应用程序工程模板

mvn archetype:generate \
-DarchetypeGroupId=org.apache.flink \
-DarchetypeArtifactId=flink-quickstart-scala \
-DarchetypeVersion=1.8.0 \
-DgroupId=com.deepmind.flink \
-DartifactId=QuickStart \
-Dversion="1.0-SNAPSHOT" \
-DinteractiveMode=false; # 设置为Batch模式

【Flink】搭建单机环境_第5张图片

该工程有两个案例,分别为:

  1. 批处理应用程序 BatchJob
  2. 流处理应用程序 StreamingJob

你可能感兴趣的:(Flink)