文章目录
1. FLINK简述
Apache Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。Flink被设计在所有常见的集群环境中运行,以内存执行速度和任意规模来执行计算。
流的世界观
流处理的特点是无界、实时, 无需针对整个数据集执行操作,而是对通过系统传输的每个数据项执行操作,一般用于实时统计。
无界数据流:无界数据流有一个开始但是没有结束,它们不会在生成时终止并提供数据,必须连续处理无界流,也就是说必须在获取后立即处理event。对于无界数据流我们无法等待所有数据都到达,因为输入是无界的,并且在任何时间点都不会完成。处理无界数据通常要求以特定顺序(例如事件发生的顺序)获取event,以便能够推断结果完整性。
有界数据流:有界数据流有明确定义的开始和结束,可以在执行任何计算之前通过获取所有数据来处理有界流,处理有界流不需要有序获取,因为可以始终对有界数据集进行排序,有界流的处理也称为批处理。
1.1 FLINK架构组成介绍
1.1.1 Flink的整体架构
Flink运行时架构主要包括四个不同的组件,它们会在运行流处理应用程序时协同工作:作业管理器(JobManager)、资源管理器(ResourceManager)、任务管理器(TaskManager),以及分发器(Dispatcher)。因为Flink是用Java和Scala实现的,所以所有组件都会运行在Java虚拟机上。每个组件的职责如下:
作业管理器(JobManager)
控制一个应用程序执行的主进程,也就是说,每个应用程序都会被一个不同的JobManager所控制执行。JobManager会先接收到要执行的应用程序,这个应用程序会包括:作业图(JobGraph)、逻辑数据流图(logical dataflow graph)和打包了所有的类、库和其它资源的JAR包。JobManager会把JobGraph转换成一个物理层面的数据流图,这个图被叫做“执行图”(ExecutionGraph),包含了所有可以并发执行的任务。JobManager会向资源管理器(ResourceManager)请求执行任务必要的资源,也就是任务管理器(TaskManager)上的插槽(slot)。一旦它获取到了足够的资源,就会将执行图分发到真正运行它们的TaskManager上。而在运行过程中,JobManager会负责所有需要中央协调的操作,比如说检查点(checkpoints)的协调。
资源管理器(ResourceManager)
主要负责管理任务管理器(TaskManager)的插槽(slot),TaskManger插槽是Flink中定义的处理资源单元。Flink为不同的环境和资源管理工具提供了不同资源管理器,比如YARN、Mesos、K8s,以及standalone部署。当JobManager申请插槽资源时,ResourceManager会将有空闲插槽的TaskManager分配给JobManager。如果ResourceManager没有足够的插槽来满足JobManager的请求,它还可以向资源提供平台发起会话,以提供启动TaskManager进程的容器。另外,ResourceManager还负责终止空闲的TaskManager,释放计算资源。
任务管理器(TaskManager)
Flink中的工作进程。通常在Flink中会有多个TaskManager运行,每一个TaskManager都包含了一定数量的插槽(slots)。插槽的数量限制了TaskManager能够执行的任务数量。启动之后,TaskManager会向资源管理器注册它的插槽;收到资源管理器的指令后,TaskManager就会将一个或者多个插槽提供给JobManager调用。JobManager就可以向插槽分配任务(tasks)来执行了。在执行过程中,一个TaskManager可以跟其它运行同一应用程序的TaskManager交换数据。
分发器(Dispatcher)
可以跨作业运行,它为应用提交提供了REST接口。当一个应用被提交执行时,分发器就会启动并将应用移交给一个JobManager。由于是REST接口,所以Dispatcher可以作为集群的一个HTTP接入点,这样就能够不受防火墙阻挡。Dispatcher也会启动一个Web UI,用来方便地展示和监控作业执行的信息。Dispatcher在架构中可能并不是必需的,这取决于应用提交运行的方式。
1.1.2 任务提交流程
FLink基本的提交流程如下:
上图是从一个较为高层级的视角,来看应用中各组件的交互协作。如果部署的集群环境不同(例如YARN,Mesos,Kubernetes,standalone等),其中一些步骤可以被省略,或是有些组件会运行在同一个JVM进程中。
1.2 FLINK特点
Flink的主要特性
- 事件驱动型:从一个或多个事件流提取数据,并根据到来的事件触发计算、状态更新或其他外部动作
- 流的世界观:不同于spark的批处理,flink采用流的世界观,分为有界流和无界流。
- 分层api:Flink提供了三层API。 每个API在简洁性和表达性之间提供了不同的权衡,并且针对不同的用例。
1.3 FLINK各个实例通信网络端口
端口名称 | 默认端口 | 说明 |
---|---|---|
jobmanager.rpc.port | 6123 | jobmanager的端口 |
rest.port | 8081 | Flink WebUI |
historyserver.web.port | 8082 | 历史服务端口 |
1.4 中间件版本选取
中间件名称 | 版本号 |
---|---|
CentOS | CentOS 6.8 |
Java | 1.8.0_121 |
Flink | flink-1.7.2-bin-hadoop27-scala_2.11.tgz |
Zookeeper | 3.4.10 |
Kafka | 0.11 |
Scala | 2.11 |
Hadoop | 2.4.2 |
mysql | 5.6.24 |
2 FLINK部署
2.1 环境准备
本次Flink技术实践采用standalone模式,在VM虚拟机上部署3台服务器。分别是hadoop102、hadoop103、hadoop104
2.1.1 CentOS6.8
CentOS6.8安装过程省略。预先创建用户/用户组zhouchen
2.1.2 关闭防火墙-root
针对CentOS7以下
1.查看防火墙状态
service iptables status
2.停止防火墙
service iptables stop
3.启动防火墙
service iptables start
2.1.3 关闭swap
1.查看swap
[root@Hadoop102 opt]# free
[root@Hadoop102 opt]# cat /proc/vmstat | egrep "dirty|writeback"
[root@Hadoop102 opt]# sysctl -w vm.swappiness=0
2.关闭swap
[root@Hadoop102 opt]# echo "vm.swappiness = 0">> /etc/sysctl.conf
[root@Hadoop102 opt]# swapoff -a
3.检查swap关闭
2.1.4 Hostname设置
[root@hadoop102 ~]$ hostname -s
hadoop102
[root@hadoop103 ~]$ hostname -s
hadoop103
[root@hadoop104 ~]$ hostname -s
hadoop104
2.1.5 安装jdk1.8
- 解压jdk1.8的安装包,并配置JAVA的环境变量
[root@hadoop102 ~]# vi /etc/profile.d/jdk.sh
#JAVA_HOME
export JAVA_HOME=/opt/java/jdk1.8.0_121
export JRE_HOME=$JAVA_HOME/jre
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
- 添加环境变量,刷新文件使其生效
[root@hadoop102 ~]$ /etc/profile.d/jdk.sh
- 查阅是否安装成功
2.1.6 安装mysql
-
下载mysql rpm包到/opt/package
-
安装mysql服务端
[root@hadoop102 package]# rpm -ivh MySQL-server-5.6.24-1.el6.x86_64.rpm
查看初始密码:
[root@hadoop102 mysql]# cat /root/.mysql_secret
查看mysql服务状态并启动
[root@hadoop102 package]# service mysqld status
##如果报错Unit mysqld.service could not be found.请查找mysql.server然后复制到/etc/init.d/mysqld
[root@hadoop102 mysql]# cp mysql.server /etc/init.d/mysqld
- 安装mysql客户端
[root@Hadoop102 package]# rpm -ivh MySQL-client-5.6.24-1.el6.x86_64.rpm
使用查询到的初始密码登陆客户端
[root@Hadoop102 package]# mysql -uroot -pMabbdrdTaRv0Gywq
修改密码:
mysql> SET PASSWORD=PASSWORD('zhou59420');
2.1.7 修改linux内核配置
- 切换到root用户
vim /etc/sysctl.conf
- 添加配置
#清除cache/buffer
vm.drop_caches=3
#更改虚拟内存大小和能够打开的文件句柄的数量
vm.max_map_count=655360
fs.file-max=655360
- 使配置生效
sysctl -p
2.2 FLINK安装
2.2.1 环境检查
- 检查Java版本,$JAVA_HOME
- 检查hadoop版本
2.2.2 standalone模式安装
- 解压安装包
解压缩 flink-1.10.0-bin-scala_2.11.tgz - 修改配置文件
修改flink/conf/flink-conf.yaml 文件
修改conf/slave文件添加另外两台机器(注意不要有空格空行)
- 分发给另外两台机器
- 启动flink
2.2.3 安装检查
-
查看进程
-
界面访问
http://Hadoop102:8081/