上一篇中,搭建了一个简单的flink集群,在这个集群中,我使用了一个jobManager节点,三个taskManager节点,之后根据官网和其他资料写了一个简单的java验证程序验证集群的可用:

flink初识及集群搭建和简单验证

虽然这个集群搭建是成功的,但是这种方式的集群却存在问题。

flink集群中jobManager和taskManager这种,是典型的master/slave主从模式的设计,jobManager具有资源管理任务调度的功能,管理taskManager的资源和调度,也就是启动以及外部的交互实际都是先经过jobManager。

这种情况下,虽然有三个实际的taskManager处理任务,但是jobManager是单机的,一旦jobManger故障,则整个集群依然不可用。

这个其实和hdfs中nameNodedataNode的关系很像,可能就是一样的(带后续都深入之后再比较)。

hdfs的ha中,实际就是增加了nameNode的节点,交给zookeeper管理,而flink的ha也类似,即增加jobManager的节点数,也要依赖zookeeper来管理jobManager。

之前的简单flink集群,我使用的节点情况如下:

类别 node001 node002 node003 node004
jobManager
taskManager

flink-HA机器规划

虽说简单的flink集群升级为HA,本质上是增加jobManager节点,但是实际并不是单纯的加一个jobManager节点就够了。

上边提到了需要zookeeper管理jobManager的集群,所以还需要zookeeper。

同时,由于jobManager的任务较重,相应的源数据也很多,因此官方建议使用可被各个节点访问的持久化文件系统存储源数据,鉴于之前搭建了hdfs,自然就直接选用了。

zookeeper和hdfs之前都已经搭建好了,就可以直接使用,需要参考的可以查看之前这篇:

HDFS-HA模式搭建(基于完全分布式模式升级)

因此,最终的flink-HA集群机器规划如下:

类别 node001 node002 node003 node004
nameNode(HDFS)
dataNode(HDFS)
journalnode(HDFS)
zkfc(HDFS)
nodeManager(HDFS)
zookeeper
jobManager(FLINK)
taskManager(FLINK)

flink-conf.yaml修改

规划好了机器,然后就是修改配置,实际也很简单,首先还是修改flink安装目录的conf目录下flink-conf.yaml文件,找到如下的三个配置,把原本的注释放开,然后配置自己的hdfs地址和zookeeper地址。

需要注意的是,我这里的hdfs是之前的ha集群,mycluster是我的hdfs的集群名,至于后边的内容会在hdfs中创建路径,可以自定义,不需要提前创建。

high-availability: zookeeper
high-availability.storageDir: hdfs://mycluster/flink/ha/
high-availability.zookeeper.quorum: node002:2181,node003:2181,node004:2181

workers修改

上一篇有提到过,旧版本的flink中有个文件叫slaves,新版的就叫这个workers,代表的是taskManger节点,之前我配置了三个,现在其中一个换成jobManager,所以删掉一个之后内容如下:

node003
node004

masters修改

之前的监看flink集群搭建时,是没有管这个文件的,因为jobManager就只有一个,现在有了两个jobManager,就需要修改这个文件制定jobManager集群的节点。

实际上从这里,尤其是之前的mastersslaves这两个文件的命令,也很容易看出来他们的主从关系。

修改后的masters文件内容如下:

node001:8081
node002:8081

配置文件同步分发

和hdfs一样,和flink简单集群一样,这些修改的配置文件也都需要同步分发到所有的节点中,scp就不多说了。

hadoop依赖jar下载

上边操作完成后,我就使用start-cluster.sh启动的集群,然后看到打印出了如下的信息:

Starting HA cluster with 2 masters.
Starting standalonesession daemon on host node001.
Starting standalonesession daemon on host node002.
Starting taskexecutor daemon on host node003.
Starting taskexecutor daemon on host node004.

也没有报错,我以为就成功了,但是当我访问web页面时,无论是http://node001:8081还是http://node002:8081都无法访问,于是查看了flink的日志文件,结果发现日志中打印了如下的异常信息:

Caused by: org.apache.flink.core.fs.UnsupportedFileSystemSchemeException: Could not find a file system implementation for scheme 'hdfs'. The scheme is not directly supported by Flink and no Hadoop file system to support this scheme could be loaded. For a full list of supported file systems, please see https://ci.apache.org/projects/flink/flink-docs-stable/ops/filesystems/.at org.apache.flink.core.fs.FileSystem.getUnguardedFileSystem(FileSystem.java:491) ~[flink-dist_2.11-1.11.2.jar:1.11.2]at org.apache.flink.core.fs.FileSystem.get(FileSystem.java:389) ~[flink-dist_2.11-1.11.2.jar:1.11.2]

看起来就是无法识别和连接hdfs,实际上是因为没有相关的依赖,因此需要下载flink依赖的hadoop的jar到flink安装目录下的lib目录下。

