web-dev-qa-db-ja.com

HDFSにディレクトリが既に存在するかどうかを確認する

私は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オプションを使用してみましたが、うまくいきませんでした。これに関する提案。

注:私の問題の解決策はそれに依存していないため、ここに元のコードを投稿しないでください。

前もって感謝します。

14
user1188611

テストコマンドなしで試してください[]:

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

以来

hdfs dfs -test -d $yourdir

存在する場合は0を返し、次に

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

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 よろしく

6
Ngoc Nguyen

こんにちは、次のスクリプトを使用して、HDFSディレクトリが存在するかどうかをテストしました。私はあなたがこのテストコマンドを試してみて、うまくいかなかったことをあなたの質問で見ました。これが機能しない理由についてのトレースを提供してください。

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