2014-10-22 13 views
11

Sto avendo seguente struttura di directory in HDFS già,Verificando directory in HDFS esiste o no

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

che è dati è in arrivo su base houly e memorizzati in formato anno/mese/giorno/ora.

Ho scritto uno script di shell in cui sto passando sentiero fino

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

poi shell script di passare attraverso le/mese/data cartelle anno/ora e tornare il più recente percorso.

Ad esempio:

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 

La mia domanda è qui è come posso convalidare se HDFS percorso della directory passare a sborsare script è valido o meno. Diciamo che passo un percorso errato come input o percorso che non esiste così come gestirlo nello script di shell.

Esempio strada sbagliata può essere:

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

Ho provato ad utilizzare Hadoop dfs-test z/-d/-e opzioni non hanno lavorato per me. Qualsiasi suggerimento per questo.

NOTA: Non pubblicare il mio codice originale qui, poiché la soluzione al mio problema non dipende da esso.

Grazie in anticipo.

risposta

3

Ciao Ho usato il seguente script per testare la directory HDFS esistente o meno. Ho visto nella tua domanda che hai provato questo comando di prova e non ha funzionato. La prego di fornire alcuna traccia sul perché questo non funziona ..

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

Dal

hadoop fs -test -d $yourdir 

ritorno 0, se esiste, quindi

if [$? == 0]; then 
    echo "exists" 
else 
    echo "not exists" 
fi 
16

Prova w/o comando di prova []:

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

Hadoop fs è deprecato Uso: hdfs dfs -test - [ezd] URI

Opzioni: L'opzione -e controllerà se il file esiste, restituendo 0 se vero. L'opzione -z controllerà se il file è di lunghezza zero, restituendo 0 se vero. L'opzione -d controllerà se il percorso è directory, restituendo 0 se vero. Esempio: HDFS DFS-test -d $ yourdir

Controllare quanto segue per maggiori informazioni: https://hadoop.apache.org/docs/r2.4.1/hadoop-project-dist/hadoop-common/FileSystemShell.html saluti

0

in Java possiamo verificare questo utilizzando Classe FileSystem.

FileSystem