StreamExecutionEnvironment、Flink程序步骤

知识点

StreamExecutionEnvironment

参考文档

Flink 中你可以使用 StreamExecutionEnvironment.addSource(sourceFunction) 来为你的程序添加数据来源。

Flink 已经提供了若干实现好了的 source functions,当然你也可以通过实现 SourceFunction 来自定义非并行的 source 或者实现 ParallelSourceFunction 接口或者扩展 RichParallelSourceFunction 来自定义并行的 source。

StreamExecutionEnvironment 中可以使用以下几个已实现的 stream sources

  • 基于集合

    1. fromCollection(Collection) - 从 Java 的 Java.util.Collection 创建数据流。集合中的所有元素类型必须相同。
    2. fromCollection(Iterator, Class) - 从一个迭代器中创建数据流。Class 指定了该迭代器返回元素的类型。
    3. fromElements(T …) - 从给定的对象序列中创建数据流。所有对象类型必须相同。、
    4. fromParallelCollection(SplittableIterator, Class) - 从一个迭代器中创建并行数据流。Class 指定了该迭代器返回元素的类型。
    5. generateSequence(from, to) - 创建一个生成指定区间范围内的数字序列的并行数据流。
  • 基于文件

    1. readTextFile(path) - 读取文本文件,即符合 TextInputFormat 规范的文件,并将其作为字符串返回。

    2. readFile(fileInputFormat, path) - 根据指定的文件输入格式读取文件(一次)。

    3. readFile(fileInputFormat, path, watchType, interval, pathFilter, typeInfo) - 这是上面两个方法内部调用的方法。它根据给定的 fileInputFormat 和读取路径读取文件。根据提供的 watchType,这个 source 可以定期(每隔 interval 毫秒)监测给定路径的新数据(FileProcessingMode.PROCESS_CONTINUOUSLY),或者处理一次路径对应文件的数据并退出(FileProcessingMode.PROCESS_ONCE)。你可以通过 pathFilter 进一步排除掉需要处理的文件。

  • 基于Socket

    socketTextStream(String hostname, int port) - 从 socket 读取。元素可以用分隔符切分。

数据集和数据流(DataSet and DataStream )

Flink使用DataSetDataStream这两个特殊的类来表示程序中的数据,你可以将它们想象成一个包含重复数据的不可变数据集合,其中DataSet的数据是有限的而DataStream中的数据个数则是无限的。

Flink程序步骤

  1. 获取一个execution environment

  2. 拉取或者创建一个初始数据集

  3. 指定数据集的转换操作

  4. 指定计算结果保存在哪

  5. 触发程序执行

一旦你的程序已经完成,你需要调用StreamExecutionEnvironment中的execute()方法来触发程序的执行。根据ExecutionEnvironment的类型不同,程序可能在本地触发执行或者将程序分发到集群中去执行。
execute()方法返回JobExecutionResult结果,JobExecutionResult包含了执行次数以及累加器的结果。

所有的Flink程序都是延迟计算的:当程序的main方法执行的时候,数据的加载及transformation操作都不会直接的执行。相反,所有的操作的创建及执行都是添加到程序的执行计划中,所有的操作都是在ExecutionEnvironment(执行环境)调用execute()方法触发执行后才真正的去执行。而程序是在本地执行还是在集群中执行取决于ExecutionEnvironment(执行环境)的类型。

分组

  • DataSet可以按如下方式进行分组处理:

    DataSet<...> input = // [...]
    DataSet<...> reduced = input
      .groupBy(/*define key here*/)
      .reduceGroup(/*do something*/);
    
  • DataStream则可以按以下方式进行分组处理:

    DataStream<...> input = // [...]
    DataStream<...> windowed = input
      .keyBy(/*define key here*/)
      .window(/*window specification*/);
    

kafka

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将Spring Boot和Flink结合使用,可以按照以下步骤进行: 1. 在Spring Boot应用程序中添加Flink的依赖。可以在`pom.xml`文件中添加Flink的相关依赖,例如: ```xml <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-java</artifactId> <version>${flink.version}</version> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-streaming-java_2.11</artifactId> <version>${flink.version}</version> </dependency> ``` 2. 创建Flink的流处理程序。可以使用Flink的Java API编写数据处理代码,并在Spring Boot应用程序中调用该代码。例如: ```java StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); DataStream<String> stream = env.socketTextStream("localhost", 9999); DataStream<Tuple2<String, Integer>> counts = stream.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() { @Override public void flatMap(String value, Collector<Tuple2<String, Integer>> out) { for (String word : value.split("\\s")) { out.collect(new Tuple2<>(word, 1)); } } }).keyBy(0).sum(1); counts.print(); env.execute("Word Count"); ``` 在上面的代码中,我们使用Flink的Java API创建了一个简单的单词计数程序,可以从本地的9999端口接收输入数据,并输出单词计数结果。然后,我们使用`env.execute()`方法来启动该程序。 3. 在Spring Boot应用程序中添加REST API,以便管理和监视Flink流处理程序。可以使用Spring Boot的`@RestController`注解来创建REST API,例如: ```java @RestController @RequestMapping("/flink") public class FlinkController { @Autowired private StreamExecutionEnvironment env; @RequestMapping("/start") public String start() throws Exception { DataStream<String> stream = env.socketTextStream("localhost", 9999); DataStream<Tuple2<String, Integer>> counts = stream.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() { @Override public void flatMap(String value, Collector<Tuple2<String, Integer>> out) { for (String word : value.split("\\s")) { out.collect(new Tuple2<>(word, 1)); } } }).keyBy(0).sum(1); counts.print(); env.execute("Word Count"); return "Flink job started."; } } ``` 在上面的代码中,我们创建了一个`FlinkController`类,并在其中添加了一个`start()`方法,该方法可以启动我们之前创建的Flink流处理程序。然后,我们使用Spring Boot的`@RestController`和`@RequestMapping`注解将该方法暴露为REST API,可以通过`/flink/start`路径来访问该API。 4. 在Spring Boot应用程序中添加Web界面,以便监视和管理Flink流处理程序。可以使用Spring Boot的Thymeleaf模板引擎来创建Web界面,例如: ```html <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Spring Boot + Flink</title> </head> <body> <h1>Spring Boot + Flink</h1> <form method="POST" action="/flink/start"> <button type="submit">Start Flink Job</button> </form> </body> </html> ``` 在上面的代码中,我们创建了一个简单的HTML页面,其中包含一个“Start Flink Job”按钮,可以用于启动我们之前创建的Flink流处理程序。我们使用Thymeleaf的模板语法来生成HTML页面。 通过以上步骤,我们就可以将Spring Boot和Flink结合使用,创建一个实时数据处理应用程序,并在Spring Boot应用程序中添加Web界面和REST API,以便监视和管理Flink流处理程序

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值