设为首页 收藏本站
查看: 626|回复: 0

[经验分享] 如何向hadoop集群定时提交一个jar作业?

[复制链接]

尚未签到

发表于 2016-12-11 09:36:30 | 显示全部楼层 |阅读模式
除了使用Hive,Pig来执行一个MapReduce任务,不需要专门的把项目打成jar包,提交执行,或者定时执行,因为Hive,Pig这些开源框架已经,帮我们自动打包上传了。
而有些时候,我们自己手写了一个MapReduce的任务,然后这个任务里面依赖了其他的第三方包,比如说是Lucene的,或者是Solr,ElasticSearch的,那么打包的时候就需要将这些依赖的jar包也一起的打包进去。
如果你用的是maven,那么事情就简单了,maven会自动把所有依赖的jar包,打成一个统一的jar,但是通常不需要maven,因为maven相对来说,还是比较复杂,我们更倾向于使用ant来打包,配置很灵活。
那么,如何向hadooop集群提交作业呢?
通常的命令如下:
hadoop jar  xxx.jar input out
这样就会把jar包提交到hadoop集群上,只要包含依赖的jar也在这个jar包中,那么程序就不会出问题。
那么,问题来了? 我想定时执行一个作业,应该怎么写呢
如果直接在linux下的crontab中,写定时启动的脚本,没问题,但是如果你的脚本是启动一个mr的任务,那么就有可能出现问题了,因为执行MR,是需要Hadoop的环境变量的,在crontab启用的shell进程,默认是没有激活环境变量的,所以,你有可能发现,自己的写的crontab脚本,奇怪的失效了。
如何解决在crontab的进程里环境变量失效的问题?
很简单,在启动的脚本开始前,再次激活的环境变量即可,代码如下:
#!/bin/bash
##下面的2行代码很重要,如果不再次激活环境变量,hadoop的jar就不能正确提交任务
. /etc/profile
. ~/.bash_profile

另外在crontab中,需要cd到当前目录下,执行,否则一些log不会被正确到该工程,或目录下:

//在下午的14点39分启动一个定时任务,使用nohup 挂起后台运行,并将所有的log重定向到一个log文件里
39 14 * * *  cd /home/search/qindongliang/cr-dataload ; nohup sh start.sh 1  2015-04-10 all &> rate.log    &  

另外一点需要注意,如果在crontab的进程中执行任务,那么最好使用nohup挂起后台运行,否则,hadoop的系统log会丢失,因为默认是在终端的界面上打印的。
[search@fsedump01sand cr-dataload]$ cat start.sh
#!/bin/bash
##下面的2行代码很重要,如果不再次激活环境变量,hadoop的jar就不能正确提交任务
. /etc/profile
. ~/.bash_profile

echo "hadoop的home:"$HADOOP_HOME
echo `pwd`
if [ ! $# -eq 3  ] ; then
echo "第一个参数:请输入要处理的dataload业务 1:rate 2:keyword  "
echo "第二个参数:请输入读取HDFS上读取数据的开始日期, 例如: 2015-04-10  "
echo "第三个参数:请输入读取HDFS上读取数据的结束日期, 例如: 2015-05-10  "
exit
fi
#参数1,mapping文件的地址
p1="/user/d1/mapping.xml"
#参数4,是否清空上一次的保存目录,0=清除,1=不清除
p4="0"
if [ $1 -eq  1  ] ; then
#参数2,处理数据的输入路径
p2="1"  
p3="/fse2/conversions/rate/shard1/input"
p5="rate"
elif [ $1 -eq 2 ] ; then
#参数2,处理数据的输入路径
p2="2"
p3="/fse2/conversions/keyword/shard1/input"
#参数5,控制那个索引的
p5="keyword"
else
echo  "不支持此参数,只能输入1或者2,请注意!"
exit
fi

echo "==============参数信息=============="
echo $p1
echo $p2
echo $p3
echo $p4
echo $p5
echo $2
echo $3
echo "===================================="
#exit

#参数3,处理数据结果的保存路径
#p3="/user/d1/uvoutput"
#p3="/user/d1/kwoutput"
#p3="/fse2/conversions/keyword/shard1/input"
#p3="/fse2/conversions/uv/shard1/input"

#参数4,是否清空上一次的保存目录,0=清除,1=不清除
#p4="0"
#参数5,控制那个索引的
#p5="keyword"
#p5="uv"

cs='.:'
root="`pwd`/"
curr="`pwd`/conf"
echo $curr

libpath="`pwd`/lib/"
FILES=`ls $libpath`
for txt in $FILES;do
cs=$cs$libpath$txt:
done
cs=$cs$curr:$root"cr-dataload.jar"
echo $cs
echo [`date`] "开始启动dataload!"
#nohup sh offline.sh  2014-12-01 2014-12-15 &> nohup.out &
#hadoop jar  cr-dataload.jar   com.dhgate.search.rate.convert.StoreConvert -libjars $cs
#java -cp $cs  com.dhgate.search.rate.convert.StoreConvert  $p1 $p2 $p3 $p4 $p5 $2 $3
#/home/search/hadoop/bin/hadoop jar  cr-dataload.jar   com.dhgate.search.rate.convert.StoreConvert  $p1 $p2 $p3 $p4 $p5 $2 $3  > $p2.log
hadoop jar  cr-dataload.jar   com.dhgate.search.rate.convert.StoreConvert  $p1 $p2 $p3 $p4 $p5 $2 $3
#echo $cs

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-312624-1-1.html 上篇帖子: Spark与Hadoop计算模型的比较分析 下篇帖子: Hadoop学习笔记(二)设置单节点集群
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表