flink架构
作业提交过程
Client提交作业,Dispather接受到作业,并启动JobMaster,JobMaster负责本次作业的协调工作JobMaster向ResoureManger提交资源申请,JobMaster将作业的逻辑视图转化为物理执行图,将计算任务分发到多个TaskManager;
JobManager
协调Flink作业的执行,有三个不同组件组成
- ResourceManager:Flink集群资源的提供,回收,分配,管理task slots,
- Dispatcher:提供REST接口,用来提交Flink作业,并启动一个新的JobMaster
- JobMaster:负责单个JobGrap的执行,每个作业都有自己的JobMaster
TaskManager
TaskManager也称为works,执行作业的task,并且缓存和交流数据;TaskManager中资源的最小调度单位为slot;slot的数量表示并发处理task的数量;
Task和算子链
算子子任务链接在一次,以任务(task)的形式被TaskManager执行;
Task Slots和资源
每个TaskManager都是一个jvm进程,可以在单独的线程执行一个或多个task,为了控制一个TaskManager中接受多少个task,就有了task slot;算子链作为一个子任务,可以共享slot;
安装
本地安装
- 安装java
- 下载flink并解压
https://flink.apache.org/zh/downloads/
- 启动集群
./bin/start-cluster.sh
- 提交作业
./bin/flink run examples/streaming/WordCount.jar
- 停止集群
./bin/stop-cluster.sh
集群安装
- 集权规划
一个master节点,三个worker节点,每个节点安装java,并设置ssh免密登录
- 配置文件
1、master节点下载flink安装包,并解压;
2、修改flink-yaml文件,将jobmanager.rpc.address配置为Master节点的IP地址192.168.0.1;编辑conf/workers文件,将192.168.0.2、192.168.0.3和192.168.0.4等Worker节点的IP地址加入该文件中。如果每个节点除了IP地址外,还配有主机名(Hostname),我们也可以用Hostname替代IP地址来做上述配置。
3、安装文件分发到各个worker节点;
- 启动集群
同本地集群一样
Yarn模式
-
先部署hadoop,并启动yarn
-
修改环境变量
export HADOOP_CLASSPATH=/home/hadoop-3.2.4/etc/hadoop:/home/hadoop-3.2.4/share/hadoop/common/lib/*:/home/hadoop-3.2.4/share/hadoop/common/*:/home/hadoop-3.2.4/share/hadoop/hdfs:/home/hadoop-3.2.4/share/hadoop/hdfs/lib/*:/home/hadoop-3.2.4/share/hadoop/hdfs/*:/home/hadoop-3.2.4/share/hadoop/mapreduce/lib/*:/home/hadoop-3.2.4/share/hadoop/mapreduce/*:/home/hadoop-3.2.4/share/hadoop/yarn:/home/hadoop-3.2.4/share/hadoop/yarn/lib/*:/home/hadoop-3.2.4/share/hadoop/yarn/*
export HADOOP_CONF_DIR=/home/hadoop-3.2.4/etc/hadoop
- Session模式
启动一个长期运行的Flink集群,用户可以提交多个作业
#启动Session
./bin/yarn-session.sh -jm 2048m -tm 1024m
#提交任务
./bin/flink run -m linux01:37780 ./examples/batch/WordCount.jar
- Per-Job模式
每次向yarn提交一个作业,yarn为这个作业单独分配资源
#Per-Job模式提交作业
./bin/flink run -m yarn-cluster ./examples/batch/WordCount.jar
- Application模式
./bin/flink run-application -t yarn-application \
-Djobmanager.memory.process.size=2048m \
-Dtaskmanager.memory.process.size=4096m \
./examples/batch/WordCount.jar