热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

大数据组件之oozie

一、oozie介绍官网首页介绍:http://oozie.apache.org
一、oozie介绍

官网首页介绍:http://oozie.apache.org

大数据组件之oozie

(1)Oozie是一个管理 Apache Hadoop 作业的工作流调度系统。
(2)Oozie的 workflow jobs 是由 actions 组成的 有向无环图(DAG)。
(3)Oozie的 coordinator jobs 是由时间 (频率)和数据可用性触发的重复的 workflow jobs 。
(4)Oozie与Hadoop生态圈的其他部分集成在一起,支持多种类型的Hadoop作业(如Java map-reduce、流式map-reduce、Pig、Hive、Sqoop和Distcp)以及特定于系统的工作(如ava程序和shell脚本)。
(5)Oozie是一个可伸缩、可靠和可扩展的系统。

二、对比选型

简单项目的话可以用crontab来做控制,但是项目比较复杂的话会发现还是有很多不方便的,比如失败重启和日志查看等问题,所以我们通常在Azkaban和oozie之间做对比,选择适合自己公司或者项目的任务调度工具

  • 执行方式:Oozie底层在提交Hadoop Spark作业而Azkaban是直接操作shell语句。
  • 工作流定义: Oozie是通过xml定义的而Azkaban为properties来定义。
  • 部署过程: Oozie的部署相对困难些,同时它是从Yarn上拉任务日志。
  • 任务检测: Azkaban中如果有任务出现失败,只要进程有效执行,那么任务就算执行成功,这是BUG,但是Oozie能有效的检测任务的成功与失败。
  • 操作工作流: Azkaban使用Web操作。Oozie支持Web,RestApi,Java API操作。
  • 权限控制: Oozie基本无权限控制,Azkaban有较完善的权限控制,供用户对工作流读写执行操作。
  • 运行环境: Oozie的action主要运行在hadoop中而Azkaban的actions运行在Azkaban的服务器中。
  • 记录workflow的状态: Azkaban将正在执行的workflow状态保存在内存中,Oozie将其保存在Mysql中。
  • 出现失败的情况: Azkaban会丢失所有的工作流,但是Oozie可以在继续失败的工作流运行
    两者在功能方面大致相同,在安全性上可能Oozie会比较好,加之我们选择了CDH作为大数据平台,所以就用了其自带的oozie工具,且有相应的可视化操作工具hue配套使用,较为便捷。
三、架构原理

Oozie主要有三个层层包裹的主要概念

  • Workflow:工作流,由我们需要处理的每个工作组成,进行需求的流式处理,是对要进行的顺序化工作的抽象。
  • Coordinator:协调器,可以理解为工作流的协调器,可以将多个工作流协调成一个工作流来进行处理,是对要进行的顺序化的workflow的抽象。
  • Bundle:捆,束。将一堆的coordinator进行汇总处理,是对一堆coordiantor的抽象。

关于oozie的作业

Oozie的作业有三部分组成,分别是job.properties,workflow.xml,lib文件夹。下面分别介绍

Job.properties

从名称也能看出来,这个文件是用来配置作业(job)中用到的各种参数的,总结如下

大数据组件之oozie

注:
1、这个文件如果是在本地通过命令行进行任务提交的话,这个文件在本地就可以了,当然也可以放在hdfs上,与workflow.xml和lib处于同一层级。
2、nameNode,jobTracker和workflow.xml在hdfs中的位置必须设置。

一个简单的job.properties文件如下:

nameNode=hdfs://cm1:8020 jobTracker=cm1:8032 queueName=default examplesRoot=examples oozie.wf.application.path=${nameNode}/user/workflow/oozie/shell

workflow.xml:

这个文件是定义任务的整体流程的文件,需要注意的有三点:版本信息,EL函数,节点信息。
先上一个例子:

