私はHDFSで次のディレクトリ構造を持っています、
/analysis/alertData/logs/YEAR/MONTH/DATE/HOURS
これは、データが日単位で受信され、年/月/日/時間の形式で保存されるということです。
私はパスを渡すシェルスクリプトを書きました
"/analysis/alertData/logs" ( this will vary depending on what product of data i am handling)
次に、シェルスクリプトは年/月/日付/時間フォルダーを通過し、最新のパスを返します。
例えば:
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ディレクトリパスパスが有効かどうかをどのように検証できるかです。入力または存在しないパスとして間違ったパスを渡すとしましょう。シェルスクリプトでそれを処理する方法。
間違ったパスの例は次のとおりです。
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オプションを使用してみましたが、うまくいきませんでした。これに関する提案。
注:私の問題の解決策はそれに依存していないため、ここに元のコードを投稿しないでください。
前もって感謝します。
テストコマンドなしで試してください[]:
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オプションは、ファイルが存在するかどうかを確認し、trueの場合は0を返します。 -zオプションは、ファイルの長さがゼロかどうかを確認し、真の場合は0を返します。 -dオプションは、パスがディレクトリかどうかを確認し、trueの場合は0を返します。例:hdfs dfs -test -d $ yourdir
詳細については、以下を確認してください。 https://hadoop.Apache.org/docs/r2.4.1/hadoop-project-dist/hadoop-common/FileSystemShell.html よろしく
こんにちは、次のスクリプトを使用して、HDFSディレクトリが存在するかどうかをテストしました。私はあなたがこのテストコマンドを試してみて、うまくいかなかったことをあなたの質問で見ました。これが機能しない理由についてのトレースを提供してください。
hadoop fs -test -d $dirpath
if [ $? != 0 ]
then
hadoop fs -mkdir $dirpath
else
echo "Directory already present in HDFS"
fi