【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, 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 返回值是不输出的,需要通过 “$?” 这个特殊变量获取返回值;

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

猜你喜欢

转载自blog.csdn.net/weixin_53543905/article/details/130237460