2015-12-10 52 views
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/ 

我檢查了目錄和文件,但是找不到解決問題的關鍵。

在此先感謝!

+0

A.'#!/ bing/ksh'?我希望這裏只是一個錯字。 B.從cmdline中執行'echo $ PATH> cmdlinePATHver.txt',然後添加'echo $ PATH> scriptPATHver.txt',看看有什麼區別。祝你好運。 – shellter

+0

我不是一個腳本專家,所以我嘗試了不同的選擇:「#!/ bing/ksh」和「#!/ bing/bash」,但它不起作用。就像你說的那樣,我會檢查我的路徑。 謝謝! – EMBorque

+0

對不起,我應該說,正確的「she-bang」行是'#!/ bin/ksh'。或''PATH'問題​​仍然很有可能。祝你好運。 – shellter

回答

0

當您在控制檯上執行這些命令時,它們運行良好,因爲設置了「HADOOP_HOME」。但是,當Cron作業運行時,很可能「HADOOP_HOME」環境變量不可用。

您可以通過兩種方式解決此問題:

  1. 在腳本中,添加以下語句開頭。這將爲您的環境添加所有Hadoop罐子的路徑。

    export HADOOP_HOME={Path to your HADOOP_HOME} 
    export PATH=$PATH:$HADOOP_HOME\etc\hadoop\;$HADOOP_HOME\share\hadoop\common\*;$HADOOP_HOME\share\hadoop\common\lib\*;$HADOOP_HOME\share\hadoop\hdfs\*;$HADOOP_HOME\share\hadoop\hdfs\lib\*;$HADOOP_HOME\share\hadoop\mapreduce\*;$HADOOP_HOME\share\hadoop\mapreduce\lib\*;$HADOOP_HOME\share\hadoop\tools\*;$HADOOP_HOME\share\hadoop\tools\lib\*;$HADOOP_HOME\share\hadoop\yarn\*;$HADOOP_HOME\share\hadoop\yarn\lib\* 
    
  2. 您還可以更新您的.profile(存在於$ HOME/.profile文件)或.kshrc(存在於$ HOME/.kshrc),包括Hadoop的路徑。

這應該可以解決您的問題。