如何解析Yarn日志获取vcores与内存等性能指标?
我来帮你搞定这个问题——从庞大的Yarn日志里提取vcores和内存的使用数据其实有几个实用的方法,不用手动翻那堆日志:
方法1:用grep快速过滤核心日志行
既然你已经把日志导出到myYarnLog.txt,直接用grep定位你需要的关键词就行,精准筛选出和资源分配相关的行:
- 提取内存相关记录(对应你提到的Aggregate Resource Allocation和RAM memory):
grep -i "Aggregate Resource Allocation\|RAM memory" myYarnLog.txt - 提取vcores虚拟CPU的分配统计:
这些命令会直接把所有包含目标关键词的行筛出来,跳过无关的日志内容。grep -i "vcores\|virtual CPU\|CPU allocation" myYarnLog.txt
方法2:用awk解析并计算性能指标
如果不只是想看原始记录,还需要计算统计指标(比如最大/平均内存、vcores使用量),awk是绝佳工具,能帮你自动提取数值并做计算:
统计内存使用情况
假设日志行的格式类似Aggregate Resource Allocation: 1024 MB,可以用下面的命令提取数值并算出总、最大、平均内存:
grep "Aggregate Resource Allocation" myYarnLog.txt | awk '{print $NF}' | awk -F'MB' '{sum+=$1; max=($1>max)?$1:max} END {print "总内存分配: " sum " MB"; print "最大内存分配: " max " MB"; print "平均内存分配: " sum/NR " MB"}'
简单解释:先筛出目标行,提取最后一个字段(内存数值),然后累加求和、记录最大值,最后输出统计结果。
统计vcores分配情况
如果vcores的日志行格式是vcores allocated: 4,用类似的逻辑可以算出vcores的总分配量、最大/最小值和平均值:
grep "vcores allocated" myYarnLog.txt | awk '{print $NF}' | awk '{sum+=$1; max=($1>max)?$1:max; min=($1<min||NR==1)?$1:min} END {print "总vcores分配: " sum; print "最大vcores分配: " max; print "最小vcores分配: " min; print "平均vcores分配: " sum/NR}'
这个结果能帮你直观分析并行任务的CPU资源使用情况。
方法3:处理结构化日志片段(如果适用)
有些Yarn日志会包含JSON格式的资源元数据,如果你的日志里有这类内容,可以用jq工具(需要提前安装)来解析,输出更规整的结果:
比如找到包含resourceAllocation的JSON行,提取内存和vcores:
grep -o '{"resourceAllocation":.*}' myYarnLog.txt | jq '.resourceAllocation | {memory: .memory, vcores: .vcores}'
这个命令会直接输出格式化的键值对,看起来非常清晰。
小提示
如果日志里的关键词和我假设的不一样,可以先用grep -n "RAM\|vcores" myYarnLog.txt查看几行实际的日志格式,再调整grep和awk的匹配规则——毕竟不同Yarn版本的日志格式可能略有差异。
内容的提问来源于stack exchange,提问作者Peter Krauss
相关产品推荐
相关产品推荐

