web-dev-qa-db-fra.com

Vérification si le répertoire dans HDFS existe déjà ou non

J'ai la structure de répertoires suivante dans HDFS,

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

Autrement dit, les données arrivent sur une base hebdomadaire et stockées au format année/mois/jour/heure.

J'ai écrit un script Shell dans lequel je passe le chemin jusqu'à

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

puis le script Shell parcourt les dossiers année/mois/date/heure et renvoie le chemin le plus récent.

Par exemple:

 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

Ma question est de savoir comment puis-je valider si le chemin du répertoire HDFS passe au script Shell est valide ou non. Disons que je passe un mauvais chemin en entrée ou chemin qui n'existe pas alors comment gérer cela dans le script Shell.

Un exemple de chemin erroné peut être:

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

J'ai essayé d'utiliser les options Hadoop dfs -test -z/-d/-e ne fonctionnait pas pour moi. Toute suggestion pour cela.

REMARQUE: ne pas publier mon code d'origine ici, car la solution à mon problème ne dépend pas de lui.

Merci d'avance.

14
user1188611

Essayez sans commande de test []:

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

Puisque

hdfs dfs -test -d $yourdir

retourner 0 s'il existe, alors

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

Hadoop fs est obsolète Utilisation: hdfs dfs -test - [ezd] URI

Options: L'option -e vérifiera si le fichier existe, renvoyant 0 si vrai. L'option -z vérifiera si le fichier est de longueur nulle, retournant 0 si vrai. L'option -d vérifiera si le chemin est un répertoire, retournant 0 si vrai. Exemple: hdfs dfs -test -d $ yourdir

Veuillez vérifier les éléments suivants pour plus d'informations: https://hadoop.Apache.org/docs/r2.4.1/hadoop-project-dist/hadoop-common/FileSystemShell.html Cordialement

6
Ngoc Nguyen

Salut, j'ai utilisé le script suivant pour tester le répertoire HDFS existe ou non. J'ai vu dans votre question que vous avez essayé cette commande de test et que vous n'avez pas travaillé. Pourriez-vous s'il vous plaît fournir une trace sur pourquoi cela ne fonctionne pas ..

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