shell - sistema - Comprobando si el directorio en HDFS ya existe o no
hdfs hadoop que es (5)
Tengo la siguiente estructura de directorios en HDFS,
/analysis/alertData/logs/YEAR/MONTH/DATE/HOURS
Es decir, los datos se obtienen por completo y se almacenan en formato de año / mes / día / hora.
He escrito un guión de shell en el que estoy pasando camino hasta
"/analysis/alertData/logs" ( this will vary depending on what product of data i am handling)
Luego, el script de shell pasa por las carpetas de año / mes / fecha / hora y devuelve la ruta más reciente.
Por ejemplo:
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
Mi pregunta es: ¿cómo puedo validar si la ruta de acceso del directorio HDFS al script del shell es válida o no? Digamos que paso una ruta incorrecta como entrada o ruta que no existe, así que cómo manejar eso en el script de shell.
La ruta equivocada de la muestra puede ser:
wrong path : /analysis/alertData ( correct path : /analysis/alertData/logs/ )
wrong path : /abc/xyz/ ( path does not exit in HDFS )
Intenté usar Hadoop dfs -test -z / -d / -e opciones no funcionó para mí. Cualquier sugerencia para esto
NOTA: No publicar mi código original aquí, ya que la solución a mi problema no depende de ello.
Gracias por adelantado.
Hola, he utilizado la siguiente secuencia de comandos para probar si el directorio HDFS existe o no. He visto en tu pregunta que probaste este comando de prueba y no funcionó. ¿Podrían darnos alguna pista de por qué esto no funciona?
hadoop fs -test -d $dirpath
if [ $? != 0 ]
then
hadoop fs -mkdir $dirpath
else
echo "Directory already present in HDFS"
fi
Ya que
hadoop fs -test -d $yourdir
devuelve 0 si existe, luego
if [$? == 0]; then
echo "exists"
else
echo "not exists"
fi
Pruebe sin comando de prueba []:
if $(hadoop fs -test -d $yourdir) ; then echo "ok";else echo "not ok"; fi
Hadoop fs está en desuso Uso: hdfs dfs --test - [ezd] URI
Opciones: la opción -e verificará si el archivo existe, devolviendo 0 si es verdadero. La opción -z verificará si el archivo es de longitud cero y devuelve 0 si es verdadero. La opción -d verificará si la ruta es directorio, devolviendo 0 si es verdadero. Ejemplo: hdfs dfs -test -d $ yourdir
Por favor, compruebe lo siguiente para obtener más información: https://hadoop.apache.org/docs/r2.4.1/hadoop-project-dist/hadoop-common/FileSystemShell.html Saludos
En Java podemos verificar esto usando la clase FileSystem.