hadoop crontab put

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

我试图用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/

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

s6fujrry

s6fujrry1#

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

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\*

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

相关问题