Oozie笔记
简介
- Oozie 是用于 Hadoop 平台的开源的工作流调度引擎。
- 用于管理 Hadoop
- 属于web应用程序, 由 Oozie client 和 Oozie Server 两个组件构成。
- Oozie Server 运行于 Java Servlet容器 (Tomcat) 中的 web 程序。
作用
- 统一调度hadoop系统中场景的MR任务启动、hdfs操作、shell调度、hive操作等
- 使得复杂的依赖关系、时间触发、事件触发使用xml语言进行表达, 开发效率提高
- 一组任务使用一个DAG来表示, 使用图形表达流程逻辑更加清晰
- 支持很多种任务调度, 能完成大部分 hadoop 任务处理
- 程序定义支持 EL 常量 和 函数, 表达更加丰富
Oozie 架构

安装方式
- 手动安装
- Cloudera Manger 添加服务
Oozie Web控制台
- 解压ext-x.x到/var/lib/oozie目录下 unzip ext-x.x.zip -d /var/lib/oozie/
- Oozie服务中配置启用web控制台
- 保存,重启oozie服务
Oozie 配置
- 节点内存配置
- oozie.service.callablequeueservice.callable.concurrency(节点并发)
- oozie.service.callablequeueservice.queue.size(队列大小)
- oozie.service.ActionService.executor.ext.classes(扩展)
Oozie 共享库
- /user/oozie/share/lib(hdfs中目录)
web管理地址
- http://oozie_host_ip:11000/oozie/
Oozie 管理
- 任务列表查看
- 任务状态查看
- 流程返回信息
- 节点信息查看
- 流程图信息
- 日志查看
- 系统信息查看 和 配置
Oozie CLI 命令
- 启动任务
- oozie job -oozie http://ip:11000/oozie/ -config job.properties -run
- 停止任务
- oozie job -oozie http://ip:11000/oozie/ -kill 0000002-150713234209387-oozie-oozi-W
- 提交任务
- oozie job -oozie http://ip:11000/oozie/ -kill 0000002-150713234209387-oozie-oozi-W
- 开始任务
- oozie job -oozie http://ip:11000/oozie/ -config job.properties -start 0000003-150713234209387-oozie-oozi-W
- 查看任务执行情况
- oozie job -oozie http://ip:11000/oozie/ -config job.properties -info 0000003-150713234209387-oozie-oozi-W
Job 配置 job.properties

