基于Yarn搭建Flink

基于Yarn搭建Flink

1. 概述

1.1 Yarn 简介

Apache Hadoop YARN是一个资源提供程序,受到许多数据处理框架的欢迎。Flink服务被提交给 YARN 的 ResourceManager,后者再由 YARN NodeManager 管理的机器上生成容器。Flink 将其 JobManager 和 TaskManager 实例部署到此类容器中。

在这里插入图片描述

Flink 可以根据在 JobManager 上运行的作业所需的处理槽数量动态分配和取消分配任务管理器资源。

1.2 Flink的重要角色

  • JobManager:类似spark中master,负责资源申请,任务分发,任务调度执行,checkpoint的协调执行;可以搭建HA,双master。

  • TaskManager:类似spark中的worker,负责任务的执行,基于dataflow(spark中DAG)划分出的task;与jobmanager保持心跳,汇报任务状态。

在这里插入图片描述

2. Yarn环境准备

本环境基于Hadoop-3.1.4搭建,可以参考《Hadoop3.1.4分布式搭建》

  • 通过运行 yarn top 来确保您的 YARN 集群已准备好接受 Flink 应用程序。它应该不显示任何错误消息。

    yarn top
    

在这里插入图片描述

  • 从下载页面下载最近的 Flink 发行版并解压缩。

    wget https://archive.apache.org/dist/flink/flink-1.15.4/flink-1.15.4-bin-scala_2.12.tgz
    
  • 重要事项 请确保设置了HADOOP_CLASSPATH环境变量(可以通过运行 echo $HADOOP_CLASSPATH 进行检查)。如果没有,请配置使用。

    for i in {133..135} 151 157;
    do
    	echo -e "\n********************************** Config ubuntu@10.10.10.$i **********************************\n"
    	scp ~/Downloads/flink-1.15.4-bin-scala_2.12.tgz ubuntu@10.10.10.$i:~/;
    	ssh ubuntu@10.10.10.$i 'sudo mkdir -p /opt/software/; \
    	#sudo rm -f /etc/profile.d/Z99-wntime-env-config.sh; \
    	sudo touch /etc/profile.d/Z99-wntime-env-config.sh; \
    	sudo tar -zxf ~/flink-1.15.4-bin-scala_2.12.tgz -C /opt/software/;';
    	# config env
    	rm -rf /tmp/"10.10.10.$i"/;
    	mkdir -p /tmp/"10.10.10.$i"/;
    	scp ubuntu@10.10.10.$i:/etc/profile.d/Z99-wntime-env-config.sh /tmp/"10.10.10.$i"/Z99-wntime-env-config.sh;
    	sudo cat>>/tmp/"10.10.10.$i"/Z99-wntime-env-config.sh<<EOF
    # HADOOP_CLASSPATH
    export HADOOP_CLASSPATH=\`hadoop classpath\`
    export FLINK_HOME=/opt/software/flink-1.15.4
    export PATH=\$PATH:\$FLINK_HOME/bin  
    
    EOF
    	cat /tmp/10.10.10.$i/Z99-wntime-env-config.sh;
    	scp /tmp/10.10.10.$i/Z99-wntime-env-config.sh ubuntu@10.10.10.$i:~/Z99-wntime-env-config.sh;
    	ssh ubuntu@10.10.10.$i 'sudo mv ~/Z99-wntime-env-config.sh /etc/profile.d/Z99-wntime-env-config.sh; \
    	sudo chmod +x /etc/profile.d/Z99-wntime-env-config.sh; \
    	source /etc/profile; \
    	echo $HADOOP_CLASSPATH;'	
    done;
    
    

    配置conf及权限

    for i in {133..135} 151 157;
    do
    	echo -e "\n********************************** Config ubuntu@10.10.10.$i **********************************\n"
    	ssh ubuntu@10.10.10.$i 'sudo chown -R ubuntu:ubuntu /opt/software/; \
    	source /etc/profile; \
    	flink -v;';
    done;
    
    
    for i in {133..135} 151 157;
    do
    	echo -e "\n********************************** Config ubuntu@10.10.10.$i **********************************\n"
    	# 指定jobmanager,yarn模式会被覆盖不起作用;
    	ssh ubuntu@10.10.10.$i "sed -i 's/jobmanager.rpc.address: localhost/jobmanager.rpc.address: k8s-m134/g' /opt/software/flink-1.15.4/conf/flink-conf.yaml";
    	ssh ubuntu@10.10.10.$i "sed -i 's/host: localhost/host: 0.0.0.0/g' /opt/software/flink-1.15.4/conf/flink-conf.yaml";
    	ssh ubuntu@10.10.10.$i "sed -i 's/address: localhost/address: 0.0.0.0/g' /opt/software/flink-1.15.4/conf/flink-conf.yaml";
    	# yarn模式仍旧起作用;
    	ssh ubuntu@10.10.10.$i "sed -i 's/#web.submit.enable: false/web.submit.enable: true/g' /opt/software/flink-1.15.4/conf/flink-conf.yaml";
    	ssh ubuntu@10.10.10.$i "sed -i 's/#web.cancel.enable: false/web.cancel.enable: true/g' /opt/software/flink-1.15.4/conf/flink-conf.yaml";
    	ssh ubuntu@10.10.10.$i "sed -i 's/# io.tmp.dirs: \/tmp/io.tmp.dirs: \/opt\/software\/flink-1.15.4\/data/g' /opt/software/flink-1.15.4/conf/flink-conf.yaml";
        ssh ubuntu@10.10.10.$i "sed -i 's/#rest.port: 8081/#rest.port: 8081\nrest.flamegraph.enabled: true/g' /opt/software/flink-1.15.4/conf/flink-conf.yaml";
        # classloader.check-leaked-classloader
        ssh ubuntu@10.10.10.$i "sed -i 's/# classloader.resolve-order: child-first/# classloader.resolve-order: child-first\nclassloader.check-leaked-classloader: false/g' /opt/software/flink-1.15.4/conf/flink-conf.yaml";
    done;
    
    

3. FLINK 在 YARN 上支持的部署模式

对于生产使用,官方建议在 Application Mode下部署Flink应用程序,因为它可以在应用程序之间提供更好的隔离。

3.1 Session Mode

此部署模式,共享jobmanager和taskmanager,所有的job都在一个runtime中运行。

在这里插入图片描述

  • 优点:
    • 启动集群只有jobmanager,提交job才去yarn申请资源启动taskmanager,任务完成自动释放taskmanager,资源伸缩性好。
    • 资源利用率高。
  • 缺点:
    • 资源隔离性差

开启flink yarn-session集群

使用bin/yarn-session.sh --help 查看可用参数

在这里插入图片描述

会话模式有两种操作模式:

  • attached mode(默认):yarn-session.sh 客户端将 Flink 集群提交到 YARN,但客户端继续运行,跟踪集群的状态。如果群集失败,客户端将显示错误。如果客户端被终止,它也会向群集发出关闭信号。

  • detached mode(-d 或 --detached):yarn-session.sh 客户端将 Flink 集群提交到 YARN,然后客户端返回。需要再次调用客户端或 YARN 工具来停止 Flink 集群。

# 启动 
./bin/yarn-session.sh -d
# 会话模式将在 /tmp/中创建一个隐藏的 YARN 属性文件/tmp/.yarn-properties-<username>,提交作业时,命令行界面将选取该文件以进行群集发现。

# 输出
2023-05-30 13:33:24,304 INFO  org.apache.flink.yarn.YarnClusterDescriptor                  [] - Found Web Inter
JobManager Web Interface: http://k8s-m135:38027
2023-05-30 13:33:24,541 INFO  org.apache.flink.yarn.cli.FlinkYarnSessionCli                [] - The Flink YARN
$ echo "stop" | ./bin/yarn-session.sh -id application_1685349449822_0003
If this should not be possible, then you can also kill Flink via YARN's web interface or via:
$ yarn application -kill application_1685349449822_0003
Note that killing Flink might not clean up all job artifacts and temporary files.

此时 Flink JobManager 运行在 k8s-m135节点,WebUI访问地址 http://k8s-m135:38027

在这里插入图片描述

也可以通过Yarn WebUI访问

在这里插入图片描述
在这里插入图片描述

提交任务

  • 方式一,指定flink集群,application_1685349449822_0006是flink集群yarn app-id
./bin/flink run -t yarn-session -c org.apache.flink.streaming.examples.windowing.TopSpeedWindowing -Dyarn.application.id=application_1685349449822_0007 ./examples/streaming/TopSpeedWindowing.jar

注意:

若未指定 -c fullclassname时,报以下错误:

在这里插入图片描述

若未指定 -Dyarn.application.id时,可能报与上面同样错误,或No ExecutorFactory found to execute the application

测试最终需要同时指定 -c 及 -Dyarn.application.id,任务才能正常启动

在这里插入图片描述

/tmp/.yarn-properties-ubuntu已发现,但不知什么原因未生效。

  • 方式二,在flink web界面上传jar包提交

停止flink yarn-session集群

  • 进入客户端交互界面
./bin/yarn-session.sh -id application_1685349449822_0003
优雅地停止任务
echo "stop" | ./bin/yarn-session.sh -id application_1685349449822_0003
  • 强制杀掉任务
yarn application -kill application_1685349449822_0003

NOTE: 启动集群只有jobmanager,提交job才去yarn申请资源启动taskmanager,任务完成自动释放taskmanager

3.2 Per-Job Mode (deprecated)

独享jobmanager和taskmanager,为每一个job独胆启动一个runtime

在这里插入图片描述

  • 优点:
    • 资源充分隔离
  • 劣势:
    • 资源相对比较浪费

Per job Cluster模式将在YARN上启动Flink集群,然后在本地运行提供的应用程序jar,最后将JobGraph提交给YARN上的JobManager。如果传递–separated参数,那么一旦提交被接受,客户端就会停止。

一旦作业停止,YARN集群将停止。

./bin/flink run -t yarn-per-job -d ./examples/streaming/TopSpeedWindowing.jar

若提示以下错误,需要在conf/flink-conf.yml配置classloader.check-leaked-classloader: false

在这里插入图片描述

配置后无报错

在这里插入图片描述

一旦部署了“Per-Job Cluster”,就可以与它交互以执行、取消或获取保存点等操作。

# List running job on the cluster
./bin/flink list -t yarn-per-job -Dyarn.application.id=application_XXXX_YY
# Cancel running job
./bin/flink cancel -t yarn-per-job -Dyarn.application.id=application_XXXX_YY <jobId>

3.3 Application Mode

application的main()运行在jobmanager上,而不是在客户端。每一个application对应一个runtime,application中可以含有多个job。

在这里插入图片描述

  • 优点:
    • job graph在flink集群内部生成,可以减轻客户端压力
    • application实现了更合理的资源隔离策略
  • 缺点:
    • 新功能,尚未经过生产大规模验证

开启flink yarn-application集群

./bin/flink run-application -t yarn-application ./examples/streaming/TopSpeedWindowing.jar

# List running job on the cluster
./bin/flink list -t yarn-application -Dyarn.application.id=application_XXXX_YY

停止flink yarn-application集群

./bin/flink cancel -t yarn-application -Dyarn.application.id=application_XXXX_YY <jobId>

注意:

当同时运行多个任务时,会出现有的任务一直处于ACCEPTED

在这里插入图片描述

解决这个问题,只需要更改Hadoop的配置文件:…/etc/hadoop/capacity-scheduler.xml

选项:yarn.scheduler.capacity.maximum-am-resource-percent从0.1改成更大,最大为1;

意思是集群中可用于运行应用程序主机的最大资源百分比 - 控制并发活动应用程序的数量。每个队列的限制与其队列容量和用户限制成正比。官方文档默认是每个队列最大使用10%的资源,即0.1

yarn.scheduler.capacity.maximum-am-resource-percent

for i in {133..135} 151 157;
do
	echo -e "\n********************************** Config ubuntu@10.10.10.$i **********************************\n"
	ssh ubuntu@10.10.10.$i 'cat /opt/software/hadoop-3.1.4/etc/hadoop/capacity-scheduler.xml|grep "percent";';
	# 这个配置文件中只有这个是percent,所以直接修改了
	ssh ubuntu@10.10.10.$i "sed -i 's/<value>0.1<\/value>/<value>0.5<\/value>/' /opt/software/hadoop-3.1.4/etc/hadoop/capacity-scheduler.xml;";
done;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/25400.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python爬虫笔记

Python爬虫笔记 一. Urllib 1. 基础请求 指定url请求返回值解码返回结果的一些操作 import urllib.request as req # 定义一个url url http://www.baidu.com# 发送请求获得相应 res req.urlopen(url)# read返回字节形式的二进制数据,需要用指定编码来解码 content res.r…

vue的虚拟DOM

vue的虚拟DOM 什么是虚拟DOM 虚拟DOM提供了一个与平台无关的抽象层&#xff0c;将应用程序的界面表示抽象为一个虚拟的DOM树。这意味着开发人员可以使用相同的代码和逻辑来描述应用程序的用户界面&#xff0c;而不需要关心具体的平台实现细节。虚拟DOM允许开发人员使用一种统…

Linux命令

准备工作 安装centos7 在镜像网下载DVD.iso或者DVD.torrent&#xff08;bit种子&#xff09;。在VMware中配置相应的信息&#xff0c;并引入iso文件&#xff0c;以便后续安装。local中&#xff1a;选择语言和时区上海software中&#xff1a;选择安装软件的内容&#xff0c;可…

基于多动作深度强化学习的柔性车间调度研究(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

通过location实现几秒后页面跳转

location对象属性 location对象属性 返回值location.href获取或者设置整个URLlocation.host返回主机&#xff08;域名&#xff09;www.baidu.comlocation.port 返回端口号&#xff0c;如果未写返回空字符串location.pathname返回路径location.search返回参数location.hash返回…

Apache网页与安全优化

一、Apache网页优化 在企业中&#xff0c;部署Apache后只采用默认的配置参数&#xff0c;会引发网站很多问题&#xff0c;换言之默认配置是针对以前较低的服务器配置的&#xff0c;以前的配置已经不适用当今互联网时代。为了适应企业需求&#xff0c;就需要考虑如何提升Apache…

遗传算法(Genetic Algorithm)

本文为阅读《遗传算法原理及应用》的笔记和心得 ISBN&#xff1a;7-118-02062-1 遗传算法简介 遗传算法是模拟生物在自然环境中的遗传和进化过程中而形成的一种自适应全局优化概率搜索算法 总的来说&#xff0c;求最优解解或近似最优解的方法主要有三种&#xff1a;枚举法、启…

数据库系统的结构

数据库模式基本概念 1.型与值 型&#xff1a;对某一类数据的结构和属性的说明。值&#xff1a;型的具体赋值。 2.模式和实例 模式&#xff1a; 数据库中全体数据的逻辑结构和特征的描述。简单来说就是数据的定义和描述。模式是元数据&#xff0c;数据是变化的&#xff0c;模…

Linux:/dev/tty、/dev/tty0 和 /dev/console 之间的区别

在Linux操作系统中&#xff0c;/dev/tty、/dev/tty0和/dev/console是三个特殊的设备文件&#xff0c;它们在终端控制和输入/输出过程中扮演着重要的角色。尽管它们看起来很相似&#xff0c;但实际上它们之间存在一些重要的区别。本文将详细介绍这三个设备文件之间的区别以及它们…

【C++系列P3】‘类与对象‘-三部曲——[基础知识](1/3)

前言 大家好吖&#xff0c;欢迎来到 YY 滴 C系列 &#xff0c;热烈欢迎&#xff01; 【 类与对象-三部曲】的大纲主要内容如下&#xff1a; 如标题所示&#xff0c;本章是【 类与对象-三部曲】三章中的第一章节——基础知识章节&#xff0c;主要内容如下&#xff1a; 目录 一.…

如何用Python写个网页爬取程序

如何用Python写个网页爬取程序 准备开发工具安装PythonPython安装pipPip安装爬取插件准备好网页地址代码实现 准备开发工具 额&#xff0c;作者用的是vscode。具体怎么安装自行百度哈&#xff0c;这个都不会建议就不要学爬取了。 不忍心藏着也&#xff0c;给你个方法吧 vsc…

计算机系统漫游

重点理解部分&#xff1a; 系统硬件&#xff1a;对硬件如处理器、存储器、I/O设备有一个基本的认识&#xff0c;理解它们的基本工作原理以及它们是如何协同工作的。Hello&#xff0c;World程序运行的过程&#xff1a;了解一个C程序如何从源代码到最终在计算机上运行的全过程。…

模仿抖音直播商城带货打赏功能做一个app系统

随着人们生活和互联网的高度整合&#xff0c;越来越多的人开始转变自身消费模式&#xff0c;从实体店购物逐渐转向足不出户即可享受购物快感的网上购物。许多企业看到了电子商务背后隐藏的巨大价值&#xff0c;想要寻找合适的开发商建立属于自己的电商直播系统&#xff0c;那么…

2021-06-10 51单片机,键控流水灯——中断方式

缘由https://ask.csdn.net/questions/7444779?spm1005.2025.3001.5141 #include "reg52.h" sbit K1 P1^5; sbit K2 P1^6; sbit K3 P1^7; bit kk0; void zdsz() {EAEX0IT01; } void main() {unsigned char Xd0;unsigned int ys4747,d10;zdsz();while(1){if(!ys)…

CodeForces..学习读书吧.[简单].[条件判断].[找最小值]

题目描述&#xff1a; 题目解读&#xff1a; 给定一组数&#xff0c;分别是 “时间 内容”&#xff0c;内容分为00&#xff0c;01&#xff0c;10&#xff0c;11四种&#xff0c;求能够得到11的最小时间。 解题思路&#xff1a; 看似00&#xff0c;01&#xff0c;10&#xff0…

C语言中的类型转换

C语言中的类型转换 隐式类型转换 整型提升 概念&#xff1a; C语言的整型算术运算总是至少以缺省&#xff08;默认&#xff09;整型类型的精度来进行的为了获得这个精度&#xff0c;表达式中字符和短整型操作数在使用之前被转换为普通整型&#xff0c;这种转换成为整型提升 如…

自学大语言模型之BERT

BERT 模型由 Jacob Devlin、Ming-Wei Chang、Kenton Lee 和 Kristina Toutanova在BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding中提出。它是一种双向变换器&#xff0c;使用掩码语言建模目标和对包含多伦多图书语料库和维基百科的大型语…

C语言---初始C语言

1、初始C语言 1、编译器主要有&#xff1a;Clang、GCC、WIN-TC、MSVC、Turbo C等 什么是编译&#xff1f; test.c----------------------------->test.exe 这个过程需要经过编译、链接等过程&#xff0c;而众多编译器实现的功能就是把我们写的test.c进行编译。 2、VS20…

利用栈和队列共同解决迷宫问题

文章目录 什么是迷宫问题&#xff1f;如何解决迷宫问题&#xff1f;DFS&#xff08;深度优先搜索&#xff09;BFS&#xff08;广度优先搜索&#xff09; 总结 什么是迷宫问题&#xff1f; 迷宫问题是一道经典的算法问题&#xff0c;旨在寻找一条从起点到终点的最短路径。通常迷…

桶排序 — 计数排序和基数排序

计数排序 int类型数组&#xff0c;其中存的是员工的年龄。比如说16 - 150。对于这样的数据来讲&#xff0c;数据状况是受限的。此时如果将数组从小到大进行排序&#xff0c;该如果实现&#xff1f; 这个实现很简单&#xff0c;实现一个统计数组范围从 0 ~ 150&#xff0c;新数组…
最新文章