【小技巧】Shell批量处理报错信息,检测本地jar包是否存在

【小技巧】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字符串信息输出。

后话

如果有帮助的,记得点赞、关注。在公众号《数舟》中,可以免费获取专栏《数据仓库》配套的视频课程、大数据集群自动安装脚本,并获取进群交流的途径。

我所有的大数据技术内容也会优先发布到公众号中。如果对某些大数据技术有兴趣,但没有充足的时间,在群里提出,我为大家安排分享。

公众号自取:

公众号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桥路丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值