Flink的安装部署

Standalone集群安装

1.上传安装包到linux系统
使用rz命令/winscp
2.解压
tar –zxvf flink-1.5.0-bin-hadoop24-scala_2.11.tgz
3.修改配置文件
vim conf/flink-conf.yaml

jobmanager.rpc.address: master
jobmanager.rpc.port: 6123
jobmanager.heap.size: 1024m
taskmanager.heap.size: 1024m
taskmanager.numberOfTaskSlots: 2
taskmanager.memory.preallocate: false
parallelism.default: 1
jobmanager.web.port: 8081
taskmanager.tmp.dirs: /export/servers/flink-1.5.0/tmp

配置参数解释:
jobmanager.rpc.address: localhost JobManager的外部地址,它是分布式系统的主/协调器(DEFAULT:localhost)设置成你master节点的IP地址
jobmanager.rpc.port: 6123 JobManager的端口号(DEFAULT:6123)
jobmanager.heap.size: 1024m JobManager的默认JVM堆大小
taskmanager.heap.size: 1024m用于TaskManagers的JVM堆大小

taskmanager.numberOfTaskSlots: 1 每台机器可用的CPU数量(默认值:1)
taskmanager.memory.preallocate: false 是否进行预分配内存,默认不进行预分配,这样在我们不使用flink集群时候不会占用集群资源

parallelism.default: 1 指定程序的默认并行度
jobmanager.web.port: 8081 JobManager的Web界面的端口(默认:8081)
taskmanager.tmp.dirs:临时文件的目录

vim masters
master:8081

vim slaves
slave slave1
4.启动flink集群
方式一:
添加一个JobManager
bin/jobmanager.sh ((start|start-foreground) cluster)|stop|stop-all
添加一个TaskManager
bin/taskmanager.sh start|start-foreground|stop|stop-all

方式二:
bin/start-cluster.sh
bin/stop-cluster.sh

5.运行测试任务

bin/flink run /export/servers/flink-1.5.0/examples/batch/WordCount.jar --input /export/servers/zookeeper.out --output /export/servers/flink_data

集群的HA高可用

对于一个企业级的应用,稳定性是首要要考虑的问题,然后才是性能,因此 HA 机制是必不可少的;
和 Hadoop 一代一样,从架构中我们可以很明显的发现 JobManager 有明显的单点问题(SPOF,single point of failure)。 JobManager 肩负着任务调度以及资源分配,一旦 JobManager 出现意外,其后果可想而知。Flink 对 JobManager HA 的处理方式,原理上基本和 Hadoop 一样;
对于 Standalone 来说,Flink 必须依赖于 Zookeeper 来实现 JobManager 的 HA(Zookeeper 已经成为了大部分开源框架 HA 必不可少的模块)。在 Zookeeper 的帮助下,一个 Standalone 的 Flink 集群会同时有多个活着的 JobManager,其中只有一个处于工作状态,其他处于 Standby 状态。当工作中的 JobManager 失去连接后(如宕机或 Crash),Zookeeper 会从 Standby 中选举新的 JobManager 来接管 Flink 集群。
(当然,对于flink的集群模式来说,除了standalone外,还有yarn cluster模式,这种模式的在hadoop节点的HA处搭建)

修改配置:
1.修改conf/flink-conf.yaml
vim conf/flink-conf.yaml

jobmanager.rpc.address: hadoop01    //注意。HA的需要按照机器分配
jobmanager.rpc.port: 6123
jobmanager.heap.mb: 1024
taskmanager.heap.mb: 1024
taskmanager.numberOfTaskSlots: 2
taskmanager.memory.preallocate: false
parallelism.default: 1
jobmanager.web.port: 8081
taskmanager.tmp.dirs: /export/servers/flink-1.5.0/tmp

#开启HA
state.backend: filesystem
state.backend.fs.checkpointdir: hdfs://hadoop01:9000/flink-checkpoints
high-availability: zookeeper
high-availability.storageDir: hdfs://hadoop01:9000/flink/ha/
high-availability.zookeeper.quorum: hadoop01:2181,hadoop02:2181,hadoop03:2181
high-availability.zookeeper.client.acl: open
HA参数解释:
state.backend 启用检查点,支持两种后端备份点:
jobmanager:内存状态,备份到JobManager的 ZooKeeper的内存。应仅用于最小状态(Kafka偏移量)或测试和本地调试。
filesystem:状态在TaskManager的内存中,并且状态快照存储在文件系统中。支持Flink支持的所有文件系统,例如HDFS,S3 …

state.backend.fs.checkpointdir:用于将检查点存储在Flink支持的文件系统中的目录。注意:状态后端必须可以从JobManager访问,file://仅用于本地设置
high-availability: zookeeper 定义用于群集执行的高可用性模式
high-availability.storageDir
用于存储JobManager元数据的目录; 这是持久的状态后端,只有一个指向这个状态的指针存储在ZooKeeper中。完全像检查点目录一样,它必须可以从JobManager访问
high-availability.zookeeper.quorum zookeeper的地址

2.修改conf/zoo.cfg

The number of milliseconds of each tick
tickTime=2000

The number of ticks that the initial synchronization phase can take
initLimit=10

The number of ticks that can pass between sending a request and getting an acknowledgement
syncLimit=5

The directory where the snapshot is stored.
dataDir=/tmp/zookeeper
The port at which the clients will connect
clientPort=2181

ZooKeeper quorum peers
server.1=hadoop01:2888:3888
server.2=hadoop02:2888:3888
server.3=hadoop03:2888:3888

3.修改conf/masters
hadoop01:8081
hadoop02:8082

4.修改conf/slave
hadoop01
hadoop02
hadoop03

