请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

打jar包至服务器上运行

老师,您好!
关于写完的shell脚本,是否可以通过什么方式,进行自动定时运行,并得出相应结果呢?

我尝试了crontab方法:
(1)在root下,创建goldShopEtl.sh

#!/bin/bash
hadoop jar /home/hadoop/lib/hadoop-goldtest-v1-1.0-SNAPSHOT.jar shopLogsServer.EtlStart hdfs://hadoop000:8020/project/input/raw/shopLogs/ hdfs://hadoop000:8020/project/output/goldtest/serverShopEtl/

(2)然后执行命令:每5分钟执行一次
[root@hadoop000 ~]# vim /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
 */5 * * * * root /root/goldShopEtl.sh >> /root/goldShopEtl

图片描述

(3)输出的结果,放置于/root/goldShopEtl
目前结果出不来。

现在确定的是:
crontab正常运行,
在/home/hadoop/lib/hadoop-goldtest-v1-1.0-SNAPSHOT.jar路径下,手动运行jar包也是正常出结果。

我现在是否需要将jar包重新拷贝到crontab的相关路径,才能使用crontab?
或者是您这有什么定时运行Hadoop上shell的方法?

正在回答 回答被采纳积分+3

1回答

Michael_PK 2021-08-26 21:59:03

定时执行脚本,直接配置在crontab -e 这个里面就可以呢

/etc/crontab这个我没有使用过。


在/home/hadoop/lib/hadoop-goldtest-v1-1.0-SNAPSHOT.jar路径下,手动运行jar包也是正常出结果。

定时就不行,这个感觉是你的环境变量不对,你在脚本中设置HOME=/ 是做什么用?是不是这里引发的路径不对了

0 回复 有任何疑惑可以回复我~
  • 提问者 酱汁怪兽 #1
    老师,您好!
    看了您后续Hive的课程,您提到的Azkaban,是否可以定时运行这里的shell脚本。
    
    按照您之前给的建议
    
    1、步骤一
    删除原始的定时操作,包括 vim /etc/crontab中的“HOME=/”
    给与goldShopEtl.sh权限:chmod 755 goldShopEtl.sh
    goldShopEtl.sh里内容是
    hadoop jar 
    /home/hadoop/lib/hadoop-goldtest-v1-1.0-SNAPSHOT.jar 
    shopLogsServer.EtlStart 
    hdfs://hadoop000:8020/project/input/shopLog/ 
    hdfs://hadoop000:8020/project/output/goldtest/serverShopEtl/
    
    2、步骤二
    [root@hadoop000 ~]# crontab -e
    # m h dom mon dow  command
    */5 * * * * /home/hadoop/shell/goldShopEtl.sh
    
    3、步骤三
    查看定时任务
    [root@hadoop000 ~]# crontab -l
    # m h dom mon dow  command
    */5 * * * * /home/hadoop/shell/goldShopEtl.sh
    
    4、步骤四
    重启服务器
    [root@hadoop000 ~]# systemctl restart crond.service
    
    5、查看结果:
    /project/output/goldtest/serverShopEtl/part-r-00000
    上一次运行的时间是00:55,没有变化,所以定时运行还是没有执行。
    
    6、查看cron日志
    [root@hadoop000 hadoop]# cd /var/log/
    [root@hadoop000 log]# less cron
    
    结果:
    Aug 30 17:28:01 hadoop000 CROND[6063]: (root) MAIL (mailed 69 bytes of output but got status 0x004b#012)
    Aug 30 17:29:01 hadoop000 CROND[6088]: (root) CMD (sh /home/hadoop/shell/goldShopEtl.sh)
    
    
    所以给我的感觉是crontab运行了,但是出问题了,没有跑出结果
    回复 有任何疑惑可以回复我~ 2021-09-01 17:27:08
  • Michael_PK 回复 提问者 酱汁怪兽 #2
    你换种方式测试,你所有的东西都写好,流程测试,哪个环节出问题,自己都不知道了。
    你还是按照你的环节,但是每个定时的就去打印一个时间到具体的日志文件中去,直接去看日志文件里的内容就行了,就明确知道哪个部分出问题了
    回复 有任何疑惑可以回复我~ 2021-09-02 17:58:01
  • 提问者 酱汁怪兽 回复 Michael_PK #3
    老师,您好! 问题已解决,使用了azkaban。
    回复 有任何疑惑可以回复我~ 2021-09-07 16:24:22
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信