Проверка того, существует ли каталог в HDFS или нет

У меня есть следующая структура каталогов в HDFS,

/analysis/alertData/logs/YEAR/MONTH/DATE/HOURS

Это данные поступают на основе и сохраняются в формате год/месяц/день/час.

Я написал оболочку script, в которой я прохожу путь до

"/analysis/alertData/logs"   ( this will vary depending on what product of data i am handling)

тогда shell script просматривает папки year/month/date/hour и возвращает самый последний путь.

Например:

 Directories present in HDFS has following structure: 

 /analysis/alertData/logs/2014/10/22/01
 /analysis/alertData/logs/2013/5/14/04

 shell script is given path till :   " /analysis/alertData/logs "

 it outputs most recent directory :    /analysis/alertData/logs/2014/10/22/01

Мой вопрос заключается в том, как я могу проверить правильность пути пути HDFS к оболочке script или нет. Допустим, что я передаю неправильный путь как вход или путь, которого не существует, так как обрабатывать это в shell script.

Пример неправильного пути может быть:

  wrong path   :  /analysis/alertData ( correct path :  /analysis/alertData/logs/ )
  wrong path   :  /abc/xyz/  ( path does not exit in HDFS )

Я пробовал использовать опции Hadoop dfs -test -z/-d/-e, которые не работали для меня. Любое предложение для этого.

ПРИМЕЧАНИЕ. Не отправляйте мой оригинальный код здесь, так как решение моей проблемы не зависит от него.

Спасибо заранее.

Ответ 1

Попробуйте без команды test []:

if $(hadoop fs -test -d $yourdir) ; then echo "ok";else echo "not ok"; fi

Ответ 2

Поскольку

hdfs dfs -test -d $yourdir

вернуть 0, если существует, то

if [ $? == 0 ]; then
    echo "exists"
else
    echo "dir does not exists"
fi

Ответ 3

Hadoop fs устарела Использование: hdfs dfs -test - [ezd] URI

Параметры: Опция -e проверит, существует ли файл, и вернет 0, если истина. Опция -z проверит, имеет ли файл нулевую длину, и вернет 0, если истина. Опция -d проверит, является ли путь каталогом, и вернет 0, если истина. Пример: hdfs dfs -test -d $ yourdir

Пожалуйста, проверьте следующее для получения дополнительной информации: https://hadoop.apache.org/docs/r2.4.1/hadoop-project-dist/hadoop-common/FileSystemShell.html С уважением

Ответ 4

Привет, я использовал следующий script для проверки каталога HDFS или нет. Я видел в вашем вопросе, что вы пробовали эту тестовую команду и не работали. Не могли бы вы предоставить какой-либо след о том, почему это не работает.

 hadoop fs -test -d $dirpath
    if [ $? != 0 ]
            then
                hadoop fs -mkdir $dirpath
                else
                    echo "Directory already present in HDFS"
    fi

Ответ 5

В Java мы можем проверить это, используя класс FileSystem.

FileSystem