0
我試圖用crontab編寫一個簡單的任務,將一些文件從本地複製到HDFS。我的代碼是這樣的:Hadoop Crontab Put
#!/bing/ksh
ANIO=$(date +"%Y")
MES=$(date +"%m")
DIA=$(date +"%d")
HORA=$(date +"%H")
# LOCAL AND HDFS DIRECTORIES
DIRECTORIO_LOCAL="/home/cloudera/bicing/data/$ANIO/$MES/$DIA/stations"$ANIO$MES$DIA$HORA"*"
DIRECTORIO_HDFS="/bicing/data/$ANIO/$MES/$DIA/"
# Test if the destination directory exist and create it if it's necesary
echo "hdfs dfs -test -d $DIRECTORIO_HDFS">>/home/cloudera/bicing/data/logFile
hdfs dfs -test -d $DIRECTORIO_HDFS
if [ $? != 0 ]
then
echo "hdfs dfs -mkdir -p $DIRECTORIO_HDFS">>/home/cloudera/bicing/data/logFile
hdfs dfs -mkdir -p $DIRECTORIO_HDFS
fi
# Upload the files to HDFS
echo "hdfs dfs -put $DIRECTORIO_LOCAL $DIRECTORIO_HDFS">>/home/cloudera/bicing/data/logFile
hdfs dfs -put $DIRECTORIO_LOCAL $DIRECTORIO_HDFS
正如你所看到的是非常簡單的,它僅僅定義的文件夾變量,創建HDFS目錄(如果不存在的話),並複製文件從本地到HDFS。
如果我直接在終端上啓動它,但當我使用Crontab安排它時,它不會將文件「放入」HDFS。
此外,該腳本使用應該執行的命令創建一個「logFile」。當我將它們複製到終端時,它們完美地工作。
hdfs dfs -test -d /bicing/data/2015/12/10/
hdfs dfs -mkdir -p /bicing/data/2015/12/10/
hdfs dfs -put /home/cloudera/bicing/data/2015/12/10/stations2015121022* /bicing/data/2015/12/10/
我檢查了目錄和文件,但是找不到解決問題的關鍵。
在此先感謝!
A.'#!/ bing/ksh'?我希望這裏只是一個錯字。 B.從cmdline中執行'echo $ PATH> cmdlinePATHver.txt',然後添加'echo $ PATH> scriptPATHver.txt',看看有什麼區別。祝你好運。 – shellter
我不是一個腳本專家,所以我嘗試了不同的選擇:「#!/ bing/ksh」和「#!/ bing/bash」,但它不起作用。就像你說的那樣,我會檢查我的路徑。 謝謝! – EMBorque
對不起,我應該說,正確的「she-bang」行是'#!/ bin/ksh'。或''PATH'問題仍然很有可能。祝你好運。 – shellter