文章是从我CSDN博客扒下来的,所以图片会有csdn水印

https://blog.csdn.net/qq_41489540/article/details/111074075

概述

一个工作流就是一个Project
工作流就是很多的工作串起来就是工作流.

单一Job案例

在本地新建一个job文件
first.job

  1. type=command
  2. command=mkdir /root/jobs/demo

保存之后压缩成job.zip包

开始创建任务
打开Azkaban
https://zjj101:8443/index
Azkaban创建运行Job - 图1
任务名字和任务描述随便写
Azkaban创建运行Job - 图2
上传任务zip压缩包

Azkaban创建运行Job - 图3
选择刚刚自己编写的job文件,打成zip后的包,然后点击Upload开始上传.

Azkaban创建运行Job - 图4
点击按钮执行流程

Azkaban创建运行Job - 图5
点击执行

Azkaban创建运行Job - 图6
显示执行成功

Azkaban创建运行Job - 图7
查看效果

发现脚本已经执行成功了, 创建了一个demo文件夹.

  1. [root@zjj101 jobs]# pwd
  2. /root/jobs
  3. [root@zjj101 jobs]# ls
  4. demo

多个Job工作流案例

就是第一个job执行完了第二个job再执行

aaa.job内容:

  1. type=command
  2. command=mkdir /root/jobs/aaa

bbb.job内容:

  1. type=command
  2. dependencies=aaa
  3. command=mkdir /root/jobs/aaa/bbb

重点是dependencies属性,意思是这个job依赖名字为aaa的job

然后两个文件打包到一个zip文件里面, 名字随便起.
创建Azkaban Job过程和单一Job案例一模一样.创建完了下面显示这个,能看到有依赖关系.
Azkaban创建运行Job - 图8
然后点击Execute 按钮执行任务,执行过程和单一Job案例的过程是一模一样的.

结果执行完毕
Azkaban创建运行Job - 图9
看到效果,已经创建了aaa文件夹,然后在aaa文件夹下面又创建了bbb文件夹.

  1. [root@zjj101 jobs]# ls
  2. aaa
  3. [root@zjj101 jobs]# cd aaa
  4. [root@zjj101 aaa]# ls
  5. bbb
  6. [root@zjj101 aaa]# pwd
  7. /root/jobs/aaa
  8. [root@zjj101 aaa]#

两个Job依赖一个Job

dependencies属性可以写两个.
finish.job内容

  1. type=command
  2. dependencies=step1,step2
  3. command=echo "this is finish job"

Azkaban创建运行Job - 图10

调度Java的jar程序

随便创建个Maven项目

写个类

  1. package com.zjj.demo;
  2. import java.io.FileOutputStream;
  3. import java.io.IOException;
  4. public class test01 {
  5. public static void main(String[] args) throws IOException {
  6. // 根据需求编写具体代码
  7. FileOutputStream fos = new FileOutputStream("/root/jobs/output.txt");
  8. fos.write("hello world".getBytes());
  9. fos.close();
  10. }
  11. }

然后Maven package命令打成一个jar包,然后上传到/root/jobs/lib/目录下面

  1. [root@zjj101 lib]# pwd
  2. /root/jobs/lib
  3. [root@zjj101 lib]# ls
  4. demo-1.0-SNAPSHOT.jar
  5. [root@zjj101 lib]#

开始编写配置文件demo.job

demo.job内容:

  1. type=javaprocess
  2. java.class=com.zjj.demo.test01
  3. classpath=/root/jobs/lib/*

说明:
classpath 地址是Linux存放demo-1.0-SNAPSHOT.jar的位置
java.class 是你刚刚编写的Java代码的权限定类名,

写完之后给demo.job压缩成demo.zip文件.然后创建Azkaban任务,创建和启动job流程和单一job案例一模一样的.

然后耐心等待程序执行

Azkaban创建运行Job - 图11

查看结果

  1. [root@zjj101 jobs]# ls
  2. lib output.txt
  3. [root@zjj101 jobs]# cat output.txt
  4. hello world[root@zjj101 jobs]#

发现自动生成了一个 output.txt文件,然后里面还有内容.说明程序执行成功了.

HDFS操作任务

操作HDFS其实就是执行Linux命令.创建job和启动job和前面单一job案例是一模一样的.

job文件

  1. type=command
  2. command=/opt/module/hadoop-2.7.2/bin/hadoop fs -mkdir /azkaban

启动MapReduce任务

一般都是自己写成Jar,然后放到一个目录下, 然后用Azkaban去调度.

  1. type=command
  2. command=/opt/module/hadoop-2.7.2/bin/hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /wordcount/input /wordcount/output

Hive脚本任务

创建student.txt ,注意内容是tab分隔的.

  1. 1 aaa
  2. 2 bbb
  3. 3 ccc

在hdfs上创建student目录.
将student.txt上传到student目录

Azkaban创建运行Job - 图12
编写SQL脚本
student.sql文件内容:

  1. use default;
  2. create table student
  3. (
  4. id int,
  5. name string
  6. ) row format delimited fields terminated by '\t';
  7. load data inpath '/student' into table student;

在创建Azkaban任务之前可以

编写hive.job任务文件之前可以先执行命令看看脚本是否写错了.

  1. /root/soft/hive-1.2.1/bin/hive -f "/root/jobs/student.sql"

开始编写hive.job文件:

  1. type=command
  2. command=/root/soft/hive-1.2.1/bin/hive -f "/root/jobs/student.sql"

然后打成zip包之后就开始创建任务并执行任务了,过程和之前单一Job案例一模一样的.
等执行完了之后就会发现default数据库里面有个student表,然后打开这个表之后你就可以发现表里面有数据了.