除了使用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的进程里环境变量失效的问题?

很简单,在启动的脚本开始前,再次激活的环境变量即可,代码如下:

  1. #!/bin/bash
  2. ##下面的2行代码很重要,如果不再次激活环境变量,hadoop的jar就不能正确提交任务
  3. . /etc/profile
  4. . ~/.bash_profile

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

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

另外一点需要注意,如果在crontab的进程中执行任务,那么最好使用nohup挂起后台运行,否则,hadoop的系统log会丢失,因为默认是在终端的界面上打印的。

  1. [search@fsedump01sand cr-dataload]$ cat start.sh
  2. #!/bin/bash
  3. ##下面的2行代码很重要,如果不再次激活环境变量,hadoop的jar就不能正确提交任务
  4. . /etc/profile
  5. . ~/.bash_profile
  6. echo "hadoop的home:"$HADOOP_HOME
  7. echo `pwd`
  8. if [ ! $# -eq 3  ] ; then
  9. echo "第一个参数:请输入要处理的dataload业务 1:rate 2:keyword  "
  10. echo "第二个参数:请输入读取HDFS上读取数据的开始日期, 例如: 2015-04-10  "
  11. echo "第三个参数:请输入读取HDFS上读取数据的结束日期, 例如: 2015-05-10  "
  12. exit
  13. fi
  14. #参数1,mapping文件的地址
  15. p1="/user/d1/mapping.xml"
  16. #参数4,是否清空上一次的保存目录,0=清除,1=不清除
  17. p4="0"
  18. if [ $1 -eq  1  ] ; then
  19. #参数2,处理数据的输入路径
  20. p2="1"
  21. p3="/fse2/conversions/rate/shard1/input"
  22. p5="rate"
  23. elif [ $1 -eq 2 ] ; then
  24. #参数2,处理数据的输入路径
  25. p2="2"
  26. p3="/fse2/conversions/keyword/shard1/input"
  27. #参数5,控制那个索引的
  28. p5="keyword"
  29. else
  30. echo  "不支持此参数,只能输入1或者2,请注意!"
  31. exit
  32. fi
  33. echo "==============参数信息=============="
  34. echo $p1
  35. echo $p2
  36. echo $p3
  37. echo $p4
  38. echo $p5
  39. echo $2
  40. echo $3
  41. echo "===================================="
  42. #exit
  43. #参数3,处理数据结果的保存路径
  44. #p3="/user/d1/uvoutput"
  45. #p3="/user/d1/kwoutput"
  46. #p3="/fse2/conversions/keyword/shard1/input"
  47. #p3="/fse2/conversions/uv/shard1/input"
  48. #参数4,是否清空上一次的保存目录,0=清除,1=不清除
  49. #p4="0"
  50. #参数5,控制那个索引的
  51. #p5="keyword"
  52. #p5="uv"
  53. cs='.:'
  54. root="`pwd`/"
  55. curr="`pwd`/conf"
  56. echo $curr
  57. libpath="`pwd`/lib/"
  58. FILES=`ls $libpath`
  59. for txt in $FILES;do
  60. cs=$cs$libpath$txt:
  61. done
  62. cs=$cs$curr:$root"cr-dataload.jar"
  63. echo $cs
  64. echo [`date`] "开始启动dataload!"
  65. #nohup sh offline.sh  2014-12-01 2014-12-15 &> nohup.out &
  66. #hadoop jar  cr-dataload.jar   com.dhgate.search.rate.convert.StoreConvert -libjars $cs
  67. #java -cp $cs  com.dhgate.search.rate.convert.StoreConvert  $p1 $p2 $p3 $p4 $p5 $2 $3
  68. #/home/search/hadoop/bin/hadoop jar  cr-dataload.jar   com.dhgate.search.rate.convert.StoreConvert  $p1 $p2 $p3 $p4 $p5 $2 $3  > $p2.log
  69. hadoop jar  cr-dataload.jar   com.dhgate.search.rate.convert.StoreConvert  $p1 $p2 $p3 $p4 $p5 $2 $3
  70. #echo $cs

如何向hadoop集群定时提交一个jar作业?的更多相关文章

  1. 深入理解Hadoop集群和网络

    导读:云计算和Hadoop中网络是讨论得相对比较少的领域.本文原文由Dell企业技术专家Brad Hedlund撰写,他曾在思科工作多年,专长是数据中心.云网络等.文章素材基于作者自己的研究.实验和C ...

  2. 深入理解Hadoop集群和网络【转】

    http://os.51cto.com/art/201211/364374.htm 本文将着重于讨论Hadoop集群的体系结构和方法,及它如何与网络和服务器基础设施的关系.最开始我们先学习一下Hado ...

  3. 初学Hadoop:利用VMWare+CentOS7搭建Hadoop集群

     一.前言 开始学习数据处理相关的知识了,第一步是搭建一个Hadoop集群.搭建一个分布式集群需要多台电脑,在此我选择采用VMWare+CentOS7搭建一个三台虚拟机组成的Hadoop集群. 注:1 ...

  4. 编写hadoop程序,并打包jar到hadoop集群运行

    windows环境下编写hadoop程序 新建:File->new->Project->Maven->next GroupId 和ArtifactId 随便写(还是建议规范点) ...

  5. Eclipse远程提交hadoop集群任务

    文章概览: 1.前言 2.Eclipse查看远程hadoop集群文件 3.Eclipse提交远程hadoop集群任务 4.小结   1 前言 Hadoop高可用品台搭建完备后,参见<Hadoop ...

  6. Eclipse提交任务至Hadoop集群遇到的问题

    环境:Windows8.1,Eclipse 用Hadoop自带的wordcount示例 hadoop2.7.0 hadoop-eclipse-plugin-2.7.0.jar //Eclipse的插件 ...

  7. hadoop 把mapreduce任务从本地提交到hadoop集群上运行

    MapReduce任务有三种运行方式: 1.windows(linux)本地调试运行,需要本地hadoop环境支持 2.本地编译成jar包,手动发送到hadoop集群上用hadoop jar或者yar ...

  8. 在windows远程提交任务给Hadoop集群(Hadoop 2.6)

    我使用3台Centos虚拟机搭建了一个Hadoop2.6的集群.希望在windows7上面使用IDEA开发mapreduce程序,然后提交的远程的Hadoop集群上执行.经过不懈的google终于搞定 ...

  9. 用Docker在一台笔记本电脑上搭建一个具有10个节点7种角色的Hadoop集群(上)-快速上手Docker

    如果想在一台电脑上搭建一个多节点的Hadoop集群,传统的方式是使用多个虚拟机.但这种方式占用的资源比较多,一台笔记本能同时运行的虚拟机的数量是很有限的.这个时候我们可以使用Docker.Docker ...

随机推荐

  1. (转载)李剑英的CSLight入门指南结合NGUI热更新

    原地址:http://www.xuanyusong.com/archives/3075 李剑英的CSLight入门指南文档撰写者:GraphicQQ: 1065147807 一. CSLIGHT 作者 ...

  2. Javascript全局变量的使用方法

    1.demo例子说明 <script type="text/javascript"> var gDivId; //js全局变量 function geocoder(la ...

  3. HDU 2846 Repository(字典树,标记)

    题目 字典树,注意初始化的位置~!!位置放错,永远也到不了终点了org.... 我是用数组模拟的字典树,这就要注意内存开多少了,,要开的不大不小刚刚好真的不容易啊.... 我用了val来标记是否是同一 ...

  4. CDOJ 1259 昊昊爱运动 II 线段树+bitset

    昊昊爱运动 II 昊昊喜欢运动 他N天内会参加M种运动(每种运动用一个[1,m]的整数表示) 现在有Q个操作,操作描述如下 昊昊把第l天到第r天的运动全部换成了x(x∈[1,m]) 问昊昊第l天到第r ...

  5. Android核心分析 之二方法论探讨之概念空间篇

    方法论探讨之概念空间篇 我们潜意识就不想用计算机的方式来思考问题,我们有自己的思维描述方式,越是接近我们思维描述方式,我们越容易接受和使用.各种计算机语言,建模工具,不外乎就是建立一个更接近人的思维方 ...

  6. ios开发--GCD使用介绍:4-延迟执行操作

    在开发过程中,我们有时会希望把一些操作封装起来延迟一段时间后再执行.iOS开发中,有两种常用的方法可以实现延迟执行,一种是使用GCD,另外一种是使用NSRunLoop类中提供的方法. 1.使用GCD实 ...

  7. 如何用虚拟机装SQL Server

    更新(2016.3.14) 看来之前还是写的太简了,来问的同学有点多. 所以还是详细一些吧. 大概步骤 装好Virtual Box这个软件,免费的 下载window server 2003系统镜像,然 ...

  8. 【解惑】Java动态绑定机制的内幕

    在Java方法调用的过程中,JVM是如何知道调用的是哪个类的方法源代码? 这里面到底有什么内幕呢? 这篇文章我们就将揭露JVM方法调用的静态(static binding) 和动态绑定机制(auto ...

  9. DWR与AJAX

    DWR与AJAX的微妙关系 2015-08-14 10:20 447人阅读 评论(0) 收藏 举报 本文章已收录于:   // ' + obj.name + "  "; html ...

  10. php多维数组化一维数组

    一.使用foreach <?php function arr_foreach ($arr) { static $tmp=array(); if (!is_array ($arr)) { retu ...