小工具篇

任务调度 | HUE操作OOZIE

工作流概念

工作流(Workflow),指“业务过程的部分或整体在计算机应用环境下的自动化”。是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。
工作流解决的主要问题是:为了实现某个业务目标,利用计算机软件在多个参与者之间按某种预定规则自动传递文档、信息或者任务。
一个完整的数据分析系统通常都是由多个前后依赖的模块组合构成的:数据采集、数据预处理、数据分析、数据展示等。各个模块单元之间存在时间先后依赖关系,且存在着周期性重复。

核心概念:依赖执行 周期重复执行

工作流实现方式

  • 自己开发实现调度工具
  • 使用第三方调度软件

工作流调度

1、在大数据的实际开发中,我们数据的整个处理和分析过程是周期型的工作,比如每隔一天都需要讲整个流程执行一遍
2、所以我们需要一个工作流调度框架,帮我们在合适的时间重复执行这个分析任务

什么是oozie

Oozie是一个用于管理Apache Hadoop作业的工作流调度程序系统。

Oozie由Cloudera公司贡献给Apache的基于工作流引擎的开源框架,是用于Hadoop平台的开源的工作流调度引擎,是用来管理Hadoop作业,属于web应用程序,由Oozie client和Oozie Server两个组件构成,Oozie Server运行于Java Servlet容器(Tomcat)中的web程序。

Oozie的目的是按照DAG(有向无环图)调度一系列的Map/Reduce或者Hive等任务。Oozie 工作流由hPDL(Hadoop Process Definition Language)定义(这是一种XML流程定义语言)。

适用场景

  • 需要按顺序进行一系列任务;
  • 需要并行处理的任务;
  • 需要定时、周期触发的任务;
  • 可视化作业流运行过程;
  • 运行结果或异常的通报。

Oozie架构

image-20230415092318056

1
2
3
4
5
6
7
8
9
10
#Oozie Client
提供命令行、java api、rest等方式,对Oozie的工作流流程的提交、启动、运行等操作;

#Oozie WebApp
即 Oozie Server,本质是一个java应用。可以使用内置的web容器,也可以使用外置的web容器;

#Hadoop Cluster
底层执行Oozie编排流程的各个hadoop生态圈组件;

Oozie底层也是MapReduce

image-20230415092413396

image-20230415092423650

Oozie工作流类型

==workflow== 普通工作流 没有定时和条件触发功能。

==coordinator== 定时工作流 可以设置执行周期和频率

bundle 批处理工作流 一次可以提交执行多个coordinator

image-20230415092455030

image-20230415092513826

大数据中的工作流

能够使用工作流完成的业务一般具有什么特点呢?

1
2
3
4
5
1) 整个业务流程需要周期性重复干
2) 整个业务流程可以被划分为多个阶段
3) 每一个阶段存在依赖关系,前序没有操作, 后续也无法执行

如果发现实际生产中的某些业务满足了以上特征, 就可以尝试使用工作流来解决

请问, 大数据的工作流程是否可以使用工作流来解决呢? 完全可以的

image-20230927231253554

请问: 如何实现一个工作流呢? 已经有爱心人士将工作流软件实现了, 只需要学习如何使用这些软件配置工作流程即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
单独使用:
azkaban: 来源于领英公司 配置工作流的方式是通过类似于properties文件的方式来配置, 只需要简单的几行即可配置,提供了一个非常的好可视化界面, 通过界面可以对工作流进行监控管理, 号称 只要能够被shell所执行, azkaban都可以进行调度, 所以azkaban就是一个shell客户端软件

oozie: 来源于apache 出现时间较早一款工作流调度工具, 整个工作流的配置主要采用XML方式进行配置, 整个XML配置是非常繁琐的, 如果配置一个MR, 相当于将MR重写一遍, 而且虽然提供了一个管理界面, 但是这个界面仅能查看, 无法进行操作, 而且界面异常卡顿

总结:
azkaban要比oozie更加好用


如何和HUE结合使用:
azkaban由于不属于apache旗下, 所以无法和HUE集成
hue是属于apache旗下的, 所以HUE像集成一款工作流的调度工具, 肯定优先集成自家产品
ooize也是属于apache旗下的, HUE对oozie是可以直接集成的, 集成之后, 只需要用户通过鼠标的方式点一点即可实现工作流的配置

总结:
hue加入后, oozie要比azkaban更加好用

oozie本质是将工作流翻译为MR程序来运行

Oozie使用案例

Oozie的操作步骤-WorkFlow

  • 1、开启Oozie服务

image-20220610160335387

  • 2、打开Oozie页面

  • 3、创建WorkFlow工作流,并命名

  • 4、让oozie调度hive脚本

    image-20220610160815459

  • 5、找到你的hive脚本

    image-20220610161324971

    • 5.1 在Linux的/root目录,写一个SQL脚本:hive_test.sql

      1
      2
      3
      4
      5
      6
      create database myhive;
      use myhive;
      create table if not exists stu(id int ,name string)
      row format delimited fields terminated by '\t';
      insert into stu values (1,"zhangsan");
      insert into stu values (2,"lisi");
      • 5.1 在本地设置脚本权限为为777

        1
        chmod 777  /root/hive_test.sh
      • 5.2 将脚本上传到HDFS的/user/hue/oozie_test目录

        1
        2
        hadoop fs -put  /root/hive_test.sh /user/hue/oozie_test
        hadoop fs -chmod 777 /user/hue/oozie_test/hive_test.sh
  • 6、保存工作流

    image-20220610161411043

  • 7、点击执行

    image-20220610161450410

  • 8、查看进度

    image-20220610161545883

  • 9、以后如何找到该工作流?

    image-20220610161721421

    image-20220610161750504

Oozie的操作步骤-定时计划

  • 1、打开定时计划页面

    image-20220610162058541

  • 2、进行设置

    image-20220610162538387

  • 3、保存并执行

Oozie的操作步骤-多个定时计划批量执行(Bundle)

image-20220610163632445

WorkFlow 、计划、Bundle之间的关系

1
2
3
4
5
6
1、WorkFlow是一次性的工作流
2、计划是让WorkFlow可以定时的多次执行
3、Bundle是包含多个计划,可以让多个计划进行批量管理

结论: Bundle包含计划, 计划包含WorkFlow, WorkFlow包含命令和脚本

image-20230415093149662

  • 新增oozie程序

  • 提交任务

  • 修复异常