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

单一Job案例

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

type=command
command=mkdir /root/jobs/demo

保存之后压缩成job.zip包

开始创建任务
打开Azkaban
​​​ https://zjj101:8443/index​​​Azkaban创建运行Job_hive
任务名字和任务描述随便写
Azkaban创建运行Job_hive_02
上传任务zip压缩包

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

Azkaban创建运行Job_jar_04
点击按钮执行流程

Azkaban创建运行Job_jar_05
点击执行

Azkaban创建运行Job_hadoop_06
显示执行成功

Azkaban创建运行Job_jar_07
查看效果

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

[root@zjj101 jobs]# pwd
/root/jobs
[root@zjj101 jobs]# ls
demo

多个Job工作流案例

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

aaa.job内容:

type=command
command=mkdir /root/jobs/aaa

bbb.job内容:

type=command
dependencies=aaa
command=mkdir /root/jobs/aaa/bbb

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

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

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

[root@zjj101 jobs]# ls
aaa
[root@zjj101 jobs]# cd aaa
[root@zjj101 aaa]# ls
bbb
[root@zjj101 aaa]# pwd
/root/jobs/aaa
[root@zjj101 aaa]#

两个Job依赖一个Job

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

type=command
dependencies=step1,step2
command=echo "this is finish job"

Azkaban创建运行Job_hadoop_10

调度Java的jar程序

随便创建个Maven项目

写个类

package com.zjj.demo;

import java.io.FileOutputStream;
import java.io.IOException;

public class test01 {

public static void main(String[] args) throws IOException {
// 根据需求编写具体代码
FileOutputStream fos = new FileOutputStream("/root/jobs/output.txt");
fos.write("hello world".getBytes());
fos.close();
}
}

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

[root@zjj101 lib]# pwd
/root/jobs/lib
[root@zjj101 lib]# ls
demo-1.0-SNAPSHOT.jar
[root@zjj101 lib]#

开始编写配置文件demo.job

demo.job内容:

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

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

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

然后耐心等待程序执行

Azkaban创建运行Job_hive_11

查看结果

[root@zjj101 jobs]# ls
lib output.txt
[root@zjj101 jobs]# cat output.txt
hello world[root@zjj101 jobs]#

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

HDFS操作任务

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

job文件

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

启动MapReduce任务

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

type=command
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 aaa
2 bbb
3 ccc

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

Azkaban创建运行Job_hive_12
编写SQL脚本
student.sql文件内容:

use default;
create table student
(
id int,
name string
) row format delimited fields terminated by '\t';
load data inpath '/student' into table student;

在创建Azkaban任务之前可以

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

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

开始编写hive.job文件:

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

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