WorkFLow 配置
版本信息
- <workflow-app xmlns="uri:oozie:workflow:0.4" name=“workflow name">
EL函数
基本EL函数
String firstNotNull(String value1, String value2)
String concat(String s1, String s2)
String replaceAll(String src, String regex, String replacement)
String appendAll(String src, String append, String delimeter)
String trim(String s)
String urlEncode(String s)
String timestamp()
String toJsonStr(Map) (since Oozie 3.3)
String toPropertiesStr(Map) (since Oozie 3.3)
String toConfigurationStr(Map) (since Oozie 3.3)
WorkFlow EL
- String wf:id() – 返回当前workflow作业ID
- String wf:name() – 返回当前workflow作业NAME
- String wf:appPath() – 返回当前workflow的路径
- String wf:conf(String name) – 获取当前workflow的完整配置信息
- String wf:user() – 返回启动当前job的用户
- String wf:callback(String stateVar) – 返回结点的回调URL,其中参数为动作指定的退出状态
- int wf:run() – 返回workflow的运行编号,正常状态为0
- Map wf:actionData(String node) – 返回当前节点完成时输出的信息
- int wf:actionExternalStatus(String node) – 返回当前节点的状态
- String wf:lastErrorNode() – 返回最后一个ERROR状态推出的节点名称
- String wf:errorCode(String node) – 返回指定节点执行job的错误码,没有则返回空
- String wf:errorMessage(String message) – 返回执行节点执行job的错误信息,没有则返回空
HDFS EL
- boolean fs:exists(String path)
- boolean fs:isDir(String path)
- long fs:dirSize(String path) – 目录则返回目录下所有文件字节数;否则返回-1
- long fs:fileSize(String path) – 文件则返回文件字节数;否则返回-1\
- long fs:blockSize(String path) – 文件则返回文件块的字节数;否则返回-1
节点
流程控制节点
流程控制节点
- start – 定义workflow开始
- end – 定义workflow结束
- decision – 实现switch功能
- sub-workflow – 调用子workflow
- kill – 杀死workflow
- fork – 并发执行workflow
- join – 并发执行结束(与fork一起使用)
<decision name="[NODE-NAME]">
<switch>
<case to="[NODE_NAME]">[PREDICATE]</case>
...
<case to="[NODE_NAME]">[PREDICATE]</case>
<default to="[NODE_NAME]" />
</switch>
</decision>
动作节点
shell
java
fs
MR
hive
sqoop
<fork name="[FORK-NODE-NAME]">
<path start="[NODE-NAME]" />
...
<path start="[NODE-NAME]" />
</fork>
...
<join name="[JOIN-NODE-NAME]" to="[NODE-NAME]" />
Shell节点
job.properties
nameNode=hdfs://node01:8020
jobTracker=node01:8032
queueName=default
examplesRoot=examples oozie.wf.application.path=${nameNode}/user/workflow/oozie/shellworkflow.xml
<workflow-app xmlns="uri:oozie:workflow:0.3" name="shell-wf">
<start to="shell-node"/>
<action name="shell-node">
<shell xmlns="uri:oozie:shell-action:0.1">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
</property>
</configuration>
<exec>echo</exec>
<argument>hi shell in oozie</argument>
</shell>
<ok to="end"/>
<error to="fail"/>
</action>
<kill name="fail">
<message>Map/Reduce failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end"/>
</workflow-app>
调用impala
job.properties
nameNode=hdfs://node01:8020
jobTracker=node01:8032
queueName=default
examplesRoot=examples
oozie.usr.system.libpath=true
oozie.libpath=${namenode}/user/${user.name}/workflow/impala/lib oozie.wf.application.path=${nameNode}/user/${user.name}/workflow/impalaworkflow.xml
<workflow-app xmlns="uri:oozie:workflow:0.4" name="impala-wf">
<start to="shell-node"/>
<action name="shell-node">
<shell xmlns="uri:oozie:shell-action:0.1">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
</property>
</configuration>
<exec>impala-shell</exec>
<argument>-i</argument>
<argument>node02</argument>
<argument>-q</argument>
<argument>invalidate metadata</argument>
<capture-output/>
</shell>
......
</action>
.......
</workflow-app>
fs节点
workflow.xml
<workflow-app name="[WF-DEF-NAME]" xmlns="uri:oozie:workflow:0.5">
...
<action name="[NODE-NAME]">
<fs>
<delete path='[PATH]'/>
<mkdir path='[PATH]'/>
<move source='[SOURCE-PATH]' target='[TARGET-PATH]'/>
<chmod path='[PATH]' permissions='[PERMISSIONS]' dir-files='false' />
<touchz path='[PATH]' />
<chgrp path='[PATH]' group='[GROUP]' dir-files='false' />
</fs>
<ok to="[NODE-NAME]"/>
<error to="[NODE-NAME]"/>
</action>
</workflow-app>
Java节点
job.properties
nameNode=hdfs://node01:8020
jobTracker=node01:8032
queueName=default
examplesRoot=examples
oozie.usr.system.libpath=true
oozie.libpath=${nameNode}/user/workflow/lib/lib4java oozie.wf.application.path=${nameNode}/user/workflow/oozie/javaworkflow.xml
<workflow-app xmlns="uri:oozie:workflow:0.3" name="mr-wc-wf">
<start to="mr-node"/>
<action name="mr-node">
<java>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<prepare>
<delete path="${nameNode}/user/path" />
<mkdir path="${nameNode}/user/path" />
</prepare>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
</property>
</configuration>
<main-class>com.pagename.classname</main-class>
<arg>args1</arg>
<arg>args2</arg>
</java>
<ok to="end"/>
<error to="fail"/>
</action>
<kill name="fail">
<message>Map/Reduce failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end"/>
</workflow-app>
Oozie笔记的更多相关文章
- Hadoop Oozie 学习笔记
Oozie是一个工作流引擎服务器,用于运行Hadoop Map/Reduce和Pig 任务工作流.同时Oozie还是一个Java Web程序,运行在Java Servlet容器中,如Tomcat. O ...
- oozie学习笔记
#################################################################################################### ...
- Hadoop学习笔记—18.Sqoop框架学习
一.Sqoop基础:连接关系型数据库与Hadoop的桥梁 1.1 Sqoop的基本概念 Hadoop正成为企业用于大数据分析的最热门选择,但想将你的数据移植过去并不容易.Apache Sqoop正在加 ...
- #数据技术选型#即席查询Shib+Presto,集群任务调度HUE+Oozie
郑昀 创建于2014/10/30 最后更新于2014/10/31 一)选型:Shib+Presto 应用场景:即席查询(Ad-hoc Query) 1.1.即席查询的目标 使用者是产品/运营/销售 ...
- Hadoop概括——学习笔记<一>
之前有幸在MOOC学院抽中小象学院hadoop体验课. 这是小象学院hadoop2.X概述第一章的笔记 第一章主要讲的是hadoop基础知识.老师讲的还是比较全面简单的,起码作为一个非专业码农以及数据 ...
- sqoop笔记
adoop学习笔记—18.Sqoop框架学习 一.Sqoop基础:连接关系型数据库与Hadoop的桥梁 1.1 Sqoop的基本概念 Hadoop正成为企业用于大数据分析的最热门选择,但想将你的数 ...
- 【Oozie】安装配置Oozie
安装和配置Oozie Oozie用于Hadoop的工作流配置: 参考链接: <Install and Configure Apache Oozie Workflow Scheduler for ...
- Apache Flink学习笔记
Apache Flink学习笔记 简介 大数据的计算引擎分为4代 第一代:Hadoop承载的MapReduce.它将计算分为两个阶段,分别为Map和Reduce.对于上层应用来说,就要想办法去拆分算法 ...
- Hadoop自学笔记(一)常见Hadoop相关项目一览
本自学笔记来自于Yutube上的视频Hadoop系列.网址: https://www.youtube.com/watch?v=-TaAVaAwZTs(当中一个) 以后不再赘述 自学笔记,难免有各类错误 ...
随机推荐
- 【快学springboot】在springboot中写单元测试
前言 很多公司都有写单元测试的硬性要求,在提交代码的时候,如果单测通不过或者说单元测试各种覆盖率不达标,会被拒绝合并代码.写单元测试,也是保证代码质量的一种方式. junit单元测试 相信绝大多数的J ...
- 九 SpringMvc与json交互
将json输出到页面: 1 加入jar包 2 配置Controller层,开启注解ResponseBody,将json发送到页面: 3 访问url 4 响应json,在形参列表里面加上注解
- Prometheus 学习目录
Prometheus 介绍 Prometheus 安装 https://www.bookstack.cn/read/prometheus-book/quickstart-why-monitor.md ...
- canvas象棋 画图
今天写了一个canvas画图的象棋 .js基础不行,只画了个图,以后补充... <!DOCTYPE html> <html lang="en"> <h ...
- Oracle查看正在执行的存储过程
正在执行的存储过程 select owner,name from v$db_object_cache where type like '%PROCE%' and locks >0 and pin ...
- selenium+chrome抓取淘宝宝贝-崔庆才思路
站点分析 源码及遇到的问题 在搜索时,会跳转到登录界面 step1:干起来! 先取cookie step2:载入cookie step3:放飞自我 关于phantomJS浏览器的问题 源码 站点分析 ...
- array_multisort 对关联数组进行排序的问题 PHP
我们在php的数组操作中经常用到对数组进行排序的问题,这里说的是对关联数组进行排序需要用到函数 array_multisort . array_multisort(array_column($arr, ...
- k-近邻算法原理入门-机器学习
//2019.08.01下午机器学习算法1——k近邻算法1.k近邻算法是学习机器学习算法最为经典和简单的算法,它是机器学习算法入门最好的算法之一,可以非常好并且快速地理解机器学习的算法的框架与应用.2 ...
- 七 联系人与客户多对一配置&联系人列表&分页查询联系人
联系人管理: 联系人实体类: package com.mycrm.domain; /** * 联系人的实体 * @author jt *CREATE TABLE `cst_linkman` ( `lk ...
- JavaScript 词法句法
JavaScript 中的几个重要概念 JavaScript 遵循 ECMA-262 规范,目前其最新版是 ECMAScript 2018,而获得所有主流浏览器完全支持的则是 ECMAScript 5 ...