【Shell-HDFS】使用Shell脚本判断HDFS文件、目录是否存在
1)文档编写目的
本文主要讲述如何使用 Shell 脚本判断 HDFS 文件或目录是否存在,算是一个小技巧吧,这几天做 distcp 的时候用到的,因为要判断 HDFS 中是否存在某个目录。
Shell脚本测试:
1、测试路径是否存在。
2、测试目录是否存在。
3、测试文件是否存在。
4、测试路径大小是否大于0。
5、测试路径大小是否等于0。
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, return0.
-e: if the path exists, return0.
-f: if the path is a file, return0.
-s: if the path is not empty, return0.
-z: if the file is zero length, return0.
参数说明:
- -d:如果路径是目录,返回0
- -e:如果路径存在,返回0
- -f:如果路径是文件,返回0
- -s:如果文件的大小大于0字节则返回0
- -z:如果文件的大小为0,则返回0,否则返回1
3)Shell脚本测试
准备测试目录,包含一个文件和一个文件夹。
[root@bigdata60 ~]# hadoop fs -ls /user/wdtest
Found 2 items
drwxr-xr-x - fusionuser wdtest 02018-07-03 13:26 /user/wdtest/.fusion
-rw-r--r-- 3 fusionuser wdtest 9082018-07-06 22:37 /user/wdtest/hosts
3.1.测试路径是否存在
1、编写测试脚本如下。
#!/bin/shpath=$1
hdfs dfs -test -e ${path}if[$? -eq 0];thenecho"Path is exist!"elseecho"Path is not exist!"fi
2、执行
./etest.sh /user/wdtest
命令,运行测试脚本,验证输出结果。
3.2.测试目录是否存在
1、编写测试脚本如下。
#!/bin/bashpath=$1
hdfs dfs -test -d ${path}if[$? -eq 0];thenecho"Directory is exist!"elseecho"Directory is not exist!"fi
2、分别执行
./dtest.sh /user/wdtest
命令和
./dtest.sh /user/wdtest/aa
命令,运行测试脚本,验证输出结果。
3.3.测试文件是否存在
1、编写测试脚本如下。
#!/bin/shpath=$1path=$1
hdfs dfs -test -f ${path}if[$? -eq 0];thenecho"File is exist!"elseecho"File is not exist!"fi
2、分别执行
./ftest.sh /user/wdtest/hosts
命令和
./dtest.sh /user/wdtest/host
命令,运行测试脚本,验证输出结果。
3.4.测试路径大小是否大于0
#!/bin/shpath=$1
hdfs dfs -test -s ${path}if[$? -eq 0];thenecho"Is greater than zero bytes in size!"elseecho"Is not greater than zero bytes in size!"fi
3.5.测试路径大小是否等于0
#!/bin/shpath=$1
hdfs dfs -test -z ${path}if[$? -eq 0];thenecho"Is zero bytes in size!"elseecho"Is not zero bytes in size!"fi
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、判断 HDFS 文件目录是否存在后,可以执行比如创建、删除目录或文件等操作,当然还有一些更高级的玩法,这里就不演示了。
版权归原作者 bmyyyyyy 所有, 如有侵权,请联系我们删除。