部署方式

一般来讲有三种方式:

  • Local
  • Standalone
  • Flink On Yarn/Mesos/K8s…

单机模式

参考上一篇Flink从入门到放弃(入门篇2)-本地环境搭建&构建第一个Flink应用

Standalone模式部署

我们基于CentOS7虚拟机搭建一个3个节点的集群:

角色分配:

  1. Master: 192.168.246.134
  2. Slave: 192.168.246.135
  3. Slave: 192.168.246.136
  4. 复制代码
  1. 192.168.246.134 jobmanager
  2. 192.168.246.135 taskmanager
  3. 192.168.246.136 taskmanager
  4. 复制代码

假设三台机器都存在: 用户root 密码为123

  1. 192.168.246.134 master
  2. 192.168.246.135 slave1
  3. 192.168.246.136 slave2
  4. 复制代码

三台机器首先要做ssh免登,具体方法很简单,可以百度。

下载一个包到本地: 这里我选择了1.7.2版本+Hadoop2.8+Scala2.11版本 然后,分发

  1. scp flink-1.7.2-bin-hadoop28-scala_2.11.tgz root@192.168.246.13X:~
  2. scp jdk-8u11-linux-x64.tar.gz root@192.168.246.13X:~
  3. 注意:X代表456,分发到3台机器
  4. 修改解压后目录属主:
  5. Chown -R root:root flink/
  6. Chown -R root:root jdk8/
  7. export JAVA_HOME=/root/jdk8
  8. export JRE_HOME=${JAVA_HOME}/jre
  9. export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
  10. export PATH=${JAVA_HOME}/bin:$PATH
  11. 复制代码

分别修改master和slave的flink-conf.yaml文件

  1. Vim flink/conf/flink-conf.yaml
  2. ##配置master节点ip
  3. jobmanager.rpc.address: 192.168.1.100
  4. ##配置slave节点可用内存,单位MB
  5. taskmanager.heap.mb: 25600
  6. ##配置每个节点的可用slot,1 核CPU对应 1 slot
  7. ##the number of available CPUs per machine
  8. taskmanager.numberOfTaskSlots: 30
  9. ##默认并行度 1 slot资源
  10. parallelism.default: 1
  11. 修改slave节点配置文件slaves
  12. 192.168.246.135
  13. 192.168.246.136
  14. 复制代码

启动集群:

  1. ##在master节点上执行此脚本,就可以启动集群,前提要保证master节点到slaver节点可以免密登录,
  2. ##因为它的启动过程是:先在master节点启动jobmanager进程,然后ssh到各slaver节点启动taskmanager进程
  3. ./bin/start-cluster.sh
  4. 停止集群:
  5. ./bin/stop-cluster.sh
  6. 复制代码

Flink on yarn集群部署

Yarn的简介:

  • ResourceManager ResourceManager 负责整个集群的资源管理和分配,是一个全局的资源管理系统。 NodeManager 以心跳的方式向 ResourceManager 汇报资源使用情况(目前主要是 CPU 和内存的使用情况)。RM 只接受 NM 的资源回报信息,对于具体的资源处理则交给 NM 自己处理。
  • NodeManager NodeManager 是每个节点上的资源和任务管理器,它是管理这台机器的代理,负责该节点程序的运行,以及该节点资源的管理和监控。YARN 集群每个节点都运行一个NodeManager。 NodeManager 定时向 ResourceManager 汇报本节点资源(CPU、内存)的使用情况和Container 的运行状态。当 ResourceManager 宕机时 NodeManager 自动连接 RM 备用节点。 NodeManager 接收并处理来自 ApplicationMaster 的 Container 启动、停止等各种请求。
  • ApplicationMaster 负责与 RM 调度器协商以获取资源(用 Container 表示)。 将得到的任务进一步分配给内部的任务(资源的二次分配)。 与 NM 通信以启动/停止任务。 监控所有任务运行状态,并在任务运行失败时重新为任务申请资源以重启任务

Flink on yarn 集群启动步骤

  • 步骤1 用户向YARN中提交应用程序,其中包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等。
  • 步骤2 ResourceManager为该应用程序分配第一个Container,并与对应的Node-Manager通信,要求它在这个Container中启动应用程序的ApplicationMaster。
  • 步骤3 ApplicationMaster首先向ResourceManager注册,这样用户可以直接通过ResourceManager查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7。
  • 步骤4 ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源。
  • 步骤5 一旦ApplicationMaster申请到资源后,便与对应的NodeManager通信,要求它启动任务。
  • 步骤6 NodeManager为任务设置好运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。
  • 步骤7 各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。 在应用程序运行过程中,用户可随时通过RPC向ApplicationMaster查询应用程序的当前运行状态。
  • 步骤8 应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己

on yarn 集群部署

设置Hadoop环境变量:

  1. [root@hadoop2 flink-1.7.2]# vi /etc/profile
  2. export HADOOP_CONF_DIR=这里是你自己的hadoop路径
  3. 复制代码

bin/yarn-session.sh -h 查看使用方法:

  1. bin/yarn-session.sh -h
  2. Usage:
  3. Required
  4. -n,--container <arg> YARN分配容器的数量 (=Number of Task Managers)
  5. Optional
  6. -D <property=value> 动态属性
  7. -d,--detached 以分离模式运行作业
  8. -h,--help Yarn session帮助.
  9. -id,--applicationId <arg> 连接到一个正在运行的YARN session
  10. -j,--jar <arg> Flink jar文件的路径
  11. -jm,--jobManagerMemory <arg> JobManager的内存大小,driver-memory [in MB]
  12. -m,--jobmanager <arg> Address of the JobManager (master) to which to connect. Use this flag to connect to a different JobManager than the one specified in the configuration.
  13. -n,--container <arg> TaskManager的数量,相当于executor的数量
  14. -nm,--name <arg> 设置YARN应用自定义名称
  15. -q,--query 显示可用的YARN资源 (memory, cores)
  16. -qu,--queue <arg> 指定YARN队列
  17. -s,--slots <arg> 每个JobManagercore的数量,executor-cores。建议将slot的数量设置每台机器的处理器数量
  18. -st,--streaming 在流模式下启动Flink
  19. -t,--ship <arg> 在指定目录中传送文件(t for transfer)
  20. -tm,--taskManagerMemory <arg> 每个TaskManager的内存大小,executor-memory [in MB]
  21. -yd,--yarndetached 如果存在,则以分离模式运行作业 (deprecated; use non-YARN specific option instead)
  22. -z,--zookeeperNamespace <arg> 为高可用性模式创建Zookeeper子路径的命名空间
  23. 复制代码

在启动的是可以指定TaskManager的个数以及内存(默认是1G),也可以指定JobManager的内存,但是JobManager的个数只能是一个

我们开启动一个YARN session:

  1. ./bin/yarn-session.sh -n 4 -tm 8192 -s 8
  2. 复制代码

上面命令启动了4个TaskManager,每个TaskManager内存为8G且占用了8个核(是每个TaskManager,默认是1个核)。在启动YARN session的时候会加载conf/flink-config.yaml配置文件,我们可以根据自己的需求去修改里面的相关参数.

YARN session启动之后就可以使用bin/flink来启动提交作业:

例如:

  1. ./bin/flink run -c com.demo.wangzhiwu.WordCount $DEMO_DIR/target/flink-demo-1.0.SNAPSHOT.jar --port 9000
  2. 复制代码

flink run的用法如下:

  1. 用法: run [OPTIONS] <jar-file> <arguments>
  2. "run" 操作参数:
  3. -c,--class <classname> 如果没有在jar包中指定入口类,则需要在这里通过这个参数指定
  4. -m,--jobmanager <host:port> 指定需要连接的jobmanager(主节点)地址
  5. 使用这个参数可以指定一个不同于配置文件中的jobmanager
  6. -p,--parallelism <parallelism> 指定程序的并行度。可以覆盖配置文件中的默认值。
  7. 复制代码

