- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试使用 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
如您所见非常简单,它只定义文件夹变量,在 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/
我已经检查了目录和文件,但找不到解决问题的关键。
提前致谢!!!
最佳答案
当您在控制台上执行这些命令时,它们运行良好,因为设置了“HADOOP_HOME”。但是,当 Cron 作业运行时,很可能“HADOOP_HOME”环境变量不可用。
您可以通过两种方式解决此问题:
在脚本中,在开头添加以下语句。这会将所有 Hadoop jar 的路径添加到您的环境中。
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 路径。
这应该可以解决您的问题。
关于bash - Hadoop Crontab 放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34212612/
我在 CentO 上以 root 身份登录。 如果我这样做 crontab -e ,我有一个空文件。 如果我这样做 cat /etc/crontab ,我有一个包含命令的文件。 这怎么可能? 任何的想
我有以下 cron 作业命令: * * * * * /usr/bin/lynx -term=vt100 http://abc.com/dir1/di2/script.php?action=add&co
我最近要在crontab中执行docker-compose命令时遇到问题。 我有一个docker-compose YAML文件,该文件定义了我需要的所有服务,例如“docker-compose.yml
如果您有一个每 5 分钟运行一次的 crontab 作业,您如何确保它永远不会超限?也就是说,您如何确保 crontab 作业的前一次迭代在下一次运行之前完成? 最佳答案 在脚本的开头,在文件系统的某
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
或许还有另一种解决方案。我构建了一个网络应用程序,需要 5-10 个 cron 来保持它的维护和不同的间隔。我想将 crontab checkin 版本控制,以便轻松部署到其他服务器。 我希望能够在/
我有一个带两个参数的命令。 当我手动运行命令时,我是这样做的: cmd -i xyz.dat hit enter enter password in the prompt hit enter conf
我在树莓派上,使用 rasbpian ! 我正在尝试安装一个新的 crontab 来执行基本脚本。这将使用 vlc 从网络摄像头拍摄一张照片。 我想每分钟都这样做,但我无法编辑我的 crontab 用
我想通过在我的服务器中执行此操作来添加一个 crontab 计划: echo "30 * * * */home/my/var/dir/to/script/var/etc/etc/etc/"> cron
将文本通过管道传输到 crontab 与 crontab 之间有什么区别 - (我认为确认它使用标准输入)? 在我的 Linux 机器上,执行 cat "1 0 0 0 0 something" |
我有一个 crontab 设置为 execute the 0th minute of every 3rd hour every day crontab 的语法是: 0 */3 * * * perl t
我使用 GENTOO 发行版。 crontab -e 35 12 * * * root php5 /home/www/cron.php 当我手动运行时: php5 php5 /home/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为
假设我有一个 crontab,它每 20 运行一次分钟,我有一个可以变化的小时范围,所以让我们说 a-b ,在一个例子中可能看起来像 */20 5-23 * * * /usr/bin/cool_pro
我在 Win7 中使用的是 cygwin 版本 2.3.1(0.291/5/3),并且已经尝试了几个小时让我的 crontab 计划作业运行。在我看来,可能成为问题的是我的 cron 进程和我的 cr
我想知道如果我将 crontab 添加到 /etc/crontab 或 crontab -e 是否重要? 我有一个 Ubuntu 17 和 Debian 9 VM 正在运行,我不知道哪个是正确的地方。
我尝试了以下命令,crontab 停止运行任何作业:echo "@reboot/bin/echo 'test' >/home/user/test.sh"|定时任务- 在 Linux 中将作业添加到 c
我想寻求有关 python-crontab 模块的帮助。我有一个简单的 shell 脚本,可以使用 curl 命令录制互联网广播流。我想通过在 crontab 中安排录制来提前安排录制。我找到了允许我
我将在这里扩展我的问题: 当包括 root 在内的每个用户都有自己的 crontab 时,系统 crontab 的需求是什么?系统 crontab 的存在似乎重复了功能。系统 crontab 是否更像
我想在我的 Capistrano 部署文件中包含 cron 任务,而不是使用以下命令手动编辑 crontab 文件: crontab -e [username] 是否有我可以在 Capistrano
我是一名优秀的程序员,十分优秀!