10.flink-1.11.1 安装部署


1 Standalone模式


1.0 集群规划

node06node07node08node10
TaskManagerTaskManagerTaskManagerJobManager

1.1 安装

  • 0)解压缩 flink-1.11.1-bin-scala_2.11.tgz,进入conf目录中。
[root@node09 flink]# tar -zvxf  flink-1.11.1-bin-scala_2.11.tgz /opt/module/
  • 1)修改 flink/conf/flink-conf.yaml 文件:
[root@node09 conf]# vim flink-conf.yaml

修改为

jobmanager.rpc.address: node10
  • 2)修改 /conf/slaves文件:
[root@node09 conf]# vim slaves

修改为

node06
node07
node08
  • 3)分发给另外机子:
[root@node09 conf]# xsync /opt/module/flink/

分发脚本可以参考前面的文章1.Centos7.6 环境准备

  • 4)启动:
[root@node10 flink]# bin/start-cluster.sh 

访问http://localhost:8081 可以对flink集群和任务进行监控管理。


2 Yarn模式 Flink on Yarn

  • 以Yarn模式部署Flink任务时,要求Flink是有Hadoop支持的版本,Hadoop环境需要保证版本在2.2以上,并且集群中安装有HDFS服务。

  • 解脱了JobManager的压力 RM做资源管理 JobManager只负责任务管理

  • 运行流程
    Flink on Yarn

    1. 每当创建一个新flink的yarn session的时候,客户端会首先检查要请求的资源(containers和
      memory)是否可用。然后,将包含flink相关的jar包盒配置上传到HDFS
    2. 客户端会向ResourceManager申请一个yarn container 用以启动ApplicationMaster。由于客户端
      已经将配置和jar文件上传到HDFS,ApplicationMaster将会下载这些jar和配置,然后启动成功
    3. JobManager和AM运行于同一个container
    4. AM开始申请启动Flink TaskManager的containers,这些container会从HDFS上下载jar文件和已
      修改的配置文件。一旦这些步骤完成,flink就可以接受任务了
  • Flink提供了两种在yarn上运行的模式,分别为Session-ClusterPer-Job-Cluster模式。


2.1 Session-cluster 模式:

Session-cluster

Session-Cluster模式需要先启动集群,然后再提交作业,接着会向yarn申请一块空间后,资源永远保持不变。如果资源满了,下一个作业就无法提交,只能等到yarn中的其中一个作业执行完成后,释放了资源,下个作业才会正常提交。所有作业共享Dispatcher和ResourceManager;共享资源;适合规模小执行时间短的作业。
在yarn中初始化一个flink集群,开辟指定的资源,以后提交任务都向这里提交。这个flink集群会常驻在yarn集群中,除非手工停止。

  • Session-cluster 模式配置
  1. 启动hadoop集群
  2. 在yarn中启动Flink集群 (如果没有配置好相关Hadoop配置,直接启动会遇到一些报错,可以参考后面遇到的问题)
[root@node09 flink]# bin/yarn-session.sh  -n 3 -s 3 -nm flink-session  -d -q

参数说明:

其中:
-n(--container):TaskManager的数量。
-s(--slots):    每个TaskManager的slot数量,默认一个slot一个core,默认每个taskmanager的slot的个数为1,有时可以多一些taskmanager,做冗余。
-jm:JobManager的内存(单位MB)。
-tm:每个taskmanager的内存(单位MB)。
-nm:yarn 的appName(现在yarn的ui上的名字)。 
-d:后台执行。
-q,--query:显示yarn集群可用资源(内存、core)
  1. 执行任务
[root@node09 flink]# bin/flink run -c com.rex.stream.WordCount -yid application_1597852897840_0289 ~/StudyFlink-1.0-SNAPSHOT.jar
  1. 去yarn控制台查看任务状态

  2. 取消yarn-session
    yarn application --kill application_1597852897840_0289


2.2 Per-Job-Cluster 模式:

Per-Job-Cluster

一个Job会对应一个集群,每提交一个作业会根据自身的情况,都会单独向yarn申请资源,直到作业执行完成,一个作业的失败与否并不会影响下一个作业的正常提交和运行。独享Dispatcher和ResourceManager,按需接受资源申请;适合规模大长时间运行的作业。
每次提交都会创建一个新的flink集群,任务之间互相独立,互不影响,方便管理。任务执行完成之后创建的集群也会消失。

  • Per Job Cluster 模式配置
  1. 启动hadoop集群(略)
  2. 不启动yarn-session,直接执行job
[root@node09 flink]# bin/flink run -m yarn-cluster -yn 3 -ys 3 -ynm flink-job -c com.rex.stream.WordCount ~/StudyFlink-1.0-SNAPSHOT.jar

参数说明:

-yn,--container <arg> 表示分配容器的数量,也就是TaskManager的数量。
-d,--detached:设置在后台运行。
-yjm,--jobManagerMemory<arg>:设置JobManager的内存,单位是MB。
-ytm,--taskManagerMemory<arg>:设置每个TaskManager的内存,单位是MB。
-ynm,--name:给当前Flink application在Yarn上指定名称。
-yq,--query:显示yarn中可用的资源(内存、cpu核数)
-yqu,--queue<arg> :指定yarn资源队列
-ys,--slots<arg> :每个TaskManager使用的Slot数量。

2.3 flink on yarn 遇到的问题

2.3.1 启动yarn-session报错 YarnException

  • Error log
[root@node10 bin]# ./yarn-session.sh -n 2 -s 2 -jm 1024 -tm 1024 -nm test -d
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/yarn/exceptions/YarnException
        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
        at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
        at java.lang.Class.getMethod0(Class.java:3018)
        at java.lang.Class.getMethod(Class.java:1784)
        at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.yarn.exceptions.YarnException
        at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 7 more
  • 问题分析:为了使用Hadoop功能(例如YARN,HDFS),必须为Flink提供所需的Hadoop类,因为默认情况下未捆绑这些类。

  • 问题解决 :通过HADOOP_CLASSPATH环境变量将Hadoop类路径添加到Flink 。

#flink on yarn
HADOOP_CONF_DIR=$HADOOP_HOME
export HADOOP_CLASSPATH=`hadoop classpath`

参考官网:Hadoop Integration

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值