使用run 命令向yarn集群提交一个job。客户端可以确定jobmanager的地址。当然,你也可以通过-m参数指定jobmanager。jobmanager的地址在yarn控制台上可以看到。

值得注意的是:

上面的YARN session是在Hadoop YARN环境下启动一个Flink cluster集群,里面的资源是可以共享给其他的Flink作业。我们还可以在YARN上启动一个Flink作业。这里我们还是使用./bin/flink,但是不需要事先启动YARN session:

  1. ./bin/flink run -m yarn-cluster -yn 2 ./examples/batch/WordCount.jar \
  2. --input hdfs://user/hadoop/input.txt \
  3. --output hdfs://user/hadoop/output.txt
  4. 复制代码

上面的命令同样会启动一个类似于YARN session启动的页面。其中的-yn是指TaskManager的个数,必须要指定。

后台运行 yarn session

如果你不希望flink yarn client一直运行,也可以启动一个后台运行的yarn session。使用这个参数:-d 或者 --detached 在这种情况下,flink yarn client将会只提交任务到集群然后关闭自己。注意:在这种情况下,无法使用flink停止yarn session。 必须使用yarn工具来停止yarn session

  1. yarn application -kill <applicationId>
  2. 复制代码

flink on yarn的故障恢复

flink 的 yarn 客户端通过下面的配置参数来控制容器的故障恢复。这些参数可以通过conf/flink-conf.yaml 或者在启动yarn session的时候通过-D参数来指定。

  • yarn.reallocate-failed:这个参数控制了flink是否应该重新分配失败的taskmanager容器。默认是true。
  • yarn.maximum-failed-containers:applicationMaster可以接受的容器最大失败次数,达到这个参数,就会认为yarn session失败。默认这个次数和初始化请求的taskmanager数量相等(-n 参数指定的)。
  • yarn.application-attempts:applicationMaster重试的次数。如果这个值被设置为1(默认就是1),当application master失败的时候,yarn session也会失败。设置一个比较大的值的话,yarn会尝试重启applicationMaster。

日志文件查看

在某种情况下,flink yarn session 部署失败是由于它自身的原因,用户必须依赖于yarn的日志来进行分析。最有用的就是yarn log aggregation 。启动它,用户必须在yarn-site.xml文件中设置yarn.log-aggregation-enable 属性为true。一旦启用了,用户可以通过下面的命令来查看一个失败的yarn session的所有详细日志。

  1. yarn logs -applicationId <application ID>
  2. 复制代码

完。

公众号推荐

  • 全网唯一一个从0开始帮助Java开发者转做大数据领域的公众号~

  • 大数据技术与架构或者搜索import_bigdata关注~

  • 海量【java和大数据的面试题+视频资料】整理在公众号,关注后可以下载~

 

