Flink JobManger包含3个不同的组件

(1)JobMaster
(2)资源管理器(ResourceManager)
(3)分发器(Dispatcher)

1)作业管理器(JobManager)
JobManager是一个Flink集群中任务管理和调度的核心,是控制应用执行的主进程。也就是说,每个应用都应该被唯一的JobManager所控制执行。
JobManger又包含3个不同的组件。
(1)JobMaster
JobMaster是JobManager中最核心的组件,负责处理单独的作业(Job)。所以JobMaster和具体的Job是一一对应的,多个Job可以同时运行在一个Flink集群中, 每个Job都有一个自己的JobMaster。需要注意在早期版本的Flink中,没有JobMaster的概念;而JobManager的概念范围较小,实际指的就是现在所说的JobMaster。
在作业提交时,JobMaster会先接收到要执行的应用。JobMaster会把JobGraph转换成一个物理层面的数据流图,这个图被叫作“执行图”(ExecutionGraph),它包含了所有可以并发执行的任务。JobMaster会向资源管理器(ResourceManager)发出请求,申请执行任务必要的资源。一旦它获取到了足够的资源,就会将执行图分发到真正运行它们的TaskManager上。
而在运行过程中,JobMaster会负责所有需要中央协调的操作,比如说检查点(checkpoints)的协调。
(2)资源管理器(ResourceManager)
ResourceManager主要负责资源的分配和管理,在Flink 集群中只有一个。所谓“资源”,主要是指TaskManager的任务槽(task slots)。任务槽就是Flink集群中的资源调配单元,包含了机器用来执行计算的一组CPU和内存资源。每一个任务(Task)都需要分配到一个slot上执行。
这里注意要把Flink内置的ResourceManager和其他资源管理平台(比如YARN)的ResourceManager区分开。
(3)分发器(Dispatcher)
Dispatcher主要负责提供一个REST接口,用来提交应用,并且负责为每一个新提交的作业启动一个新的JobMaster 组件。Dispatcher也会启动一个Web UI,用来方便地展示和监控作业执行的信息。Dispatcher在架构中并不是必需的,在不同的部署模式下可能会被忽略掉。

系统架构

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,以下是一个简单的 Apache Flink 程序的样例代码: ``` import org.apache.flink.streaming.api.datastream.DataStream; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; public class FlinkExample { public static void main(String[] args) throws Exception { // 创建执行环境 StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); // 创建数据流 DataStream<String> dataStream = env.fromElements("Hello", "Flink", "Streaming"); // 数据流的转换操作 DataStream<String> result = dataStream .map(word -> word.toUpperCase()) .filter(word -> word.length() > 4) .print(); // 执行程序 env.execute("Flink Example"); } } ``` 这是一个简单的 Flink 程序,利用了 `map` 和 `filter` 操作对数据流进行转换,最终使用 `print` 操作将结果打印到控制台。 ### 回答2: 下面是一个简单的Flink组件的样例代码,该代码展示了如何使用Flink实现一个WordCount的功能: ```java import org.apache.flink.api.common.functions.FlatMapFunction; import org.apache.flink.api.java.tuple.Tuple2; import org.apache.flink.streaming.api.datastream.DataStream; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.util.Collector; public class WordCount { public static void main(String[] args) throws Exception { // 设置执行环境 StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); // 创建数据流 DataStream<String> text = env.socketTextStream("localhost", 9999); // 对数据流进行转换操作 DataStream<Tuple2<String, Integer>> counts = text .flatMap(new Tokenizer()) .keyBy(0) .sum(1); // 打印结果 counts.print(); // 执行任务 env.execute("WordCount"); } public static final class Tokenizer implements FlatMapFunction<String, Tuple2<String, Integer>> { @Override public void flatMap(String value, Collector<Tuple2<String, Integer>> out) { // 将输入字符串拆分为单词 String[] words = value.toLowerCase().split("\\W+"); // 发出每个单词的计数为1 for (String word : words) { if (word.length() > 0) { out.collect(new Tuple2<>(word, 1)); } } } } } ``` 上述代码中,首先通过`StreamExecutionEnvironment.getExecutionEnvironment()`方法获取Flink的执行环境。然后调用`socketTextStream("localhost", 9999)`方法创建一个输入的数据流,该数据流来自本地主机的9999端口。接着,使用`flatMap()`方法对数据流进行转换操作,把每一行文本拆分为单词并计数为1。接下来,使用`keyBy(0)`方法根据单词进行分组,并使用`sum(1)`方法对相同单词的计数进行求和。最后,通过`print()`方法打印结果,并调用`env.execute("WordCount")`方法执行任务。 ### 回答3: 好的,下面是一个简单的 Flink 组件的样例代码: ```java import org.apache.flink.api.common.functions.FilterFunction; import org.apache.flink.api.java.tuple.Tuple2; import org.apache.flink.streaming.api.datastream.DataStream; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; public class FlinkComponentExample { public static void main(String[] args) throws Exception { // 创建一个执行环境 StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); // 从 socket 获取输入数据流 DataStream<String> dataStream = env.socketTextStream("localhost", 9999); // 将输入数据流解析为 Tuple2 对象 DataStream<Tuple2<String, Integer>> tupleStream = dataStream .flatMap((String line, Collector<Tuple2<String, Integer>> out) -> { String[] words = line.split(" "); for (String word : words) { if (word.length() > 0) { out.collect(new Tuple2<>(word, 1)); } } }) .returns(Types.TUPLE(Types.STRING, Types.INT)); // 对 Tuple2 数据流进行过滤,只保留长度大于等于 5 的单词 DataStream<Tuple2<String, Integer>> filteredStream = tupleStream .filter((FilterFunction<Tuple2<String, Integer>>) value -> value.f0.length() >= 5); // 输出过滤后的结果 filteredStream.print(); // 执行任务 env.execute("Flink Component Example"); } } ``` 这个样例代码实现了一个简单的 Flink 组件,实现了读取输入数据流、解析数据、过滤数据并输出过滤结果的功能。代码中使用了 Flink 的 DataStream API,通过创建执行环境、从 socket 获取输入数据流、对数据流进行转换和过滤等操作来实现所需功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值