`

crontab定时运行MR不行,手动shell可以执行成功问题排查过程

阅读更多
设置了定时任务,但MR任务没有执行。

第一步:手动执行shell脚本, 如果有问题,检查相关设置,如source /etc/profile, 绝对路径之类 这里不是重点, 手动可以执行成功
第二步: 检查shell脚本文件格式, 设置测试输出,确保crontab任务调度没有问题, 测试hymtest.sh

#!/bin/bash
DATE=$(date +%Y%m%d:%H:%M:%S)
echo $DATE + "every minute test">>/bigdata/shell/hymoutput.txt
echo 导入每天指数涨跌排行数据 {存到:hbase:"jmdata:topIndex"}>>/bigdata/shell/hymoutput.txt
hadoop jar /bigdata/cdh/jmdata-jdata-mrs-index.jar org.jumao.jdata.mrs.index.TopIndexMR
echo "end topIndex MR">>/bigdata/shell/hymoutput.txt

第三步:
定时任务调度室成功的,检查定时任务相关输出
cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
15 2,15 * * * root sh /bigdata/shell/2-35indexmrs.sh
20 2,15 * * * root sh /bigdata/shell/2-40impexpmrs.sh
20 0,8 * * * root sh /bigdata/shell/0,8-20futuresmrs1.sh
25 0,8 * * * root sh /bigdata/shell/0,8-25futuresmrs2.sh
45 7,10,15 * * * root sh /bigdata/shell/1,7,10-45pricemrs.sh
40 */2 * * * root sh /bigdata/shell/2homemrs1.sh
42 */2 * * * root sh /bigdata/shell/2homemrs2.sh
48 */2 * * * root sh /bigdata/shell/2homemrs3.sh
10 */2 * * * root sh /bigdata/shell/2topmrs.sh
50 */1 * * * root sh /bigdata/shell/dailytaskmrs.sh
11 1,7,9,10,12,15,17,19 * * * root sh /bigdata/shell/englishhome.sh
5 8-16,18,20 * * * root sh /bigdata/shell/englishtocom.sh
16 1,7,12,15 * * * root sh /bigdata/shell/englishprice.sh
30 1,7,12,15 * * * root sh /bigdata/shell/englishcategory.sh
2 6 * * * root sh /bigdata/shell/englishtaskmrs.sh
50 2,15 * * * root sh /bigdata/shell/jmbitaskmr.sh
00 3 1 * *  /bin/sh  /bigdata/shell/logclear.sh
*/1 * * * * root  /etc/profile;/bin/sh /bigdata/shell/hymtest.sh >>/bigdata/shell/hymout.txt 2>&1



结果可以看到如下异常:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil
        at org.jumao.jdata.mrs.index.TopIndexMR.main(TopIndexMR.java:99)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 7 more



第四步:
对比手动shell的环境变量   env和 crontab运行时的环境变量,输出到文件
在hymtest.sh中加入

#!/bin/bash
source /etc/profile
env>>/bigdata/shell/hymout.txt
DATE=$(date +%Y%m%d:%H:%M:%S)
echo $DATE + "every minute test">>/bigdata/shell/hymoutput.txt
echo 导入每天指数涨跌排行数据 {存到:hbase:"jmdata:topIndex"}>>/bigdata/shell/hymoutput.txt
/opt/cloudera/parcels/CDH/lib/hadoop/bin/hadoop jar /bigdata/cdh/jmdata-jdata-mrs-index.jar org.jumao.jdata.mrs.index.TopIndexMR
echo "end topIndex MR">>/bigdata/shell/hymoutput.txt

手动env
HOSTNAME=nn1
TERM=xterm
SHELL=/bin/bash
HADOOP_HOME=/opt/cloudera/parcels/CDH/lib/hadoop
HISTSIZE=1000
SSH_CLIENT=172.18.203.112 49374 22
QTDIR=/usr/lib64/qt-3.3
QTINC=/usr/lib64/qt-3.3/include
SSH_TTY=/dev/pts/0
USER=root
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.tbz=01;31:*.tbz2=01;31:*.bz=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
HBASE_HOME=/opt/cloudera/parcels/CDH/lib/hbase
HADOOP_COMMON_LIB_NATIVE_DIR=/opt/cloudera/parcels/CDH/lib/hadoop/lib/native
MAIL=/var/spool/mail/root
PATH=/usr/java/jdk1.8.0_131/bin:/opt/cloudera/parcels/CDH/lib/hadoop/bin:/opt/cloudera/parcels/CDH/lib/hbase/bin:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/bigdata/shell
JAVA_HOME=/usr/java/jdk1.8.0_131
HADOOP_CLASSPATH=:/opt/cloudera/parcels/CDH-5.10.1-1.cdh5.10.1.p0.10/lib/hive/lib/*:/opt/cloudera/parcels/CDH-5.10.1-1.cdh5.10.1.p0.10/lib/hive-hcatalog/share/hcatalog/*
EDITOR=vi
LANG=en_US.UTF-8
HISTCONTROL=ignoredups
SHLVL=1
HOME=/root
LOGNAME=root
QTLIB=/usr/lib64/qt-3.3/lib
CVS_RSH=ssh
CLASSPATH=.:/usr/java/jdk1.8.0_131/lib/dt.jar:/usr/java/jdk1.8.0_131/lib/tools.jar
SSH_CONNECTION=172.18.203.112 49374 172.18.203.111 22
LESSOPEN=||/usr/bin/lesspipe.sh %s
G_BROKEN_FILENAMES=1
HIVE_CONF_DIR=/etc/hive/conf
_=/bin/env
OLDPWD=/root


对比发现关键的没有以下环境变量设置,导致找不到相关的class
HADOOP_CLASSPATH=:/opt/cloudera/parcels/CDH-5.10.1-1.cdh5.10.1.p0.10/lib/hive/lib/*:/opt/cloudera/parcels/CDH-5.10.1-1.cdh5.10.1.p0.10/lib/hive-hcatalog/share/hcatalog/*


第五步,修正,执行成功,在执行MR前导出环境变量,指定MR依赖的包,当然这些依赖的包也可以直接copy到集群每台hadoop的lib下,最初部署MR任务做法就是如此。
#!/bin/bash
source /etc/profile
export HADOOP_CLASSPATH=:/opt/cloudera/parcels/CDH-5.10.1-1.cdh5.10.1.p0.10/lib/hive/lib/*:/opt/cloudera/parcels/CDH-5.10.1-1.cdh5.10.1.p0.10/lib/hive-hcatalog/share/hcatalog/*

env>>/bigdata/shell/hymout.txt
DATE=$(date +%Y%m%d:%H:%M:%S)
echo $DATE + "every minute test">>/bigdata/shell/hymoutput.txt
echo 导入每天指数涨跌排行数据 {存到:hbase:"jmdata:topIndex"}>>/bigdata/shell/hymoutput.txt
/opt/cloudera/parcels/CDH/lib/hadoop/bin/hadoop jar /bigdata/cdh/jmdata-jdata-mrs-index.jar org.jumao.jdata.mrs.index.TopIndexMR
echo "end topIndex MR">>/bigdata/shell/hymoutput.txt

分享到:
评论

相关推荐

    易语言 Crontab 定时任务执行模块 v1.2 支持单位秒 也可做计时器源码

    总之,易语言 Crontab 定时任务执行模块 v1.2 是一个强大的工具,能够帮助开发者在易语言环境下实现复杂的定时任务和计时功能,通过熟悉并熟练使用这个模块,可以提升你的程序自动化水平,提高效率。

    tp5执行shell命令定时执行命令行运行php脚本

    在PHP开发中,有时我们需要在特定...综上所述,通过ThinkPHP5框架结合shell命令和Linux的`crontab`,我们可以实现高效、灵活的定时任务管理。理解并掌握这些知识点将帮助我们在开发过程中更好地自动化和优化日常任务。

    Ubuntu crontab 定时执行php脚本文件

    ### Ubuntu Crontab 定时执行 PHP 脚本文件 ...通过上述步骤,你就可以在Ubuntu环境下成功地使用Crontab来定时执行PHP脚本了。这不仅可以提高工作效率,还能实现自动化管理,减少手动操作带来的错误风险。

    suse linux crontab 任务计划 sh文件不能执行分析

    通过上述步骤,你可以逐步排查和解决`crontab` 无法执行shell脚本的问题。如果问题仍然存在,建议查看`/var/log/cron` 或相关日志文件,进一步查找线索。同时,对`crontab -l` 输出进行检查,确认任务设置无误。记住...

    crontab 定时执行文件详解

    ### Crontab定时执行工具详解 #### 一、Crontab简介 `cron`是Linux系统中一个重要的后台服务程序,用于实现定时任务的自动化执行。通过`cron`,用户可以方便地设置周期性的任务,比如定时备份数据、清理日志文件等...

    shell定时执行

    `Shell定时执行`指的是通过设置定时任务,让特定的Shell脚本在预设的时间自动运行,这对于系统维护、数据备份、日志清理等周期性任务非常实用。本文将详细讲解如何使用Shell进行定时执行。 首先,我们需要了解Linux...

    crontab定时任务不执行的一些原因总结

    最近在工作中遇到了一些问题,crontab定时任务居然不执行,后来我在网上找的时候发现网上主要说了这5个原因: 1 crond服务未启动 crontab不是Linux内核的功能,而是依赖一个crond服务,这个服务可以启动当然也可以...

    结合crontab实现数据库定时备份

    ### 结合crontab实现数据库定时备份 在IT运维领域,数据备份是一项极其重要的工作,它能够...通过以上步骤,我们可以轻松地实现MySQL数据库的定时备份,并通过`crontab`服务来自动化整个过程,大大提高了数据安全性。

    centOS6中使用crontab定时运行执行jar程序的脚本

    本文将详细介绍如何在CentOS6中使用crontab来定时运行执行jar程序的脚本,这对于需要定期执行Java应用程序的开发者来说十分实用。 首先,我们需要有一个Java程序作为示例。这里创建了一个名为`testshell`的简单Java...

    Linux crontab定时执行Shell脚本需要执行特定的命令时解决思路

    由于一些不可抗拒的原因,项目部署后需要定时检测项目是否正常运行,否则将执行重启命令。 在具体实施过程中发现,定时器执行无误,但是重启命令无法正常启动。多方查找发现Shell脚本中的Java命令需要引入环境变量...

    Linux Crontab 定时任务 命令详解

    Linux Crontab 是一个强大的定时任务命令,用于在指定的时间间隔执行特定的命令或程序。Crontab 命令的功能是在一定的时间间隔调度一些命令的执行,通过编写 Crontab 文件来实现。 1. Crontab 介绍 Crontab 命令的...

    Ubuntu-使用crontab定时任务

    ### Ubuntu 使用 Crontab 定时任务 Crontab 是 Linux 系统中一个非常重要的工具,用于在固定时间执行指定的任务。对于 Ubuntu 用户来说,掌握 crontab 的使用方法可以大大提高系统的自动化管理水平。 #### 一、...

    Linux定时脚本crontab中文乱码.docx

    1. Linux 系统中的定时脚本 crontab 可以用来执行特定的命令或脚本。 2. 使用 crontab 执行 jar 文件时,输出结果中的中文字符可能会出现乱码问题。 3. 乱码问题的缘由是由于 Unix/Linux 下的 crontab 环境与用户...

    shell脚本结合crontab定时导入sql文件

    项目流量过大时,数据新增变更量大,及时入库会出现同时给一张表做新增、修改,从而导致锁表,这时候可以将修改导成sql文件后入库,来缓解数据库压力

    使用crontab定时任务自动执行爬虫程序.rar

    最后,记得`crontab`服务需要在系统启动时自动启动,或者手动启动(`systemctl start cron`),才能保证定时任务正常执行。如果你的Linux发行版使用`systemd`,还可以通过`systemctl enable cron`设置`cron`在开机时...

    rsync+crontab定时同步.md

    Linux目录数据定时备份

    crontab与shell脚本

    - 在执行Shell脚本之前,需要确保脚本具有执行权限,可以通过`chmod +x script.sh`命令添加执行权限。 - 如果脚本需要读取或写入特定目录,则这些目录也必须对执行脚本的用户开放相应的权限。 #### 三、综合应用...

    centos6.9定时任务crontab离线安装包

    在Linux系统中,`crontab` 是一个用于设置周期性被执行的任务的命令,它允许用户根据特定的时间间隔安排任务的执行。在CentOS 6.9这样的旧版本系统中,有时可能会遇到`yum`无法在线获取或更新`crontab`的情况。这...

    利用Crontab实现对Oracle数据库的定时备份.rar

    - 在正式运行前,先手动执行一次脚本,确认备份成功无误。可以通过查看`backup_rman.log`日志文件检查备份过程。 - 安排Crontab任务后,确保系统按计划执行并生成了预期的备份文件。可以使用`journalctl -u cron`...

Global site tag (gtag.js) - Google Analytics