【小技巧】Shell批量处理报错信息,检测本地jar包是否存在
最近在搭建LLAP时,遇到一些问题,直接抛出一堆错误,提示Jar不存在。
Caused by: java.io.FileNotFoundException: File /opt/app/hadoop-2.7.7/share/hadoop/common/hadoop-lzo-0.4.20.jar:/opt/app/apache-tez-0.9.1-bin/hadoop-shim-0.9.1.jar:/opt/app/apache-tez-0.9.1-bin/hadoop-shim-2.7-0.9.1.jar:/opt/app/apache-tez-0.9.1-bin/tez-api-0.9.1.jar:/opt/app/apache-tez-0.9.1-bin/tez-common-0.9.1.jar:/opt/app/apache-tez-0.9.1-bin/tez-dag-0.9.1.jar does not exist
抛出了一堆使用冒号分割的jar包字符串。当然实际报错的jar包数量更多,这里截取了一部分。
虽然后来发现问题不是jar包缺失,而且配置问题。但当时拿到这个错误时,第一反应是这些jar缺失了,手动去目录中进行核对排查。
排查了一个之后,发现jar包存在。可能是其中的某个jar出现了缺失。
但全部手动排查,工作量太大。于是想到了使用脚本批量排查。
脚本的制作思路,就是先将这一大段jar包字符串作为参数传递进去,然后shell按照冒号" : "进行分割,然后对每个jar使用ls
进行查看,如果缺失,则输出提示。
于是,最终shell脚本编写如下:
#! /bin/bash
content=$1
#遍历字符串
OLD_IFS="$IFS" #保存旧的分隔符
IFS=":"
nodes=($content)
IFS="$OLD_IFS" # 将IFS恢复成原来的
for i in "${!nodes[@]}"; do
info=`ls ${nodes[i]}`
if [ -z "$info" ]; then
echo "${nodes[i]}"
fi
done
这里主要涉及到对字符串的切分,保存为数组后,再对数据进行遍历。如果遇到不存在的jar包,则将jar字符串信息输出。
后话
如果有帮助的,记得点赞、关注。在公众号《数舟》中,可以免费获取专栏《数据仓库》配套的视频课程、大数据集群自动安装脚本,并获取进群交流的途径。
我所有的大数据技术内容也会优先发布到公众号中。如果对某些大数据技术有兴趣,但没有充足的时间,在群里提出,我为大家安排分享。
公众号自取: