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, 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.
参数说明:
- -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 0 2018-07-03 13:26 /user/wdtest/.fusion
-rw-r--r-- 3 fusionuser wdtest 908 2018-07-06 22:37 /user/wdtest/hosts
3.1.测试路径是否存在
1、编写测试脚本如下。
#!/bin/sh
path=$1
hdfs dfs -test -e ${path}
if [ $? -eq 0 ]; then
echo "Path is exist!"
else
echo "Path is not exist!"
fi
2、执行 ./etest.sh /user/wdtest
命令,运行测试脚本,验证输出结果。
3.2.测试目录是否存在
1、编写测试脚本如下。
#!/bin/bash
path=$1
hdfs dfs -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
命令,运行测试脚本,验证输出结果。
3.3.测试文件是否存在
1、编写测试脚本如下。
#!/bin/sh
path=$1
path=$1
hdfs dfs -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
命令,运行测试脚本,验证输出结果。
3.4.测试路径大小是否大于0
#!/bin/sh
path=$1
hdfs dfs -test -s ${path}
if [ $? -eq 0 ]; then
echo "Is greater than zero bytes in size!"
else
echo "Is not greater than zero bytes in size!"
fi
3.5.测试路径大小是否等于0
#!/bin/sh
path=$1
hdfs dfs -test -z ${path}
if [ $? -eq 0 ]; then
echo "Is zero bytes in size!"
else
echo "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
返回值是不输出的,需要通过 “$?”
这个特殊变量获取返回值;文章来源:https://www.toymoban.com/news/detail-423450.html
3、判断 HDFS 文件目录是否存在后,可以执行比如创建、删除目录或文件等操作,当然还有一些更高级的玩法,这里就不演示了。文章来源地址https://www.toymoban.com/news/detail-423450.html
到了这里,关于【Shell-HDFS】使用Shell脚本判断HDFS文件、目录是否存在的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!