01. 02. 03. 04. 05. 06. ${fs:exists(concat(concat("/xxx/output/xxxList/", 07. task_id),"/_SUCCESS"))} 08. 09. 10. 11. 12. 13. 14. ${fs:exists(concat(concat(“/xxx/output/", task_id),"/_SUCCESS"))} 15. 16. 17. 18. 19. 20. 21. ${jobTracker} 22. ${namenode} 23. 24. 25. mapreduce.job.queuename 26. ${queueName} 27. 28. 29. com.xxx.Main 30. 31. 32. 33. 34. 35. Map/Reduce failed.error message[${wf:errorMessage(wf:lastErrorNode())}] 36. 37. 38.

  1. 版本信息:
    这个是写在第一行的,如下:

在xmls属性中定义了workflow的版本为0.4,workflow的版本不能高于oozie兼容的最高版本,可以降低。

  1. EL函数
    常用的EL函数有基本的EL函数,workFlow EL函数和HDFSEL函数。分别如下:
大数据组件之oozie
大数据组件之oozie
大数据组件之oozie
  1. 节点:
    Oozie的节点分成两种,流程控制节点和动作节点。所谓的节点实际就是一组标签。两种节点分别如下:

A. 流程控制节点

  • ——定义workflow的开始
  • ——定义workflow的结束
  • ——实现switch功能
  • 标签连用
  • ——调用子workflow
  • ——程序出错后跳转到这个节点执行相关操作
  • ——并发执行workflow
  • ——并发执行结束(与fork一起使用)

案例:

大数据组件之oozie
大数据组件之oozie

B. 动作节点

  • ——表示运行的是shell操作
  • ——表示运行的java程序
  • ——表示是对hdfs进行操作
  • ——表示进行的是MR操作
  • ——表示进程的是hive操作
  • ——表示进行的是sqoop的相关操作

Workflow.xml综述
文件需要被放在HDFS上才能被oozie调度,如果在启动需要调动MR任务,jar包同样需要在hdfs上。最终的目录结构如下:

/xxx/oozie/workflow.xml /xxx/oozie/lib /xxx/oozie/lib/mr-1.7-SNAPSHOT-**package**.jar /xxx/oozie/lib/xxx.mr-1.7-SNAPSHOT-**package**.jar

Lib文件夹:

在workflow工作流定义的同级目录下,需要有一个lib目录,在lib目录中存在java节点MapReduce使用的jar包。需要注意的是,oozie并不是使用指定jar包的名称来启动任务的,而是通过制定主类来启动任务的。在lib包中绝对不能存在某个jar包的不同版本,不能够出现多个相同主类。

四、安装搭建

在搭建好CDH后,可以直接通过添加服务的方式实现oozie的安装,比较方便。当然也可以在服务器上搭建独立的oozie服务,具体可参考https://oozie.apache.org/docs/5.0.0/AG_Install.html

搭设后进入oozie web控制台,地址为:OozieserverIp:11000/oozie/ (OozieserverIp为oozie所在的服务器的ip地址),界面如下:

大数据组件之oozie
oozie控制台

注:如果界面报错 Oozie web console is disabled,请看https://docs.cloudera.com/documentation/enterprise/5-5-x/topics/admin_oozie_console.html

五、开发使用

1.拷贝官方自带实例模板

cp -r examples/apps/shell/ oozie-apps

2.修改job.properties

nameNode=hdfs://hadoop:8020 jobTracker=hadoop:8032 queueName=default examplesRoot=oozie-apps oozie.wf.application.path=${nameNode}/user/hadoop/${examplesRoot}/shell EXEC=mem.sh #放一个脚本文件,脚本文件名称

3.修改workflow.xml

${jobTracker}${nameNode}mapred.job.queue.name${queueName}${EXEC}${nameNode}/user/hadoop/${examplesRoot}/shell/${EXEC}#${EXEC}Shell action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]

4.在shell目录下创建mem.sh

#!/bin/sh /usr/bin/date -R >> /opt/modules/oozie-4.1.0-cdh5.7.0/oozie-apps/shell/1.log /usr/bin/free -m >> /opt/modules/oozie-4.1.0-cdh5.7.0/oozie-apps/shell/1.log /usr/bin/df -lh >> /opt/modules/oozie-4.1.0-cdh5.7.0/oozie-apps/shell/1.log echo ------------------- >> /opt/modules/oozie-4.1.0-cdh5.7.0/oozie-apps/shell/1.log

注:/usr/bin/date为命令绝对路径,可以通过which date获得

5.上传到hdfs

bin/hdfs dfs -put /opt/modules/oozie-4.1.0-cdh5.7.0/oozie-apps/shell /user/hadoop/oozie-apps/

6.执行:

bin/oozie job -oozie http://hadoop:11000/oozie -config oozie-apps/shell/job.properties -run

7.检查结果

cat /opt/modules/oozie-4.1.0-cdh5.7.0/oozie-apps/shell/1.log

推荐阅读
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 众筹商城与传统商城的区别及php众筹网站的程序源码
    本文介绍了众筹商城与传统商城的区别,包括所售产品和玩法不同以及运营方式不同。同时还提到了php众筹网站的程序源码和方维众筹的安装和环境问题。 ... [详细]
  • 企业数据应用挑战及元数据管理的重要性
    本文主要介绍了企业在日常经营管理过程中面临的数据应用挑战,包括数据找不到、数据读不懂、数据不可信等问题。针对这些挑战,通过元数据管理可以实现数据的可见、可懂、可用,帮助业务快速获取所需数据。文章提出了“灵魂”三问——元数据是什么、有什么用、又该怎么管,强调了元数据管理在企业数据治理中的基础和前提作用。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
author-avatar
feify_fei512_478
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有