hadoop crontab put

khbbv19g  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(510)

我试图用crontab编程一个简单的任务,将一些文件从本地复制到hdfs。我的代码是:

  1. # !/bing/ksh
  2. ANIO=$(date +"%Y")
  3. MES=$(date +"%m")
  4. DIA=$(date +"%d")
  5. HORA=$(date +"%H")
  6. # LOCAL AND HDFS DIRECTORIES
  7. DIRECTORIO_LOCAL="/home/cloudera/bicing/data/$ANIO/$MES/$DIA/stations"$ANIO$MES$DIA$HORA"*"
  8. DIRECTORIO_HDFS="/bicing/data/$ANIO/$MES/$DIA/"
  9. # Test if the destination directory exist and create it if it's necesary
  10. echo "hdfs dfs -test -d $DIRECTORIO_HDFS">>/home/cloudera/bicing/data/logFile
  11. hdfs dfs -test -d $DIRECTORIO_HDFS
  12. if [ $? != 0 ]
  13. then
  14. echo "hdfs dfs -mkdir -p $DIRECTORIO_HDFS">>/home/cloudera/bicing/data/logFile
  15. hdfs dfs -mkdir -p $DIRECTORIO_HDFS
  16. fi
  17. # Upload the files to HDFS
  18. echo "hdfs dfs -put $DIRECTORIO_LOCAL $DIRECTORIO_HDFS">>/home/cloudera/bicing/data/logFile
  19. hdfs dfs -put $DIRECTORIO_LOCAL $DIRECTORIO_HDFS

正如您所看到的,它非常简单,只定义folders变量,在hdfs中创建目录(如果不存在),并将文件从本地复制到hdfs。
如果我直接在终端上启动它,脚本就可以工作,但是当我用crontab调度它时,它不会将文件“放入”hdfs中。
此外,该脚本还创建了一个包含本应执行的命令的“日志文件”。当我把它们复制到终端时,它们工作得很好。

  1. hdfs dfs -test -d /bicing/data/2015/12/10/
  2. hdfs dfs -mkdir -p /bicing/data/2015/12/10/
  3. hdfs dfs -put /home/cloudera/bicing/data/2015/12/10/stations2015121022* /bicing/data/2015/12/10/

我检查了目录和文件,但找不到解决问题的钥匙。
提前谢谢!!!

s6fujrry

s6fujrry1#

在控制台上执行这些命令时,它们运行良好,因为设置了“hadoop\u home”。但是,当cron作业运行时,很可能“hadoop\u home”环境变量不可用。
您可以通过两种方式解决此问题:
在脚本中,在开头添加以下语句。这将把所有hadoopjar的路径添加到您的环境中。

  1. export HADOOP_HOME={Path to your HADOOP_HOME}
  2. 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\*

您还可以更新 .profile (在$home/.profile中显示)或 .kshrc (以$home/.kshrc格式提供)以包括hadoop路径。
那应该能解决你的问题。

相关问题