这个插件在flink官网可以找到,https://flink.apache.org/downloads.html,这个连接中Additional Components下就是flink依赖的hadoop插件。

按网上说的,需要根据相应的hadoop版本下载对应的插件版本,但是我的hadoop是3.1.3,而这个页面中最高才是2.8.3,因此最终就下载了这个版本。

之后重新执行start-cluster.sh后日志没有再打印上边的异常,同时web页面也都可以成功打开了,并能看到两个taskManger。

在web页面提交上一次做好的flink程序的jar之后,也能看到running状态,似乎ha模式搭建成功了,但是实际上并不是。

classpath配置

当在上述jar生成的task运行的机器节点使用nc -lk 8888启动监听并发送数据后,web页面的Stdout上并没有如愿输出单词的统计次数,反而是在对应机器节点的日志中出现了异常。

通过查看,我的这个task运行在node003节点,找到日志使用tail -500 flink-root-taskexecutor-1-node003.log后发现了如下的异常:

2020-10-14 16:00:56,527 ERROR org.apache.flink.runtime.taskexecutor.TaskManagerRunner      [] - TaskManager initialization failed.
java.io.IOException: Could not create FileSystem for highly available storage path (hdfs://mycluster/flink/ha/default)at org.apache.flink.runtime.blob.BlobUtils.createFileSystemBlobStore(BlobUtils.java:103) ~[flink-dist_2.11-1.11.2.jar:1.11.2]at org.apache.flink.runtime.blob.BlobUtils.createBlobStoreFromConfig(BlobUtils.java:89) ~[flink-dist_2.11-1.11.2.jar:1.11.2]at org.apache.flink.runtime.highavailability.HighAvailabilityServicesUtils.createHighAvailabilityServices(HighAvailabilityServicesUtils.java:117) ~[flink-dist_2.11-1.11.2.jar:1.11.2]at org.apache.flink.runtime.taskexecutor.TaskManagerRunner.<init>(TaskManagerRunner.java:133) ~[flink-dist_2.11-1.11.2.jar:1.11.2]at org.apache.flink.runtime.taskexecutor.TaskManagerRunner.runTaskManager(TaskManagerRunner.java:306) ~[flink-dist_2.11-1.11.2.jar:1.11.2]at org.apache.flink.runtime.taskexecutor.TaskManagerRunner.lambda$runTaskManagerSecurely$2(TaskManagerRunner.java:330) ~[flink-dist_2.11-1.11.2.jar:1.11.2]at org.apache.flink.runtime.security.contexts.NoOpSecurityContext.runSecured(NoOpSecurityContext.java:30) ~[flink-dist_2.11-1.11.2.jar:1.11.2]at org.apache.flink.runtime.taskexecutor.TaskManagerRunner.runTaskManagerSecurely(TaskManagerRunner.java:329) ~[flink-dist_2.11-1.11.2.jar:1.11.2]at org.apache.flink.runtime.taskexecutor.TaskManagerRunner.runTaskManagerSecurely(TaskManagerRunner.java:314) [flink-dist_2.11-1.11.2.jar:1.11.2]at org.apache.flink.runtime.taskexecutor.TaskManagerRunner.main(TaskManagerRunner.java:298) [flink-dist_2.11-1.11.2.jar:1.11.2]
Caused by: org.apache.flink.core.fs.UnsupportedFileSystemSchemeException: Could not find a file system implementation for scheme 'hdfs'. The scheme is not directly supported by Flink and no Hadoop file system to support this scheme could be loaded. For a full list of supported file systems, please see https://ci.apache.org/projects/flink/flink-docs-stable/ops/filesystems/.at org.apache.flink.core.fs.FileSystem.getUnguardedFileSystem(FileSystem.java:491) ~[flink-dist_2.11-1.11.2.jar:1.11.2]at org.apache.flink.core.fs.FileSystem.get(FileSystem.java:389) ~[flink-dist_2.11-1.11.2.jar:1.11.2]at org.apache.flink.core.fs.Path.getFileSystem(Path.java:292) ~[flink-dist_2.11-1.11.2.jar:1.11.2]at org.apache.flink.runtime.blob.BlobUtils.createFileSystemBlobStore(BlobUtils.java:100) ~[flink-dist_2.11-1.11.2.jar:1.11.2]... 9 more
Caused by: org.apache.flink.core.fs.UnsupportedFileSystemSchemeException: Hadoop is not in the classpath/dependencies.at org.apache.flink.core.fs.UnsupportedSchemeFactory.create(UnsupportedSchemeFactory.java:58) ~[flink-dist_2.11-1.11.2.jar:1.11.2]

经过一番查询和尝试后找到了解决办法,即配置两个环境变量,环境变量的配置方式较多,可以配系统变量,可以配用户变量,我就直接配置的系统变量,执行vi /etc/profile,然后加入如下两行:

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_CLASSPATH=`hadoop classpath`

配置完成后使用source /etc/profile重新加载刚修改的内容,然后重新提交flink程序jar后日志不在报错,同时再次在nc中输入单词后,在web界面的Stdout中便能成功的刷新出预想的结果,至此,flink的ha模式搭建成功,搭建过程也算是对flink的设计思想和架构有了更进一步的认识。

flink-HA集群搭建和问题记录相关推荐

  1. Hadoop-2.8.5的HA集群搭建

    一.Hadoop HA 机制的学习 1.1.Hadoop 2.X 的架构图 2.x版本中,HDFS架构解决了单点故障问题,即引入双NameNode架构,同时借助共享存储系统来进行元数据的同步,共享存储 ...

  2. 深入浅出学大数据(五)Hadoop再探讨High Availability(HA)集群搭建及YARN原理介绍

      大家好,我是不温卜火,昵称来源于成语-不温不火,本意是希望自己性情温和.作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己所犯的错误希望能够帮助到很多和自己一样 ...

  3. hadoop2.8 ha 集群搭建

    简介: 最近在看hadoop的一些知识,下面搭建一个ha (高可用)的hadoop完整分布式集群: hadoop的单机,伪分布式,分布式安装 hadoop2.8 集群 1 (伪分布式搭建 hadoop ...

  4. 7.HDFS之——NameNode的概述、自动Name的概述、NameNode HA 集群搭建

    7.HDFS NameNode HA 7.1 NameNode HA概述 所谓HA(High Availablity [əˌveɪlə'bɪləti] ),即高可用(7x24小时服务不中断).通过主备 ...

  5. spark ui的访问地址_Spark篇之HA集群搭建

    一.下载Spark安装包 可以从官网下载,本集群选择的版本是spark-1.6.0-bin-hadoop2.6 二.部署和规划Spark集群 提前准备好四台虚拟主机,三台主机 node1 node2 ...

  6. eureka注册中心HA集群搭建

    今天我们讲一下高可用的eureka注册中心(eureka server cluster) SpringCloud支持Eureka.Zookeeper.Consul作为注册中心,这里我们选择Eureka ...

  7. Hadoop分布式高可用HA集群搭建笔记(含Hive之构建),java高级架构师视频

    | HOSTNAME | IP | 操作系统 | | - | - | - | | masterndoe | 192.168.122.128 | Manjaro 20.1 | | slavenode1 ...

  8. Hadoop分布式高可用HA集群搭建笔记(含Hive之构建),java类加载过程面试题

    []( )1.2.4 修改主机名 修改三台机器的/etc/hosts文件 加入如下内容.为了等下能在物理主机上访问HDFS web管理工具.还需要在本地进行该映射.不过在Windows下,要修改的是C ...

  9. 基于ZooKeeper的Hadoop HA集群搭建

    集群的规划 Zookeeper集群: 192.168.142.12 (bigdata12) 192.168.142.13 (bigdata13) 192.168.142.14 (bigdata14) ...

  10. hadoop HA集群搭建(亲测)

    1.hadoop-env.sh 2.core-site.xml <configuration> <!-- 指定hdfs的nameservice为ns1 --> <prop ...

最新文章

  1. android Adapter使用详解
  2. vcm驱动芯片原理_T6322A|电源芯片的内部设计是怎样的?
  3. 尘锋2021产品发布会圆满落幕,双向赋能引领行业发展
  4. Oracle解锁scott账号
  5. 微信小程序基于scroll-view实现锚点定位
  6. python安装api_Python API文档
  7. 全国程序员工资最新统计来了,平均 14,542 元!
  8. Struts2标签库整理【完整】
  9. C语言动态链表实现KTV点歌系统
  10. android圆图,Android实现圆形图片或者圆角图片
  11. Flutter开发之——动画-Lottie
  12. CloudFlare域名管理系统
  13. XCTF-PWN pwn-200(使用DynELF利用write泄露system地址)
  14. 计算机网络 | 一文搞懂什么是TCP/IP协议
  15. 什么是 Benchmarks?
  16. canvas 绘制图片
  17. scrapy 爬取苏宁图书
  18. springboot vue uniapp校园报修系统源码
  19. 微信小程序onTabItemTap和onShow的执行顺序
  20. linux虚拟主机ping不通域名

热门文章

  1. 一纬度横直线等于多公里_【地理】高中地理必修一知识点总结,考前必看
  2. ASO优化中关键词设置是否需要逗号,aso关键词逗号隔开
  3. `OSError: file error: bad input file` in RDkit with .sdf file
  4. 三国论(16-20章)
  5. 女解码高手王小云:十年破译五部顶级密码(图)
  6. ARM的CF卡驱动分析
  7. 利用IDM没办法从B站下视频?下载悬浮条不显示?解决方案来了!
  8. JSR303数据校验
  9. 共享打印机无法访问计算机,win7系统文件夹和打印机共享后无法访问的解决方法...
  10. 赛马比赛--25匹马5个跑道,怎样选出最快的5匹来