上接第二课 Flink 安装部署、环境配置及运行应用程序(1)
视频地址
这些内容基本是按照文档来走的,按照文档进行安装和运行,基本不会有什么错,一些问题自己解决一下就好了,然后总结下文档中的内容并记录中间出现的一些问题。
我下载的源码是1.15.1视频中有些出入,使用的运行环境是虚拟机Ubuntu 系统
多机部署 Flink standalone 集群
一、准备环境
- 三台虚拟机(可以在一台配置环境变量配置好直接克隆就行了)(我是直接使用我以前学Hadoop时使用的环境,分别为hadoop130,hadoop131,hadoop132)
- 选一台主机器与其他虚拟机打通ssh(参考这个)
- 如果使用hdfs 需要配置HADOOP_CONF_DIR 环境变量(这需学习Hadoop相关知识)
- 一个同步文件的脚本( 参考这个刚写的 在打通ssh的情况下更好
二、计划机器
一个JobManager在hadoop130上,每台机器上加一个TaskManager
三、修改配置
修改conf/masters
hadoop130:8081
修改conf/workers
hadoop130
hadoop131
hadoop132
修改 conf/flink-conf.yaml
jobmanager.rpc.address: hadoop130
四、同步配置
把这些配置文件同步到其他机器上去,有同步脚本会更快。
五、启动
启动方式没有变
./bin/start-cluster.sh
启动以后访问一下控制台
六、提交word count作业
- 运行默认的WordCount
./bin/flink run examples/streaming/WordCount.jar
结果会直接在out日志中输出
- 将数据源和输出设置为hdfs上文件
我在我已有的HDFS上有一个文件(自己没有可以上传一个)
./bin/flink run examples/streaming/WordCount.jar --input hdfs:///wcinput/word.txt --output hdfs:///wcinput/output
结果也输出到了一个文件里去了,结果的位置只需要各一个文件夹名称就可以
并发演示那个我也失败了
到这里单JobManager 启动也结束,但是也不是那么顺利中间也是遇到了些问题
1、对于使用hdfs 时需要部署HDFS同时 还需要使用flink 支持Hadoop的jar。要不然会报识别不了HDFS的协议的错误
2、修改配置以后需要重启flink
standalone 模式的 HighAvailability(HA)部署和配置
通过上一节可以部署一个拥有一个JobManager和多个TaskManager节点的集群,但是这样会有一个缺点,就是JobManager是十分重要的,一旦这个JobManager宕掉整个集群就不能再用,而TaskManager宕掉只需要在其他TaskManager 上使用checkpoint中的信息来进行恢复就可以了。所以要搭建一个高可用的集群,就要先要考虑JobManager的高可用,flink的方案就是借助zookeeper实现JobManager的高可用,
一、搭建一个zookeeper集群
如果原来有的话可以使用原来的就行,没有的话flinkzookeeper也内置了zk的部署脚本,需要设置配置文件中的zoo.cfg按照文档中设置就可以
clientPort=2181
server.1=z05f06378.sqa.zth.tbsite.net:2888:3888
server.2=z05c19426.sqa.zth.tbsite.net:2888:3888
server.3=z05f10219.sqa.zth.tbsite.net:2888:3888
然后启动就行了
./bin/start-zookeeper-quorum.sh
二、修改配置
conf/master(改为多个JobManager)
hadoop130:8081
hadoop131:8081
hadoop132:8081
conf/worker(可以维持不变因为本来就是多个)
high-availability: zookeeper
# 配置 zookeeper quorum(hostname 和端口需要依据对应 zk 的实际配置)
high-availability.zookeeper.quorum: hadoop130:2181,hadoop131:2181,hadoop132:2181
# (可选)设置 zookeeper 的 root 目录
high-availability.zookeeper.path.root: /test_dir/test_standalone2_root
# (可选)相当于是这个 standalone 集群中创建的 zk node 的 namespace
high-availability.cluster-id: /test_dir/test_standalone2
# JobManager 的 meta 信息放在 dfs,在 zk 上主要会保存一个指向 dfs 路径的指针
high-availability.storageDir: hdfs:///test_dir/recovery2/
三、重启集群
./bin/start-zookeeper-quorum.sh
./bin/stop-cluster.sh
./bin/start-cluster.sh
四、效果查看
这里我操作效果和文档中有不一致的地方,也是这几天我疑惑的地方
我打开所有的JobManager 地址都可以访问,没有跳转到leader上去,我一度怀疑是配置有问题zookeeper有问题引起了脑裂?Job manager 没有连接上zookeeper,这几天尝试了多次结果还是不能自动跳转,最后想到了看taskManager 会不会自动寻找leader JobManager
我先正常启动查看taskManager的日志如下:
目前看来全部是正常连接到
然后杀掉了目前的leader hadoop131的JobManager
立马所有的taskManager就报警告但是全部转到连接130了
到这里我想我目前的问题仅仅就只是页面不能自动跳转leader,同时我也测试了在flower节点的Job Manager上传任务,查看最终还是在Leader节点上运行的 ,这是我才放下心来。
还有一个不一样的地方就是
这个启动命令并不能单独启动一个jobmanager
./bin/jobmanager.sh start hadoop131
使用 yarn 模式跑 flink job
前提需要一个YARN集群(看看自己以前搭建的YARN集群和可不可以用)
./bin/yarn-session.sh -h
./bin/yarn-session.sh -n 4 -jm 1024m -tm 4096m
./bin/flink run examples/streaming/WordCount.jar --input hdfs:///wcinput/word.txt --output hdfs:///wcinput/output1
为了测试是否启用YARN我在创建一个 YARN 模式的 flink 集群之前运行了一次,之后运行了一次 看看区别
可以看出已经使用了YARN
有一些问题还是不懂 特别是和YRAN相关的,但是秉承的先动手的原则还是动手做完了这些操作,虽然路不那么顺,但是开始要走起来才行。