我试图用crontab编程一个简单的任务,将一些文件从本地复制到hdfs。我的代码是:
# !/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
正如您所看到的,它非常简单,只定义folders变量,在hdfs中创建目录(如果不存在),并将文件从本地复制到hdfs。
如果我直接在终端上启动它,脚本就可以工作,但是当我用crontab调度它时,它不会将文件“放入”hdfs中。
此外,该脚本还创建了一个包含本应执行的命令的“日志文件”。当我把它们复制到终端时,它们工作得很好。
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/
我检查了目录和文件,但找不到解决问题的钥匙。
提前谢谢!!!
1条答案
按热度按时间s6fujrry1#
在控制台上执行这些命令时,它们运行良好,因为设置了“hadoop\u home”。但是,当cron作业运行时,很可能“hadoop\u home”环境变量不可用。
您可以通过两种方式解决此问题:
在脚本中,在开头添加以下语句。这将把所有hadoopjar的路径添加到您的环境中。
您还可以更新
.profile
(在$home/.profile中显示)或.kshrc
(以$home/.kshrc格式提供)以包括hadoop路径。那应该能解决你的问题。