实战:经典JOB案例详解

2019-01-19 14:57

阅读建议

建议你耐心仔细阅读本文,先对JOB的结构有整体概念,然后研究每个文件的意义,过程中请多翻看案例代

码demo-cd。至此,你一定能够深刻理解JOB的构造。

案例demo-cd的模拟场景简述:每日从上游业务系统同步增量数据到HADOOP,然后运行数据分析模型,

对新过来的数据进行分析,得出分析结果后,把结果导出到前端系统,供前端做人工审查。

阅读本文之前,建议你对SHELL、HIVE、SQOOP有所了解,这些都是零部件,而本文所述是整体结构。

1 / 10

一、JOB的文件结构

JOB的文件结构通常是这样的:

在SVN目录oozie-app下,有各种JOB,他们是相对独立的,每个JOB都可以提取下来单独发布到HADOOP平台上运行(部署过程另外讲解)。比如我们的经典案例demo-cd,就是一个JOB。

hql目录用于存放hive脚本,hive脚本习惯后缀.q;shell目录用于存放shell脚本,shell脚本习惯后缀.sh。 文件coordinator.xml、demo-cd.properties、runJob.sh、workflow.xml,是一个JOB所必需的,文件removeJob.sh不是必需的,它们的意义下面详解。

2 / 10

二、JOB的文件分解

在讲解JOB的各个文件意义之前,我们思考一个业务场景:当客户提出一个数据模型,我们首先要通过SQOOP

工具,把业务数据从业务系统同步到HADOOP平台供数据分析使用,然后通过HIVE实现数据模型,这过程中可能形成多个HIVE.q脚本和SHELL.sh脚本,它们之间相互依赖,必须有序地、且可能要求按一定的频率重复执行。目前这些脚本都还只是零散的工作部件(action),我们希望这些脚本被组织起来,按照预设的执行顺序和调度频率执行,谁来负责这个事情?预设脚本的执行顺序,是工作流(workflow)要解决的问题;预设工作流的执行频率,是调度机制(coordinator)要解决的问题。Coordinator和workflow一起让工作变得有组织和有序。 1)workflow.xml

它负责组织一个工作流。文件中,你可以看到多个action,每个action都有各自负责执行的内容(通常是执

行一个SHELL脚本),多个action之间的流向是预设的,而且是单向的非闭合的。

以下我们截取一段workflow.xml做详解:

…… 省略workflow中间多个action,详看案例代码

${jobtracker_address} ${namenode_address}

mapred.job.queue.name ${mapred_job_queue_name}

${file_execute_Q}

${file_model_001}

${nominalformate_Date} ${mapred_job_queue_name}

shell/${file_execute_Q}#${file_execute_Q} hql/${file_model_001}#${file_model_001}

…… 省略workflow中间多个action,详看案例代码

aml wf failed, error message[${wf:errorMessage(wf:lastErrorNode())}]

3 / 10

2)coordinator.xml

上面讲到workflow是一个工作流,但它是单向的非闭合的,它没有回路,换言之,一遍跑完它就真的完了,

workflow无法帮助你轮循工作流。Coordinator作为弥补,它是一个调度器,负责将workflow按预设的频率有序地重复执行。

start=\ end=\timezone=\xmlns=\>

1

initial-instance=\timezone=\> ${hdfs_address_prefix}/${YEAR}${MONTH}${DAY}

${coord:current(-1)}

${application_path}

sqoop_import_path

${coord:dataOut('output')}

nominalformate_Date

${coord:formatTime(coord:dateOffset(coord:nominalTime(), -1, 'DAY'), \

3)demo-cd.properties

定义了JOB私有的参数配置,不作详解。但以下几个参数需要注意:

job_start=2014-09-02T01:00+0800 job_end=2099-12-31T02:00+0800

4 / 10

4)runJob.sh

这个文件的作用就是启动JOB,理解这个文件,可以分三部分:

A、读取公共配置文件/appcom/apps/hduser0006/server.env,获取所需参数值

j_username=`grep j_username /appcom/apps/hduser0006/server.env|awk 'BEGIN{FS=\` j_password=`grep j_password /appcom/apps/hduser0006/server.env|awk 'BEGIN{FS=\` oozie_url=`grep oozie_url /appcom/apps/hduser0006/server.env|awk 'BEGIN{FS=\` process_user=`grep process_user /appcom/apps/hduser0006/server.env|awk 'BEGIN{FS=\`

namenode_address=`grep namenode_address /appcom/apps/hduser0006/server.env|awk 'BEGIN{FS=\` jobtracker_address=`grep jobtracker_address /appcom/apps/hduser0006/server.env|awk 'BEGIN{FS=\`

mapred_job_queue_name=`grep mapred_job_queue_name /appcom/apps/hduser0006/server.env|awk 'BEGIN{FS=\` data_db_username=`grep data_db_fxq_username /appcom/apps/hduser0006/server.env|awk 'BEGIN{FS=\` data_db_password=`grep data_db_fxq_password /appcom/apps/hduser0006/server.env|awk 'BEGIN{FS=\` data_db_url=`grep data_db_fxq_url /appcom/apps/hduser0006/server.env|awk 'BEGIN{FS=\`

B、提交JOB

cd /appcom/apps/hduser0006/demo-cd/; chmod 775 *.* dos2unix *.sh;

hadoop fs -rmr /apps/hduser0006/demo-cd;

hadoop fs -put /appcom/apps/hduser0006/demo-cd/ /apps/hduser0006/demo-cd/;

C、通过Oozie启动JOB,只需一条Oozie启动命令

oozie

-Dheader:j_username=$j_username -Dheader:j_password=$j_password job -Dnamenode_address=$namenode_address

-Djobtracker_address=$jobtracker_address -Dmapred_job_queue_name=$mapred_job_queue_name -Ddata_db_username=$data_db_username -Ddata_db_password=$data_db_password -Ddata_db_url=$data_db_url -Dprocess_user=$process_user

--oozie $oozie_url -config /appcom/apps/hduser0006/demo-cd/demo-cd.properties -auth ldap -run -doas $process_user

5)removeJob.sh

它仅仅是一个杀JOB的工具,从来不需要修改它,而且它不是必须的。当我们通过执行runJob.sh启动JOB

之后,会返回一个JOB-ID,我们可以把JOB-ID交给removeJob.sh,把JOB杀掉。

……/demo-cd/removeJob.sh [JOB-ID]

另外,我们也可以通过如下命令,杀JOB: /appcom/oozie/bin/killJob.sh [JOB-ID]

5 / 10


实战:经典JOB案例详解.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:喷射混凝土支护检验批质量验收记录表小里程

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: