`
qindongliang1922
  • 浏览: 2187986 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:117632
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:126036
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:59985
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:71375
社区版块
存档分类
最新评论

如何向hadoop集群定时提交一个jar作业?

阅读更多

除了使用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











分享到:
评论

相关推荐

    hadoop 部分 shell 脚本

    4. **作业调度**:自动定时启动或停止MapReduce作业,如每天晚上运行批处理任务。 5. **资源监控**:编写脚本监控CPU、内存、磁盘空间等资源使用情况。 五、最佳实践 1. **注释**:为脚本添加清晰的注释,解释每...

    Apache Oozie_ The Workflow Scheduler for Hadoop

    Apache Oozie是Hadoop生态系统中的一个关键组件,主要用于调度和管理工作流,是管理大数据作业的先进工具。Oozie可以调度一系列作业,这些作业可以是MapReduce任务,也可以是Hive查询或者Pig脚本等。它支持定时调度...

    百度去BMR解决方案,百度云平台

    Hue是一个基于Web的Hadoop交互界面,提供了一个统一的界面来管理Hadoop集群。 **3.9.2 创建集群** - 创建支持Hue的BMR集群。 **3.9.3 Hue使用** - 登录Hue Web界面:访问Hue Web UI进行集群管理和数据分析。 - ...

    OOZIE 配置和调度流程(1).doc

    OOZIE 是一个开源的工作流调度系统,用于管理和调度 Hadoop 作业。下面是 OOZIE 配置和调度流程的详细知识点: 1. OOZIE 命令: OOZIE 提供了多种命令来管理和调度作业,包括: * 提交并执行作业:oozie job -...

    Fourinone分布式并行计算四合一框架

     5、自带一个集群文件浏览器,可以查看集群所有硬盘上的文件(不同于hadoop的namenode,没有单点问题和容量限制)  总的来说, 将集群看做一个操作系统,像操作本地文件一样操作远程文件。  但是fourinone并不提供...

    Fourinone分布式计算框架

    FourInOne整体代码仅仅为70k,跟Hadoop, Zookeeper, Memcache, ActiveMq等开源产品代码上没有任何相似性,不需要任何依赖,引用一个jar包就可以嵌入式使用,良好支持window环境,可以在一台机器上模拟分布式环境,更...

    fourinone-3.04.25

    5、自带一个集群文件浏览器,可以查看集群所有硬盘上的文件(不同于hadoop的namenode,没有单点问题和容量限制) 总的来说, 将集群看做一个操作系统,像操作本地文件一样操作远程文件。 但是fourinone并不提供一个...

    Python3实战Spark大数据分析及调度-第11章 Azkaban实战篇.zip

    要在Azkaban中运行Spark作业,首先需要创建一个作业定义文件,定义Spark程序的执行逻辑、依赖关系和其他参数。这个文件通常为`.job`格式,包含了执行脚本、命令行参数等信息。 5. **上传和调度Spark作业**: 使用...

    Oozie的使用

    Apache Oozie 是一个工作流调度系统,用于管理Apache Hadoop集群上的工作流作业。Oozie与Hadoop生态系统紧密集成,支持调度Hadoop的MapReduce、Pig、Hive、Sqoop等任务,以及Shell命令和Java程序。下面将详细介绍...

    azkaban2.5.0安装包及安装配置文档.rar

    除了Web界面,Azkaban还提供了一个命令行客户端,通过`bin/azkaban-cli.jar`进行交互,如提交工作流、查看工作流状态等。 **插件扩展** Azkaban支持插件机制,可以扩展新的作业类型,比如添加对其他数据处理框架的...

    59-数栖-离线开发v4.11.0-用户手册.pdf

    - **一站式离线开发集成环境**:数栖离线开发平台为用户提供了一个集成的数据同步、数据开发、发布管理和运维监控解决方案。 - **支持主流大数据计算引擎**:该平台支持Hadoop等流行的大数据计算引擎,并具备快速...

    azkaban-solo-server-0.1.0-SNAPSHOT.zip

    - 创建项目:在Azkaban Web界面,用户可以创建项目,每个项目包含一个或多个工作流。 - 上传作业:将作业脚本(如Shell脚本、Java程序等)打包成jar或zip文件,上传到Azkaban项目中。 - 定义工作流:通过拖拽作业...

    ETL工具pdi-7.1.0.0-12(Kettle).zip

    2. **Kitchen**:是一个命令行工具,用于批量执行ETL作业,适合自动化部署。 3. **Pan**:也是命令行工具,用于执行单个转换任务。 4. **Carte**:是PDI的服务器组件,可以托管和监控ETL作业和转换,支持远程控制。 ...

    azkaban单机模式编译包

    Azkaban是一款开源的工作流执行引擎,主要用于大数据处理工作流的调度和管理。它由LinkedIn开发,设计目标是简化批处理...通过了解其架构、配置和使用方法,用户可以在本地环境中快速构建一个高效的工作流调度系统。

    Azkaban实战案例

    我们需要确保Hadoop集群已经启动,然后将fs.job打包为fs.zip并上传。执行这个job后,可以在Azkaban的页面上看到执行状态,如果命令执行成功,状态会显示为succeed,否则会显示错误信息。通过这种方式,我们可以在...

Global site tag (gtag.js) - Google Analytics