作者:王知无
链接:https://juejin.im/post/5c755ec5f265da2dbe02f15c
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Flink集群部署的更多相关文章

  1. Flink 集群运行原理兼部署及Yarn运行模式深入剖析

    1 Flink的前世今生(生态很重要) 原文:https://blog.csdn.net/shenshouniu/article/details/84439459 很多人可能都是在 2015 年才听到 ...

  2. 第06讲:Flink 集群安装部署和 HA 配置

    Flink系列文章 第01讲:Flink 的应用场景和架构模型 第02讲:Flink 入门程序 WordCount 和 SQL 实现 第03讲:Flink 的编程模型与其他框架比较 第04讲:Flin ...

  3. Flink集群模式部署及案例执行

    一.软件要求 Flink在所有类UNIX的环境[例如linux,mac os x和cygwin]上运行,并期望集群由一个 主节点和一个或多个工作节点组成.在开始设置系统之前,确保在每个节点上都安装了一 ...

  4. Flink使用(二)——Flink集群资源规划

    前言 本文主要译自Flink Forward 2017的柏林站中Robert Metzger的有关集群规划的How to size your flink cluster一文.该文中主要是考虑网络资源, ...

  5. 实时计算框架:Flink集群搭建与运行机制

    一.Flink概述 1.基础简介 Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算.Flink被设计在所有常见的集群环境中运行,以内存执行速度和任意规模来执行计算.主要特性包 ...

  6. zookeeper集群+kafka集群 部署

    zookeeper集群 +kafka 集群部署 1.Zookeeper 概述: Zookeeper 定义 zookeeper是一个开源的分布式的,为分布式框架提供协调服务的Apache项目 Zooke ...

  7. Apache Kafka 集群部署指南

    公众号关注 「开源Linux」 回复「学习」,有我为您特别筛选的学习资料~ Kafka基础 消息系统的作用 应该大部分小伙伴都清楚,用机油装箱举个例子. 所以消息系统就是如上图我们所说的仓库,能在中间 ...

  8. Quartz.net持久化与集群部署开发详解

    序言 我前边有几篇文章有介绍过quartz的基本使用语法与类库.但是他的执行计划都是被写在本地的xml文件中.无法做集群部署,我让它看起来脆弱不堪,那是我的罪过. 但是quart.net是经过许多大项 ...

  9. Openfire 集群部署和负载均衡方案

    Openfire 集群部署和负载均衡方案 一.   概述 Openfire是在即时通讯中广泛使用的XMPP协议通讯服务器,本方案采用Openfire的Hazelcast插件进行集群部署,采用Hapro ...

随机推荐

  1. php类自动加载

    __autoload 新建一个index.php <?php $d = new z(); function __autoload($class) //自动捕获new的类名 { $file = $ ...

  2. 生成图形化html报告

    生成图形化html报告: 1.从cmd 进入执行测试文件 2.执行该命令:jmeter -n -t <test JMX file> -l <test log file> -e ...

  3. vuejs 使用vue-cli引入bootstrap

    前言:对于刚刚进入vuejs的队伍中的小白来讲,很多都是模糊的,js操作dom节点的思想萦绕,还不能自由切换在二者之间. 解决之道: 想要在vue中引入bootstrap,引入的时候需要按照如下的步骤 ...

  4. 回顾django内容

    回顾: 1 HTTP协议:(重点) -请求 -请求首行 -GET /index HTTP/1.1 -请求头部(在django框架中,可以从META中取出来) -key:value------>\ ...

  5. 华为云服务器为Tomcat配置SSL

    近期由于开发小程序需要在云服务器上配置https访问协议,也遇到了一点小问题,把配置过程记录一下:SSL 证书申请下来之后会有 .jks .crt .pfx .pem为后缀的文件(如何申请SSL证书这 ...

  6. C#框架类

    C# 开源框架(整理) Json.NET http://json.codeplex.com/ Json.Net 是一个读写Json效率比较高的.Net框架.Json.Net 使得在.Net环境下使用J ...

  7. 20145232韩文浩《网络对抗》逆向及BOF基础实践

    实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getShe ...

  8. 6 week work 3

    sticky vs fixed sticky:表示粘贴到某个位置.当组件设置了该属性值后,当页面滑动时,组件会跟着页面移动,当组件触及到窗体后,页面若继续滑动,组件则处在与窗体接触的位置不动.元素的定 ...

  9. 关于IO的整理

    我们知道io只是输入输出,在java语言中分为同步阻塞的BIO.同步非阻塞的NIO.异步非阻塞的AIO,现在的IO,一般是用作两种用途:一种是进行文件或者目录的操作(将不同的输入输出源抽象成流,所以流 ...

  10. UDF函数 解码url

    背景 URL 的编码 是ASCII十六进制格式.数仓接受到前端上报的URL,要对URL字段解码. 如要将 https"Fmybook.do%3Frequest_type%3D%26type% ...