




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
阅读建议建议你耐心仔细阅读本文,先对JOB的结构有整体概念,然后研究每个文件的意义,过程中请多翻看案例代码demo-cd。至此,你一定能够深刻理解JOB的构造。案例demo-cd的模拟场景简述:每日从上游业务系统同步增量数据到HADOOP,然后运行数据分析模型,对新过来的数据进行分析,得出分析结果后,把结果导出到前端系统,供前端做人工审查。阅读本文之前,建议你对SHELL、HIVE、SQOOP有所了解,这些都是零部件,而本文所述是整体结构。 一、JOB的文件结构JOB的文件结构通常是这样的: 在SVN目录oozie-app下,有各种JOB,他们是相对独立的,每个JOB都可以提取下来单独发布到HADOOP平台上运行(部署过程另外讲解)。比如我们的经典案例demo-cd,就是一个JOB。hql目录用于存放hive脚本,hive脚本习惯后缀.q;shell目录用于存放shell脚本,shell脚本习惯后缀.sh 。文件coordinator.xml、perties、runJob.sh、workflow.xml,是一个JOB所必需的,文件removeJob.sh不是必需的,它们的意义下面详解。二、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 清除hdfs缓存路径,一般地,在workflow第一个action清除一遍即可,其他action不建议清除,如果你对hdfs缓存理解不足。 $mapred_job_queue_name $file_execute_Q 执行shell脚本的名称 $file_model_001 $nominalformate_Date $mapred_job_queue_name 交给shell脚本的参数列表,在shell脚本中可以按顺序获取参数 shell/$file_execute_Q#$file_execute_Q hql/$file_model_001#$file_model_001 交给action的脚本列表,假如你的shell脚本中调用hive脚本,hive脚本也需要列出。注意,这是相对于JOB目录的相对路径 设置action的下一步流向.。当Action退出时会检查返回码,当返回码为0,则ok,否则error 省略workflow中间多个action,详看案例代码你可以选择这个action作为整个workfow正常退出的终点。它仅仅在正常结束之前帮你清理HDFS缓存。 作为异常结束的终点 aml wf failed, error message$wf:errorMessage(wf:lastErrorNode() 作为正常结束的终点2)coordinator.xml上面讲到workflow是一个工作流,但它是单向的非闭合的,它没有回路,换言之,一遍跑完它就真的完了,workflow无法帮助你轮循工作流。Coordinator作为弥补,它是一个调度器,负责将workflow按预设的频率有序地重复执行。 1 $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), yyyyMMdd)利用页面函数,获取调度日期T-1,作为业务日期 3)perties定义了JOB私有的参数配置,不作详解。但以下几个参数需要注意:job_start=2014-09-02T01:00+0800JOB启动时间(调度起始)job_end=2099-12-31T02:00+0800JOB终止时间(调度终止)4)runJob.sh这个文件的作用就是启动JOB,理解这个文件,可以分三部分:A、读取公共配置文件/appcom/apps/hduser0006/server.env,获取所需参数值j_username发布JOB的用户名,由平台定义=grep j_username /appcom/apps/hduser0006/server.env|awk BEGINFS=:print $NF从公共配置文件中读取公共配置j_password发布JOB的用户密码,由平台定义=grep j_password /appcom/apps/hduser0006/server.env|awk BEGINFS=:print $NFoozie_urlOozie前端地址,由平台定义=grep oozie_url /appcom/apps/hduser0006/server.env|awk BEGINFS=:print $NFprocess_userJOB运行过程的用户,由平台定义=grep process_user /appcom/apps/hduser0006/server.env|awk BEGINFS=:print $NFnamenode_addressNAMENODE主机的HDFS地址,由平台定义=grep namenode_address /appcom/apps/hduser0006/server.env|awk BEGINFS=:print $NFjobtracker_addressJobtracker即JOB任务管理角色,由平台定义=grep jobtracker_address /appcom/apps/hduser0006/server.env|awk BEGINFS=:print $NFmapred_job_queue_name队列,可以有选择=grep mapred_job_queue_name你可以选择不同的队列名,只要它在server.env中有配置,且平台允许你的user使用该队列。 /appcom/apps/hduser0006/server.env|awk BEGINFS=:print $NFdata_db_username某个oracle库的用户=grep data_db_fxq_username /appcom/apps/hduser0006/server.env|awk BEGINFS=:print $NFdata_db_password某个oracle库的密码=grep data_db_fxq_password /appcom/apps/hduser0006/server.env|awk BEGINFS=:print $NFdata_db_url某个oracle库的连接串=grep data_db_fxq_url /appcom/apps/hduser0006/server.env|awk BEGINFS=:print $NFB、提交JOBcd /appcom/apps/hduser0006/demo-cd/;chmod 775 *.*dos2unix *.sh;对本地JOB文件进行格式化和授权hadoop fs -rmr /apps/hduser0006/demo-cd;确保HDFS的路径干净hadoop fs -put /appcom/apps/hduser0006/demo-cd/ /apps/hduser0006/demo-cd/;提交本地JOB到HDFSC、通过Oozie启动JOB,只需一条Oozie启动命令oozieOozie启动命令 -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/perties同时读取私有配置 -auth ldap -run -doas $process_user5)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-ID6)server.env/appcom/apps/hduser0006/server.env这个文件不包含在JOB中,但有必要作讲解,因为runJob.sh会读取它。这是一个公共配置文件,主要包含两部分内容,平台配置和业务系统配置。为什么需要这样一个文件?我们有三个环境(开发、测试和生产环境),我们在开发环境调试代码,移交测试环境,发布生产环境,在不同的环境中,平台配置和业务系统配置总是固定的但又不一样,这些配置我们有必要提取出来作为公共配置,每个环境存放一份,当切换环境时,JOB能够动态获取。三、JOB的文件执行顺序前面我们对JOB中各个文件进行了详尽的分解,但仍然难以形成连贯的理解,特别是当我们看到遍地开花的参数,感觉更凌乱。以下,我们通过观察参数的传递,了解文件的执行顺序。JOB是通过执行runJob.sh启动的, runJob.sh读取/appcom/apps/hduser0006/server.env公共配置,交给Oozie,同时读取perties私有配置。Oozie启动后, Oozie只是个甩手掌柜,干活的是coordinator,它是JOB的调度者。coordinator.xml主要关注调度配置。注意,有个特殊的参数nominalformate_Date就是在coordinator.xml中动态生成的,nominalformate_Date代表业务日期。我们的JOB往往被要求按日轮循运行,以针对每日的增量数据做运算。这就要求具有“业务日期”参数,好让JOB知道本次调度的任务是处理哪天的数据,并且“业务日期”必须是个可变量,当然地,coordinator能够最先为你提供“业务日期”。插个题外话,如何理解“调度日期”、“业务日期”、“系统日期”? “调度日期”的起点是$job_start,这个参数在perties中设置,被runJob.sh中的oozie-config命令截获,交给coordinator.xml,于是作为调度者的coordinator就知道了该从哪天开始调度。调度间隔由coordinator.xml中的频率设置requency决定,“业务日期”是基于“调度日期“的,一般是“调度日期”T-1。至于“系统日期“,就是现实的北京时间,意义不大。举一个场景,在20150612的时候,我们发布了一个JOB,这个JOB性能太好,一天就轮循了9次,假设job_start=2014-09-02T01:00+0800,调度频率是requency=$coord:hours(6) ,请观察下表的时间变化。调度次数调度日期业务日期系统日期第1次调度2014-09-02T01:00+08002014090120150612第2次调度2014-09-02T07:00+08002014090120150612第3次调度2014-09-02T013:00+08002014090120150612第4次调度2014-09-02T019:00+08002014090120150612第5次调度2014-09-03T01:00+08002014090220150612第6次调度2014-09-03T07:00+08002014090220150612第7次调度2014-09-03T013:00+08002014090220150612第8次调度2014-09-03T019:00+08002014090220150612第9次调度2014-09-04T01:00+08002014090320150612言归正传,前面讲到coordinator.xml是调度者,那么,它调度的是什么?是workflow工作流。在workflow.xml中定义的action可能利用到其他shell和hive脚本,在action的配置中就能找到。前面几个环节读取了大量的参数,最终目的就是交给action。至此,你已经看遍了一个JOB所有的文件。四、JOB发布部署到开发环境,需要使用SSH终端,登陆开发环境主机19,切换用户hduser0006,执行如下命令:假设你的JOB文件已经上传到/home/ex-hexuwen001/demo-cdcd /appcom/apps/hduser0006这是JOB发布的统一目录cp -rf /home/ex-hexuwen001/demo-cd ./把你的JOB拷过去cd /appcom/apps/hduser0006/demo-cd 切换到你的JOB下chmod 775 -R *对你的JOB文件授权dos2unix *.*;dos2unix */*.*;dos2unix */*/*.*;对你的JOB文件格式化bash -x ./runJob.sh启动的时候,你可以加上bash x命令,它可以让你看到整个runJob.sh的执行过程当启动成功,会返回一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第16课 三国鼎立 同步练(含答案)统编版历史七年级上册
- 2025辽宁交投集团所属盛融万恒公司招聘1人考试参考试题及答案解析
- 2025云南昆明西山区棕树营街道办事处经济发展办公室招聘辅助性工作人员1人考试参考试题及答案解析
- 2025山东青岛大学附属医院外包人员招聘28人备考练习试题及答案解析
- 公路建设工程施工组织设计方案
- 2025吉林省吉林大学白求恩第一医院神经创伤外科招聘备考练习题库及答案解析
- 能源产品销售代理合同协议书范本模板
- 2025年哈尔滨市清滨小学校招聘临聘教师2人考试参考试题及答案解析
- 2025江苏苏州工业园区东延路实验学校后勤辅助人员招聘1人考试参考试题及答案解析
- 2025年勤务保障试题及答案
- 贴牌生产委托授权书
- 做一个卓越而幸福的教育者课件
- 人教版小学数学五年级上册完美版全册PPT教学课件
- 《无人机组装与调试》-教学教案
- 跨境电商物流与供应链管理PPT全套完整教学课件
- C语言试讲稿课件
- 收音机组装指导书
- 义务教育科学课程标准(2022年版)测试题及答案含课标解读
- 水运工程统一用表之一《浙江省港口工程统一用表》
- GB/T 13306-2011标牌
- GA 1800.6-2021电力系统治安反恐防范要求第6部分:核能发电企业
评论
0/150
提交评论