zoukankan      html  css  js  c++  java
  • 通过hue提交oozie定时任务

    Oozie是什么?

    Oozie是一种Java Web应用程序,它运行在Java servlet容器——即Tomcat——中,并使用数据库来存储以下内容:

    • 工作流定义
    • 当前运行的工作流实例,包括实例的状态和变量

    Hue是什么? 

    Hue是一个可快速开发和调试Hadoop生态系统各种应用的一个基于浏览器的图形化用户接口。

     Hue能干什么? 

    1,访问HDFS和文件浏览 
    2,通过web调试和开发hive以及数据结果展示 
    3,查询solr和结果展示,报表生成 
    4,通过web调试和开发impala交互式SQL Query 
    5,spark调试和开发 
    6,Pig开发和调试 
    7,oozie任务的开发,监控,和工作流协调调度 
    8,Hbase数据查询和修改,数据展示 
    9,Hive的元数据(metastore)查询 
    10,MapReduce任务进度查看,日志追踪 
    11,创建和提交MapReduce,Streaming,Java job任务 
    12,Sqoop2的开发和调试 
    13,Zookeeper的浏览和编辑 
    14,数据库(MySQL,PostGres,SQlite,Oracle)的查询和展示

    提交oozie定时作业

     1、进入hue界面,点击workflows工作流,编辑workflows。

    2、点击create创建工作流。

    3、本文以hive2作业sql任务为例,拖拽hive2到action区域。

    4、例子是为车次表每天定时添加指定分区,分区为动态传参传入,和脚本类似,参数取值用${}包围。具体sql如下:

    CREATE TABLE if NOT EXISTS dw_serv_checi_query_day (
    user_id           string,
    railway_no        string,
    start_station     string 
    ) PARTITIONED BY (
    dt STRING
    )
    ROW FORMAT DELIMITED FIELDS TERMINATED BY '	' STORED AS TEXTFILE;
    ALTER TABLE dw_serv_checi_query_day  ADD PARTITION (dt = ${partdt});

    保存为addpart.sql,上传hdfs,通过hue上传很方便。选中上传的文件,要给出参数值,不能省略,否自运行时${}讲不会被转义。这里值依然用${}包围,是因为具体值会在Coordinator中传入。保存workflow。

    5、创建coordinator,

    选择刚才创建的workflows,选择定时时间,可以选择每日,每周,每月等等,选择任务有效期,最后要给出之前参数的值,这里的值是代表前一天的日期,oozie有一些内置的常量。保存提交,OK,定时任务完成了。

     

     这样就会在每天凌晨一点钟给车次表添加一个分区,分区值为前一天的日期,运行状态如下图

    oozie常用的系统常量

    常量表示形式 含义说明
    ${coord:minutes(int n)} 返回日期时间:从一开始,周期执行n分钟
    ${coord:hours(int n)} 返回日期时间:从一开始,周期执行n * 60分钟
    ${coord:days(int n)} 返回日期时间:从一开始,周期执行n * 24 * 60分钟
    ${coord:months(int n)} 返回日期时间:从一开始,周期执行n * M * 24 * 60分钟(M表示一个月的天数)
    ${coord:endOfDays(int n)} 返回日期时间:从当天的最晚时间(即下一天)开始,周期执行n * 24 * 60分钟
    ${coord:endOfMonths(1)} 返回日期时间:从当月的最晚时间开始(即下个月初),周期执行n * 24 * 60分钟
    ${coord:current(int n)} 返回日期时间:从一个Coordinator动作(Action)创建时开始计算,第n个dataset实例执行时间
    ${coord:dataIn(String name)} 在输入事件(input-events)中,解析dataset实例包含的所有的URI
    ${coord:dataOut(String name)} 在输出事件(output-events)中,解析dataset实例包含的所有的URI
    ${coord:offset(int n, String timeUnit)} 表示时间偏移,如果一个Coordinator动作创建时间为T,n为正数表示向时刻T之后偏移,n为负数向向时刻T之前偏移,timeUnit表示时间单位(选项有MINUTE、HOUR、DAY、MONTH、YEAR)
    ${coord:hoursInDay(int n)} 指定的第n天的小时数,n>0表示向后数第n天的小时数,n=0表示当天小时数,n<0表示向前数第n天的小时数
    ${coord:daysInMonth(int n)} 指定的第n个月的天数,n>0表示向后数第n个月的天数,n=0表示当月的天数,n<0表示向前数第n个月的天数
    ${coord:tzOffset()} ataset对应的时区与Coordinator Job的时区所差的分钟数
    ${coord:latest(int n)} 最近以来,当前可以用的第n个dataset实例
    ${coord:future(int n, int limit)} 当前时间之后的dataset实例,n>=0,当n=0时表示立即可用的dataset实例,limit表示dataset实例的个数
    ${coord:nominalTime()} nominal时间等于Coordinator Job启动时间,加上多个Coordinator Job的频率所得到的日期时间。例如:start=”2009-01-01T24:00Z”,end=”2009-12-31T24:00Z”,frequency=”${coord:days(1)}”,frequency=”${coord:days(1)},则nominal时间为:2009-01-02T00:00Z、2009-01-03T00:00Z、2009-01-04T00:00Z、…、2010-01-01T00:00Z
    ${coord:actualTime()} Coordinator动作的实际创建时间。例如:start=”2011-05-01T24:00Z”,end=”2011-12-31T24:00Z”,frequency=”${coord:days(1)}”,则实际时间为:2011-05-01,2011-05-02,2011-05-03,…,2011-12-31
    ${coord:user()} 启动当前Coordinator Job的用户名称
    ${coord:dateOffset(String baseDate, int instance, String timeUnit)} 计算新的日期时间的公式:newDate = baseDate + instance * timeUnit,如:baseDate=’2009-01-01T00:00Z’,instance=’2′,timeUnit=’MONTH’,则计算得到的新的日期时间为’2009-03-01T00:00Z’。
    ${coord:formatTime(String timeStamp, String format)} 格式化时间字符串,format指定模式

    例如,昨天的日期就可以写为昨天日期 ${coord:formatTime(coord:dateOffset(coord:nominalTime(), -1, 'DAY'), 'yyyyMMdd')}

    问题与解决办法

    oozie会存在时区问题,默认会与中国时间会相差8个小时,这就需要oozie的时区,我使用的是cdh,所以设置很方便,进入cm的管理界面,进入oozie的设置,添加配置:

    保存,重启,问题解决

  • 相关阅读:
    easy ui 表单ajax和from两种提交数据方法
    easy ui 下拉级联效果 ,下拉框绑定数据select控件
    easy ui 下拉框绑定数据select控件
    easy ui 异步上传文件,跨域
    easy ui 菜单和按钮(Menu and Button)
    HTTP 错误 404.3
    EXTJS4.2 后台管理菜单栏
    HTML 背景图片自适应
    easy ui 表单元素input控件后面加说明(红色)
    EXTJS 4.2 添加滚动条
  • 原文地址:https://www.cnblogs.com/mr-ivan/p/6593550.html
Copyright © 2011-2022 走看看