FlinkOnYarn 监控 flink任务
Flink任务一般为实时不断运行的任务,如果没有任务监控,
任务异常时无法第一时间处理会比较麻烦。
这里通过调用API接口方式来获取参数,实现任务监控。
Flink任务监控(基于API接口编写shell脚本)
一 flink-on-yarn 模式
二 编写shell 脚本
监控集群指标
http://rm-http-address:port/ws/v1/cluster/metrics
响应正文
<clusterMetrics>
<appsSubmitted>**</appsSubmitted>
<appsCompleted>**</appsCompleted>
<appsPending>0</appsPending>
<appsRunning>**</appsRunning>
<appsFailed>**</appsFailed>
<appsKilled>**</appsKilled>
<reservedMB>0</reservedMB>
<availableMB>**</availableMB>
<allocatedMB>**</allocatedMB>
<pendingMB>0</pendingMB>
<reservedVirtualCores>0</reservedVirtualCores>
<availableVirtualCores>**</availableVirtualCores>
<allocatedVirtualCores>**</allocatedVirtualCores>
<pendingVirtualCores>0</pendingVirtualCores>
<containersAllocated>**</containersAllocated>
<containersReserved>0</containersReserved>
<containersPending>0</containersPending>
<totalMB>**</totalMB>
<totalVirtualCores>**</totalVirtualCores>
<utilizedMBPercent>53</utilizedMBPercent>
<utilizedVirtualCoresPercent>**</utilizedVirtualCoresPercent>
<rmSchedulerBusyPercent>0</rmSchedulerBusyPercent>
<totalNodes>**</totalNodes>
<lostNodes>0</lostNodes>
<unhealthyNodes>**</unhealthyNodes>
<decommissioningNodes>0</decommissioningNodes>
<decommissionedNodes>0</decommissionedNodes>
<rebootedNodes>0</rebootedNodes>
<activeNodes>**</activeNodes>
<shutdownNodes>0</shutdownNodes>
<totalAllocatedContainersAcrossPartition>0</totalAllocatedContainersAcrossPartition>
<crossPartitionMetricsAvailable>false</crossPartitionMetricsAvailable>
</clusterMetrics>
clusterMetrics 对象的元素
项目 | 数据类型 | 描述 |
---|---|---|
apps已提交 | int | 提交的申请数量 |
应用已完成 | int | 完成的申请数量 |
apps待定 | int | 待处理的申请数量 |
应用程序正在运行 | int | 正在运行的应用程序数 |
apps失败 | int | 失败的应用程序数 |
应用已杀死 | int | 被终止的应用程序数 |
保留MB | 长 | 预留的内存量(以 MB 为单位) |
可用MB | 长 | 可用内存量(以 MB 为单位) |
已分配MB | 长 | 分配的内存量(以 MB 为单位) |
总MB | 长 | 总内存量(以 MB 为单位) |
保留虚拟核心 | 长 | 保留的虚拟核心数 |
可用虚拟核心 | 长 | 可用虚拟核心数 |
分配的虚拟核心 | 长 | 分配的虚拟核心数 |
totalVirtualCores 虚拟核心数 | 长 | 虚拟核心总数 |
容器已分配 | int | 分配的容器数 |
容器保留 | int | 保留的容器数 |
容器挂起 | int | 待处理的容器数 |
总节点数 | int | 节点总数 |
活动节点 | int | 活动节点数 |
丢失节点 | int | 丢失的节点数 |
不健康的节点 | int | 不正常的节点数 |
停用节点 | int | 停用的节点数 |
已停用节点 | int | 停用的节点数 |
rebooted节点 | int | 重新启动的节点数 |
shutdown节点 | int | 关闭的节点数 |
获取所有application
curl -s http://XXX:8088/ws/v1/cluster/apps
获取 state值为 RUNNING 的application任务
curl -s http://XXX:8088/ws/v1/cluster/apps?state=RUNNING
获取这个任务单个信息
curl -s http://XXX:8088/ws/v1/cluster/apps/application_1619074605427_0063 |jq .app.state
请注意,根据安全设置,用户可能无法看到所有字段。
项目 数据类型 描述 编号 字符串 应用程序 ID 用户 字符串 启动应用程序的用户 名字 字符串 应用程序名称 队列 字符串 提交应用程序的队列 州 字符串 根据 ResourceManager 的应用程序状态 - 有效值是 YarnApplicationState 枚举的成员:NEW、NEW_SAVING、SUBMITTED、ACCEPTED、RUNNING、FINISHED、FAILED、KILLED finalStatus 字符串 应用程序的最终状态(如果已完成)(由应用程序本身报告)有效值是 FinalApplicationStatus 枚举的成员:UNDEFINED、SUCCEEDED、FAILED、KILLED 进展 浮 以百分比表示的申请进度 trackingUI 字符串 跟踪 URL 当前指向的位置 - 历史记录(用于历史记录服务器)或 ApplicationMaster trackingUrl 字符串 可用于跟踪应用程序的 Web URL 诊断 字符串 详细的诊断信息 clusterId 长 集群 ID 应用程序类型 字符串 应用程序类型 application标签 字符串 应用程序的逗号分隔标记 优先权 字符串 所提交申请的优先权 开始时间 长 应用程序启动的时间(自纪元以来的毫秒) 完成时间 长 应用程序完成的时间(以纪元以来的毫秒数为单位) elapsedTime 长 自应用程序启动以来经过的时间(以毫秒为单位) amContainer日志 字符串 应用程序主容器日志的 URL amHostHttp地址 字符串 应用程序主机的节点 http 地址 amRPCAddress 字符串 应用程序主机的 RPC 地址 已分配MB int 分配给应用程序正在运行的容器的内存总和(以 MB 为单位) 已分配VCores int 分配给应用程序正在运行的容器的虚拟核心的总和 running容器 int 当前为应用程序运行的容器数 memorySeconds 长 应用程序分配的内存量(兆字节-秒) vcore秒数 长 应用程序分配的 CPU 资源量(虚拟内核 - 秒) queueUsagePercentage 浮 应用正在使用的队列资源的百分比 clusterUsage百分比 浮 应用正在使用的群集资源的百分比。 抢占ResourceMB 长 抢占式容器使用的内存 preemptedResourceVCores 长 抢占容器使用的虚拟核心数 numNonAMContainer抢占 int 抢占的标准容器数 numAMContainer抢占 int 抢占的应用程序主容器数 logAggregationStatus 字符串 日志聚合的状态 - 有效值是 LogAggregationStatus 枚举的成员:DISABLED、NOT_START、RUNNING、RUNNING_WITH_FAILURE、SUCCEEDED、FAILED、TIME_OUT unmanaged应用程序 布尔 应用程序是否处于非托管状态。 appNodeLabelExpression 字符串 节点标签表达式,用于标识默认情况下应在其上运行应用程序容器的节点。 amNodeLabel表达式 字符串 节点标签表达式,用于标识应用程序的 AM 容器预期在其上运行的节点。
jq,是linux一个很方便的json处理工具
通俗的说就是一个能够接受json,处理json,输出json的程序,反正很好用。
安装起来也非常的方便,直接使用yum即可安装。linux下离线安装jq工具 - 代码天地 (codetd.com)
yum install jq
编写shell脚本
由于公司离线yarn和实时yarn 采用是分开的方式。
只需要监控实时yarn 任务有没有处于RUNNING,达到监控的目的
这里shell脚本也只记录,flink-on-yarn 这种部署方式任务监控
shell脚本水平有限,大家多多谅解,欢迎指导shell脚本实现功能:
获取线运行job任务,记录到日志文件。下一次脚本调用时候读取日志文件,判断状态。
不是RUNNING,就告警同时重新记录日志。
#!/bin/bashJoblist=`cat /opt/shell/logs/flink_job.log` #获取记录job的log文件
let i=0 #获取任务数
let log_count=0 #获取日志中的任务数
start_count=RUNNING #判断任务是否存在异常############## 1 判断日志文件内容是否为空,为空时自动读取flink任务并记录到日志文件 #########
if [ -z "$Joblist" ]
thenwhile :dojob_id[$i]=`curl -s http://XXX:8088/ws/v1/cluster/apps?state=RUNNING |jq .apps.app[$i].id`if [ ${job_id[$i]} = "null" ];thenbreakelseecho ${job_id[$i]}echo ${job_id[$i]}>>/opt/shell/logs/flink_job.loglet i++fidone
fi############## 2 读取文件中JOB任务 ##################let i=0
while read line
doJOB[$i]=$linelet i++
done</opt/shell/logs/flink_job.loglog_count=$i #获取日志中的任务数########### 3 判断任务状态,是否为RUNNIG,不是则邮件告警 ###############
for ((j=0;j<i;j++))
doJOB_ID=${JOB[$j]//\"}JOB_status=`curl -s http://XXXX:8088/ws/v1/cluster/apps/$JOB_ID | jq .app.state`JOB_NAME=`curl -s http://XXX:8088/ws/v1/cluster/apps/$JOB_ID | jq .app.name`START=$[`curl -s http://XXX:8088/ws/v1/cluster/apps/$JOB_ID | jq .app.startedTime` / 1000]# echo "JOB_NAME: "$JOB_NAME
# echo 启动时间: `date -d @$START +"%F %H:%M:%S"`
# echo "JOB_status: " ${JOB_status//\"}#echo -e "【$JOB_NAME】 \n JOB_ID: $JOB_ID \n 启动时间: `date -d @$START +"%F %H:%M:%S"` \n 检查时间: `date "+%Y-%m-%d %H:%M:%S"` \n 目前状态: $JOB_status"
#echo "=============================================="if [ ${JOB_status//\"} != "RUNNING" ];thenSUBJECT="【异常告警】Flink任务异常"TEXT="Flink任务 【$JOB_NAME】 异常故障 \n\nJOB_ID: $JOB_ID\n\n启动时间: `date -d @$START +"%F %H:%M:%S"` \n\n检查时间: `date "+%Y-%m-%d %H:%M:%S"` \n\n目前状态: $JOB_status"echo -e $TEXT | mail -s $SUBJECT 邮箱地址start_count=erronfi
done########### 4 出现任务异常,重新读取job 任务记录到日志文件 ###############let i=0
if [ $start_count == "erron" ];thenecho '重新写入日志文件'while :dojob_id[$i]=`curl -s http://XXXX:8088/ws/v1/cluster/apps?state=RUNNING |jq .apps.app[$i].id`if [ ${job_id[$i]} = "null" ];thenbreakelif [ $i == 0 ]; thenecho ${job_id[$i]}>/opt/shell/logs/flink_job.logelseecho ${job_id[$i]}>>/opt/shell/logs/flink_job.logfilet i++donestart_count=RUNNING
fi########### 5 判断线上任务数是否一致,是否有新任务增加 ###############let i=0
while :
dojob_id[$i]=`curl -s http://XXX:8088/ws/v1/cluster/apps?state=RUNNING |jq .apps.app[$i].id`if [ ${job_id[$i]} = "null" ];thenbreakelselet i++fi
done
let count=$i #线上任务数
echo "==========================线上最新RUNNING状态任务数: "$count
echo "==========================日志RUNNING状态任务数: "$log_countif [ ! $count -eq $log_count ]; thenecho "现有RUNNING状态任务数不相等于已记录的任务数"echo ${job_id[0]} >/opt/shell/logs/flink_job.logfor ((i=1;i<count;i++))doecho "重新写入JOB: "${job_id[$i]}echo ${job_id[$i]}>> /opt/shell/logs/flink_job.logdonefiecho "======================当前时间: `date "+%Y-%m-%d %H:%M:%S"`======================================="
echo ================================================================================================
echo =====================================本次crontab监控结束========================================
echo ================================================================================================
Yarn REST API 使用指南-阿里云开发者社区
Apache Hadoop 3.0.1 – ResourceManager REST API。
相关文章:
FlinkOnYarn 监控 flink任务
Flink任务一般为实时不断运行的任务,如果没有任务监控, 任务异常时无法第一时间处理会比较麻烦。 这里通过调用API接口方式来获取参数,实现任务监控。 Flink任务监控(基于API接口编写shell脚本) 一 flink-on-yarn 模式 二 编写she…...
C++内存管理机制(侯捷)笔记1
C内存管理机制(侯捷) 本文是学习笔记,仅供个人学习使用。如有侵权,请联系删除。 参考链接 Youtube: 侯捷-C内存管理机制 Github课程视频、PPT和源代码: https://github.com/ZachL1/Bilibili-plus 第一讲primitives的笔记 截至…...
【论文阅读】Non-blocking Lazy Schema Changes in Multi-Version
Non-blocking Lazy Schema Changes in Multi-Version Database Management Systems 1. Intro 1.1 Motivation 一个是online能够提供不停机的更新的能力,在很多业务系统里面是必要的。第二个是满足高可用,SaaS、PaaS要提供高可用的系统给用户ÿ…...
Rust 最新版1.75.0升级记
升级方法 稳定版 C:\>rustup update stable info: syncing channel updates for stable-x86_64-pc-windows-msvc info: latest update on 2023-12-28, rust version 1.75.0 (82e1608df 2023-12-21) info: downloading component cargo 5.9 MiB / 5.9 MiB (100 %) 3.…...
使用 KubeSphere 与极狐GitLab 打造云原生持续交付系统
极狐GitLab 简介 极狐GitLab 是一个一体化的 DevOps 平台,可以简单理解为 GitLab 在国内的“发行版”。是由极狐(GitLab)公司推出的产品(极狐(GitLab)公司是以“中外合资3.0”模式成立的公司,在国内独立运营,为国内用户提供适合本…...
EasyExcel的追加写入(新增POI、CSV)
总结:目前市面上流行的2种 EasyExcel和POI都不是真正的对物理excel文件进行追加导入。只是在缓存里面追加,最后一次性写入,并不能解决内存占用问题。 1.EasyExcel2.POI3.CSV 无非就是下面两种逻辑: 1.for循环查询数据,…...
JetBrains 开发工具——免费教育许可申请流程
JetBrains 开发工具——免费教育许可申请流程 本文将详细介绍通过教育邮箱申请Free Educational Licenses. Free Educational Licenses地址 1.选择符合自己的申请入口 2.填写申请表单提交 官方指南 😃😃😃...
打造高性价比小程序,轻松降低成本
随着移动互联网的普及,小程序已经成为一个热门的应用开发方向。然而,对于许多企业和个人而言,制作一个小程序的费用却让人望而却步。那么,如何以最低的成本制作一款高性价比的小程序呢? 答案很简单,只需要找…...
mysql 索引优化查询
MySQL的索引可以提高数据库查询性能。下面是一些常用的MySQL索引优化技巧: 创建合适的索引:根据查询条件选择合适的列作为索引,并确保这些索引在WHERE子句中被使用到。 示例代码:CREATE INDEX idx_name ON table_name (column_nam…...
跟着cherno手搓游戏引擎【4】窗口抽象、GLFW配置
引入GLFW: 在vendor里创建GLFW文件夹: 在github上下载,把包下载到GLFW包下。 GitHub - TheCherno/glfw: A multi-platform library for OpenGL, OpenGL ES, Vulkan, window and input修改SRC/premake5.lua的配置:12、13、15、36…...
Tomcat基础升华学习
01 What is Tomcat 1.1 Tomcat官网 官网 :https://tomcat.apache.org 1.2 Understand 为什么说Tomcat是Servlet之类技术的实现? 在我们的理解中,Tomcat可以称为Web容器或者Servlet容器 不妨通过手写一个Tomcat来推导一下 1.2.1 创建Tomc…...
一种具有轨迹优化的无人驾驶车实时运动规划器 论文阅读
论文题目:A Real-Time Motion Planner with Trajectory Optimization for Autonomous Vehicles Abstract 本文的实时规划器首先将空间离散化,然后基于一组成本函数搜索出最佳轨迹。迭代优化所得到的轨迹的Path和Speed。post-optimization计算复杂度低&…...
GPDB - 高可用 - 流复制状态
GPDB - 高可用 - 流复制状态 GPDB的高可用基于流复制,通过FTS进行自动故障切换。自动故障切换需要根据primary-mirror流复制的各种状态进行判断。本节就聊聊primary-mirror流复制的各种状态。同样适用于PgSQL 1、WalSndState typedef enum WalSndState {WALSNDSTATE…...
最佳解决方案:如何在网络爬虫中解决验证码
Captcha(全自动区分计算机和人类的公开图灵测试)是广泛应用的安全措施,用于区分合法的人类用户和自动化机器人。它通过呈现复杂的挑战,包括视觉上扭曲的文本、复杂的图像或复杂的拼图等方式,要求用户成功解决这些挑战以…...
在线项目实习分享:股票价格形态聚类与收益分析
01前置课程 数据挖掘基础数据探索数据预处理数据挖掘算法基础Python数据挖掘编程基础Matplotlib可视化Pyecharts绘图 02师傅带练 行业联动与轮动分析 通过分析申银万国行业交易指数的联动与轮动现象,获得有意义的行业轮动关联规则,并在此基础上设计量…...
c# vb.net检测字符串是否匹配一组相似度数组input Like
VB.NET 检测字符串是否符合一个数组中的多个like条件,有没有最简单的函数? 在VB.NET中,可以使用Array.Exists方法结合String.Like方法来检测一个字符串是否符合一个数组中的多个LIKE条件。Array.Exists方法用于确定序列中的任何元素是否满足…...
DEJA_VU3D - Cesium功能集 之 113-获取圆节点(2)
前言 编写这个专栏主要目的是对工作之中基于Cesium实现过的功能进行整合,有自己琢磨实现的,也有参考其他大神后整理实现的,初步算了算现在有差不多实现小140个左右的功能,后续也会不断的追加,所以暂时打算一周2-3更的样子来更新本专栏(每篇博文都会奉上完整demo的源代码…...
spring-boot项目启动类错误: 找不到或无法加载主类 com.**Application
问题:Springboot项目启动报错:错误: 找不到或无法加载主类 com.**Application 解决步骤: 1.File–>Project Structure 2.Modules–>选中你的项目–点击“-”移除 3.重新导入:点击“”号,选择Import Module&…...
搭建大数据开发环境【AutoDL容器】
租用AutoDL容器 注意:结束实验时记得将数据库数据转移存储 使用Docker实现本地IDEA连接AutoDL 后为ssh服务器地址用户名为前的端口号ssh密码为用户密码 安装JDK 压缩包安装 Java下载地址:Oracle Java Download(hadoop不指定特定版本java&…...
写一个简单的Java的Gui文本输入窗口,JFrame的简单使用
JFrame是指一个计算机语言-java的GUI程序的基本思路是以JFrame为基础,它是屏幕上window的对象,能够最大化、最小化、关闭。 Swing的三个基本构造块:标签、按钮和文本字段;但是需要个地方安放它们,并希望用户知道如何处理它们。JFrame 类就是解决这个问题的——它是一个容器…...
Unity中URP下抓屏的 开启 和 使用
文章目录 前言一、抓屏开启1、Unity下开启抓屏2、Shader中开启抓屏 二、抓屏使用1、设置为半透明渲染队列,关闭深度写入2、申明纹理和采样器3、在片元着色器使用请添加图片描述 三、测试代码 前言 我们在这篇文章中看一下,URP下怎么开启抓屏。 一、抓屏…...
业务题day01
1-1 请说一下你项目中是如何进行项目管理和发布的 我们项目使用的是Gogs进行代码托管,Jenkins进行项目自动运维发布。 在我们的项目中,我们使用Gogs进行代码托管和版本控制,以确保团队成员可以协同开发和管理代码。 Gogs是一个轻量级的、开…...
DEJA_VU3D - Cesium功能集 之 114-雷达效果(基础效果)
前言 编写这个专栏主要目的是对工作之中基于Cesium实现过的功能进行整合,有自己琢磨实现的,也有参考其他大神后整理实现的,初步算了算现在有差不多实现小140个左右的功能,后续也会不断的追加,所以暂时打算一周2-3更的样子来更新本专栏(每篇博文都会奉上完整demo的源代码…...
【Leetcode】2696. 删除子串后的字符串最小长度
文章目录 题目思路代码 题目 2696. 删除子串后的字符串最小长度 思路 计算通过删除字符串中的 “AB” 和 “CD” 子串后,可获得的最终字符串的最小长度。 主要思路是使用一个栈来模拟字符串的处理过程,每次遍历字符串时,如果当前字符和栈…...
利用gulp工具对常规web项目进行压缩打包
前言 对于一个常规的web项目,如下项目目录 |- imgs | - img1.png | - img2.png |- js | - user.js | - utils.js |- css | - index.css | - user.css |- html | - user.html |- index.html可以使用各种构建工具(如webpack、gulp、grunt等)来…...
面试经典题---68.文本左右对齐
68.文本左右对齐 我的解法: 两层while循环嵌套,外层循环用于处理不同行,内层while循环计算出每行应有的单词个数。 使用left和right记录一行中应有的单词下标,即当前行应包含从words[left]到words[right-1]这count个单词…...
完整的模型验证套路
读取图片 from PIL import Imageimg_path "../Yennefer_of_Vengerberg.jpg" image Image.open(img_path) print(image)转换成灰度图(可选) image image.convert(L) image.show()转换成RGB格式 image image.convert(RGB)因为png格式是四…...
内 存 取 证
1.用户密码 从内存中获取到用户admin的密码并且破解密码,以Flag{admin,password}形式提交(密码为6位); 1)查看帮助 -h ./volatility_2.6_lin64_standalone -h 2)获取内存镜像文件的信息 imageinfo ./volatility_2.6_lin64_stand…...
【PHP】价格区间字段验证,如4万-5万
参数值示例: $str1 "4万-5万"; $str2 "4万-5万元"; $str3 "5万元以内"; 以下是一个PHP示例,用于检查字符串是否满足要求: function checkString($str) {// 检查字符串中是否包含"-"或"以内…...
安徽省暨合肥市“希望工程·梦想计划”小盖茨机器人捐赠启动仪式举行
1月5日,安徽省暨合肥市“希望工程梦想计划”小盖茨机器人捐赠启动仪式在合肥市一六八玫瑰园学校东校区举行。共青团安徽省委副书记叶征,北京儒布特教育科技有限公司董事牛俊明,北京儒布特教育科技有限公司市场总监高进,安徽省青基…...
电商网站布局设计/网上电商平台开发
大家对于微软的Surface系列想必都已经非常熟悉了,但是Surface家族中还有一款大家伙,它自从2015年上市开始便一直处于供不应求的状态,这就是Surface Hub,一台拥有84寸屏幕的巨型平板电脑。微软Surface Hub的工程总监Peter Oehler先…...
常用的网站开发语言有哪些/石家庄seo扣费
用过了很多压测工具,却一直没找到中意的那款。最近试了wrk感觉不错,写下这份使用指南给自己备忘用,如果能帮到你,那也很好。 安装 wrk支持大多数类UNIX系统,不支持windows。需要操作系统支持LuaJIT和OpenSSL࿰…...
mvc6 网站开发实战/十大免费网站推广入口
第一:IDP的申请1.先在 iPhone DevCenter上注册成为iphone developer2.加入iPhone开发程序项目 iPhone Developer Program Apply Now3.打算收费的都建议选择99刀那个,QTY是个数的意思。1就好。4.选择地区,发现没有china,不要紧&…...
wordpress制作的网页/网站排行
一、前言当前有许多有发贴跟交流功能的网站,并且内容类网站(如视频网站或硬件站)也基本开始支持。但对于更专业化跟短篇的文章来说,往往还要用到更多的排版及格式。于是出现了富文本编辑器以及标记语言Markdown。这两种编辑方法现在正在成为主流。但是他…...
做任务挣钱网站/网站排名快速提升工具
对于 Mac 用户,Dock 既可以是您隐藏起来从不使用的工具,也可以是您每天多次依赖的工具。 如果您属于后者,那么这里有一些炫酷技巧可以让您将 Mac 的 Dock 变成一个更高效的工具。 准备好了吗? 让我们开始吧。 在 Dock 图标之间添…...
试用平台网站建设/seo网页优化公司
原标题:教你win10 1909系统如何将管理员名称更改为个性又霸气win10 1909版本系统如何更改管理员名称?最近很多小伙伴对于自己电脑默认的管理员名字不喜欢,想要自己改一个更霸气的!那么接下来一起看看win10 1909更改管理员名称方法吧!教你改一个个性又…...