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.
Essayez sans commande de test []:
if $(hadoop fs -test -d $yourdir) ; then echo "ok";else echo "not ok"; fi
Puisque
hdfs dfs -test -d $yourdir
retourner 0 s'il existe, alors
if [ $? == 0 ]; then
echo "exists"
else
echo "dir does not exists"
fi
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
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