为什么用on yarn模式
在集群运行时,可能会有很多的集群实例包括MapReduce、Spark、Flink等等,那么如果它们全基于on Yarn就可以完成资源分配,减少单个实例集群的维护,提高集群的利用率。
两种模式
- 内存集中管理模式(Session模式)
这种方式需要先启动集群,然后在提交作业,接着向yarn申请一块空间后,资源永远保持不变。如果资源满了,下一个作业就无法提交,只能等到yarn中的其中一个作业执行完成后,释放了资源,那下一个作业才会正常提交.
- 内存Job管理模式(Run a Flink job on YARN)
这种方式的好处是一个任务会对应一个job,即没提交一个作业会根据自身的情况,向yarn申请资源,直到作业执行完成,并不会影响下一个作业的正常运行,除非是yarn上面没有任何资源的情况下。
Session模式搭建
先配置以下yarn-site.xml文件,关闭yarn的内存检查
将修改好的yarn文件分发给另外两个节点
启动
在环境变量中添加HADOOP_CONF_DIR
export HADOOP_CONF_DIR=/usr/hadoop/hadoop-3.1.4/etc/hadoop
启动Hadoop集群
启动flink集群
启动session模式,开辟资源
yarn-session的参数介绍
-n : 指定TaskManager的数量;
-d: 以分离模式运行;
-id:指定yarn的任务ID;
-j:Flink jar文件的路径;
-jm:JobManager容器的内存(默认值:MB);
-nl:为YARN应用程序指定YARN节点标签;
-nm:在YARN上为应用程序设置自定义名称;
-q:显示可用的YARN资源(内存,内核);
-qu:指定YARN队列;
-s:指定TaskManager中slot的数量;
-st:以流模式启动Flink;
-tm:每个TaskManager容器的内存(默认值:MB);
-z:命名空间,用于为高可用性模式创建Zookeeper子路径;
[root@master1 bin]# yarn-session.sh -n 2 -jm 1024 -tm 1024 -d
没有报错
好像没啥问题再去yarn查看
总感觉哪里有问题
测试
上传一份测试文件
[root@master1 test]# hadoop fs -put /root/test/word.txt /test
[root@master1 batch]# flink run WordCount.jar -input hdfs://master1:9000/test/test.txt -output hdfs://master1:9000/test/output1/word1.txt
看看yarn
内存Job管理模式(Run a Flink job on YARN)
启动测试
命令:
[root@master1 batch]# flink run -m yarn-cluster -yjm 1024 -ytm 1024 /usr/flink/flink-1.12.2/examples/batch/WordCount.jar
因为没有指定处理的文件,它会自动处理它默认的文件
运行完会自动释放内存