5.启动HA的flink
1:启动zookeeper
Bin/zkServer.sh start (所有的zookeeper确保启动成功)

2:启动hdfs(检查点和元数据信息存储在了hdfs)
Start-dfs.sh

3:启动flink
bin/start-cluster.sh

执行成功后,测试HA:

模拟突发宕机:

此时hadoop01这台机器的jobmanager出问题,然后访问另外节点的页面:hadoop02:8082

如果IP切换成功,代表当前的HA搭建完毕;

Flink运行在yarn上

在一个企业中,为了最大化的利用集群资源,一般都会在一个集群中同时运行多种类型的 Workload。因此 Flink 也支持在 Yarn 上面运行;
flink on yarn的前提是:hdfs、yarn均启动
1.修改hadoop的配置参数:
vim etc/hadoop/yarn-site.xml
添加:
yarn.nodemanager.vmem-check-enabled
false

是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true。
在这里面我们需要关闭,因为对于flink使用yarn模式下,很容易内存超标,这个时候yarn会自动杀掉job

2.修改全局变量/etc/profile:
添加:
export HADOOP_CONF_DIR=/export/servers/hadoop/etc/Hadoop
YARN_CONF_DIR或者HADOOP_CONF_DIR必须将环境变量设置为读取YARN和HDFS配置
3.使用flink on yarn提交任务:
在YARN上启动一个Flink主要有两种方式:
(1)、启动一个YARN session(Start a long-running Flink cluster on YARN);
(2)、直接在YARN上提交运行Flink作业(Run a Flink job on YARN)

第一种方式:YARN session
这种模式下会启动yarn session,并且会启动Flink的两个必要服务:JobManager和TaskManagers,然后你可以向集群提交作业。同一个Session中可以提交多个Flink作业。需要注意的是,这种模式下Hadoop的版本至少是2.2,而且必须安装了HDFS(因为启动YARN session的时候会向HDFS上提交相关的jar文件和配置文件)
通过./bin/yarn-session.sh脚本启动YARN Session
脚本可以携带的参数:
Usage:
Required
-n,–container Number of YARN container to allocate (=Number of Task Managers)
Optional
-D Dynamic properties
-d,–detached Start detached
-id,–applicationId Attach to running YARN session
-j,–jar Path to Flink jar file
-jm,–jobManagerMemory Memory for JobManager Container [in MB]
-n,–container Number of YARN container to allocate (=Number of Task Managers)
-nm,–name Set a custom name for the application on YARN
-q,–query Display available YARN resources (memory, cores)
-qu,–queue Specify YARN queue.
-s,–slots Number of slots per TaskManager
-st,–streaming Start Flink in streaming mode
-t,–ship Ship files in the specified directory (t for transfer)
-tm,–taskManagerMemory Memory per TaskManager Container [in MB]
-z,–zookeeperNamespace Namespace to create the Zookeeper sub-paths for high availability mode
注意:
如果不想让Flink YARN客户端始终运行,那么也可以启动分离的 YARN会话。该参数被称为-d或–detached。
在这种情况下,Flink YARN客户端只会将Flink提交给群集,然后关闭它自己

启动:
bin/yarn-session.sh -n 2 -tm 800 -s 2

上面的命令的意思是,同时向Yarn申请3个container(即便只申请了两个,因为ApplicationMaster和Job Manager有一个额外的容器。一旦将Flink部署到YARN群集中,它就会显示Job Manager的连接详细信息。),其中 2 个 Container 启动 TaskManager(-n 2),每个 TaskManager 拥有两个 Task Slot(-s 2),并且向每个 TaskManager 的 Container 申请 800M 的内存,以及一个ApplicationMaster(Job Manager)。

启动成功之后,控制台显示:

去yarn页面:ip:8088可以查看当前提交的flink session

点击ApplicationMaster进入任务页面:

上面的页面就是使用:yarn-session.sh提交后的任务页面;
然后使用flink提交任务:
bin/flink run examples/batch/WordCount.jar
在控制台中可以看到wordCount.jar计算出来的任务结果;

在yarn-session.sh提交后的任务页面中也可以观察到当前提交的任务:

点击查看任务细节:

停止当前任务:
1:CTRL+C
2:stop命令
3:yarn application -kill application_1527077715040_0007

分离的YARN会话
如果不想让Flink YARN客户端始终运行,那么也可以启动分离的 YARN会话。该参数被称为-d或–detached。
在这种情况下,Flink YARN客户端只会将Flink提交给群集,然后关闭它自己。请注意,在这种情况下,无法使用Flink停止YARN会话。
使用YARN实用程序(yarn application -kill )停止YARN会话

通过分离yarn会话来执行:
bin/yarn-session.sh -n 2 -tm 800 -s 2 -d

关闭:
yarn application -kill application_1527077715040_0007

第二种方式:在YARN上运行一个Flink作业
上面的YARN session是在Hadoop YARN环境下启动一个Flink cluster集群,里面的资源是可以共享给其他的Flink作业。我们还可以在YARN上启动一个Flink作业,这里我们还是使用./bin/flink,但是不需要事先启动YARN session:
bin/flink run -m yarn-cluster -yn 2 ./examples/batch/WordCount.jar
以上命令在参数前加上y前缀,-yn表示TaskManager个数
在8088页面观察:

停止yarn-cluster
yarn application -kill application的ID
注意:
在创建集群的时候,集群的配置参数就写好了,但是往往因为业务需要,要更改一些配置参数,这个时候可以不必因为一个实例的提交而修改conf/flink-conf.yaml;
可以通过:-D Dynamic properties
来覆盖原有的配置信息:比如:
-Dfs.overwrite-files=true -Dtaskmanager.network.numberOfBuffers=16368

猜你喜欢

转载自blog.csdn.net/qq_39429714/article/details/84328807