温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么使用Shell脚本判断HDFS文件/目录是否存在

发布时间:2021-07-29 19:41:40 来源:亿速云 阅读:2614 作者:chen 栏目:大数据

这篇文章主要介绍“怎么使用Shell脚本判断HDFS文件/目录是否存在”,在日常操作中,相信很多人在怎么使用Shell脚本判断HDFS文件/目录是否存在问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Shell脚本判断HDFS文件/目录是否存在”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

1     文档编写目的

本文主要讲述如何使用Shell脚本判断HDFS文件或目录是否存在,算是一个小技巧吧,这几天做PoC的时候感觉还挺有用的。因为HDFS设计的是“一次写入,多次读取”,不可以修改数据,只能追加或者删除,所以,如果目标文件或目录在HDFS上已经存在的话,则无法创建成功。

测试环境:

操作系统版本为Redhat7.2

CM和CDH版本为5.11.2

文章目录结构:

    1.  文档编写目的

    2.  测试原理

    3.  Shell脚本测试

    3.1 测试路径是否存在

    3.2 测试目录是否存在

    3.3 测试文件是否存在

    4.  总结

2     测试原理

通过hadoop fs -test来判断文件或者目录是否存在,一次只能传递一个测试参数。

Usage: hadoop fs -test -[defsz] URI

-test: Only one test flag is allowed

Options:

-d: if the path is a directory, return 0.

-e: if the path exists, return 0.

-f: if the path is a file, return 0.

-s: if the path is not empty, return 0.

-z: if the file is zero length, return 0.

比如判断HDFS上的某个文件目录是否存在,可以执行如下命令:

hadoopfs -test -d $path  #判断目录是否存在

hadoopfs -test -e $path  #判断路径(文件或者目录)是否存在

3     Shell脚本测试

3.1  测试路径是否存在

1、准备测试目录,包含一个文件和一个文件夹

[root@bigdata60 ~]# hadoop fs -ls  /user/wdtest

Found 2 items

drwxr-xr-x   - fusionuser wdtest          0 2018-07-03 13:26  /user/wdtest/.fusion

-rw-r--r--   3 fusionuser wdtest        908 2018-07-06 22:37  /user/wdtest/hosts

怎么使用Shell脚本判断HDFS文件/目录是否存在

2、编写测试脚本如下:

#!/bin/sh

 

path=$1

 

hadoop fs -test -e $path

if [ $? -eq 0 ]; then

   echo "Path is exist!"

else

   echo "Path is not exist!"

fi

3、执行“./etest.sh /user/wdtest”命令,运行测试脚本,验证输出结果

怎么使用Shell脚本判断HDFS文件/目录是否存在

3.2 测试目录是否存在

1、编写测试脚本如下:

#!/bin/sh

 

path=$1

 

hadoop fs -test -d $path

if [ $? -eq 0 ]; then

   echo "Directory is exist!"

else

   echo "Directory is not exist!"

fi

2、分别执行“./dtest.sh /user/wdtest”命令和“./dtest.sh /user/wdtest/aa”命令,运行测试脚本,验证输出结果

怎么使用Shell脚本判断HDFS文件/目录是否存在

3.3 测试文件是否存在

1、编写测试脚本如下:

#!/bin/sh

 

path=$1

 

hadoop fs -test -f $path

if [ $? -eq 0 ]; then

   echo "File is exist!"

else

   echo "File is not exist!"

fi

2、分别执行“./ftest.sh /user/wdtest/hosts”命令和“./dtest.sh /user/wdtest/host”命令,运行测试脚本,验证输出结果

怎么使用Shell脚本判断HDFS文件/目录是否存在

4     总结

1、通过hadoop fs -test -[defsz] URI 可以判断HDFS文件或目录是否存在,-test一次只能传递一个测试参数,不能执行类似 hadoop fs -test -dfURI或者hadoop fs -test -d -f URI这种命令;

2、hadoop fs -test -[defsz] URI 返回值是不输出的,需要通过“$?”这个特殊变量获取返回值;

3、-s和-z命令我测试过,但觉得不怎么常用,所以没在文章中讲述,有兴趣可以自己测一下,比较简单,更换一下脚本参数即可;

4、判断HDFS文件目录是否存在后,可以执行比如创建、删除目录或文件等操作,当然还有一些更高级的玩法,这里就不演示了。

到此,关于“怎么使用Shell脚本判断HDFS文件/目录是否存在”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI