Ответ 1
Попробуйте без команды test []:
if $(hadoop fs -test -d $yourdir) ; then echo "ok";else echo "not ok"; fi
У меня есть следующая структура каталогов в 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, которые не работали для меня. Любое предложение для этого.
ПРИМЕЧАНИЕ. Не отправляйте мой оригинальный код здесь, так как решение моей проблемы не зависит от него.
Спасибо заранее.
Попробуйте без команды test []:
if $(hadoop fs -test -d $yourdir) ; then echo "ok";else echo "not ok"; fi
Поскольку
hdfs dfs -test -d $yourdir
вернуть 0, если существует, то
if [ $? == 0 ]; then
echo "exists"
else
echo "dir does not exists"
fi
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 С уважением
Привет, я использовал следующий script для проверки каталога HDFS или нет. Я видел в вашем вопросе, что вы пробовали эту тестовую команду и не работали. Не могли бы вы предоставить какой-либо след о том, почему это не работает.
hadoop fs -test -d $dirpath
if [ $? != 0 ]
then
hadoop fs -mkdir $dirpath
else
echo "Directory already present in HDFS"
fi
В Java мы можем проверить это, используя класс FileSystem.