2016-08-22 3 views
0

Ich versuche, die hdfs Befehl Ausgabe auf eine Shell-Variable, aber bekomme Fehler. Mein Skript ist wie folgt:Speichern hdfs Befehl Ausgabe auf eine Shell-Variable

#!/bin/bash 
default=$1 
date=""; 
HDFS_PATH='/data/max_emp_value' (This is a directory) 
if $(hadoop fs -test -e $HDFS_PATH/*); then 
    date = "`hadoop fs -cat HDFS_PATH/*)`" 
else 
    date=$default 
fi 
echo date = ${date} 

Danke, Stacky

Antwort

0

funktionierts - kopieren und einfügen, wie ist.

#!/bin/bash 
default=$1 
date="" 
HDFS_PATH='/data/max_emp_value' #(This is a directory) 
if $(hadoop fs -test -e $HDFS_PATH/*) 
then 
    date="`hadoop fs -cat $HDFS_PATH/*)`" 
else 
    date=$default 
fi 
echo "date is ${date}" 

Warum möchten Sie alle Dateien in einem Verzeichnis überprüfen? $HDFS_PATH/* Die * bezieht sich auf alle Dateien in einem Verzeichnis. Möglicherweise versuchen Sie zu überprüfen, ob die Dateien angekommen sind - in diesem Fall sollten Sie nach Abschluss der Übertragung normalerweise eine Berührungsdatei haben, die normalerweise als _success gekennzeichnet ist. Andernfalls riskieren Sie, die Daten auf der Durchreise zu konsumieren.

+0

Dank viel. Der Fehler wurde durch zusätzlichen Speicherplatz verursacht. Ich habe nur eine Datei in diesem Verzeichnis. jedes Mal wenn ich das maximale Datum lade. also suche ich nach * – stackster

0

Ihr Skript hat einige Syntaxfehler (Zeile 6: ~> unwnated ), Leerzeichen zwischen DATE =). Versuchen Sie auch, Variablennamen zu verwenden, die nicht bash Befehl ist (date ist bash-Befehl):

#!/bin/bash 
default=$1 
DATE='' 
HDFS_PATH='/user/cloudera/datefiles' 

if $(hadoop fs -test -e ${HDFS_PATH}/*); then 
    DATE=`hadoop fs -cat ${HDFS_PATH}/*` 
else 
    DATE=${default} 
fi 
echo ${DATE} 

[[email protected] ~]$ ./test_3.sh 
08/22/2016 
[[email protected] ~]$