Azkaban-2.5.0-部署与常见案例

时间:2022-07-26
本文章向大家介绍Azkaban-2.5.0-部署与常见案例,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

该文章是基于 Hadoop2.7.6_01_部署Hive-1.2.1_01_安装部署 进行的

1. 前言

在一个完整的大数据处理系统中,除了hdfs+mapreduce+hive组成分析系统的核心之外,还需要数据采集、结果数据导出、任务调度等不可或缺的辅助系统,而这些辅助工具在hadoop生态体系中都有便捷的开源框架,如图所示:

2. 工作流调度器azkaban概述

2.1. 为什么需要工作流调度系统

  • 一个完整的数据分析系统通常都是由大量任务单元组成:

    shell脚本程序,java程序,mapreduce程序、hive脚本等

  • 各任务单元之间存在时间先后及前后依赖关系
  • 为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行;

例如,我们可能有这样一个需求,某个业务系统每天产生20G原始数据,我们每天都要对其进行处理,处理步骤如下所示:

1、 通过Hadoop先将原始数据同步到HDFS上;

2、 借助MapReduce计算框架对原始数据进行转换,生成的数据以分区表的形式存储到多张Hive表中;

3、 需要对Hive中多个表的数据进行JOIN处理,得到一个明细数据Hive大表;

4、 将明细数据进行复杂的统计分析,得到结果报表信息;

5、 需要将统计分析得到的结果数据同步到业务系统中,供业务调用使用。

2.2. 工作流调度实现方式

简单的任务调度:直接使用linux的crontab来定义;

复杂的任务调度:开发调度平台

        或使用现成的开源调度系统,比如ooize、azkaban等

2.3. 常见工作流调度系统

市面上目前有许多工作流调度器

在hadoop领域,常见的工作流调度器有Oozie, Azkaban,Cascading,Hamake等

2.4. Azkaban与Oozie对比

对市面上最流行的两种调度器,给出以下详细对比,以供技术选型参考。总体来说,ooize相比azkaban是一个重量级的任务调度系统,功能全面,但配置使用也更复杂。如果可以不在意某些功能的缺失,轻量级调度器azkaban是很不错的候选对象。

详情如下:

  • 功能

两者均可以调度mapreduce,pig,java,脚本工作流任务

两者均可以定时执行工作流任务

  • 工作流定义

Azkaban使用Properties文件定义工作流

Oozie使用XML文件定义工作流

  • 工作流传参

Azkaban支持直接传参,例如${input}

Oozie支持参数和EL表达式,例如${fs:dirSize(myInputDir)}

  • 定时执行

Azkaban的定时执行任务是基于时间的

Oozie的定时执行任务基于时间和输入数据

  • 资源管理

Azkaban有较严格的权限控制,如用户对工作流进行读/写/执行等操作

Oozie暂无严格的权限控制

  • 工作流执行

Azkaban有两种运行模式,分别是solo server mode(executor server和web server部署在同一台节点)和multi server mode(executor server和web server可以部署在不同节点)

Oozie作为工作流服务器运行,支持多用户和多工作流

  • 工作流管理

Azkaban支持浏览器以及ajax方式操作工作流

Oozie支持命令行、HTTP REST、Java API、浏览器操作工作流

3. Azkaban介绍

Azkaban是由Linkedin开源的一个批量工作流任务调度器。用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban定义了一种KV文件格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。

它有如下功能特点:

  Web用户界面

  方便上传工作流

  方便设置任务之间的关系

  调度工作流

  认证/授权(权限的工作)

  能够杀死并重新启动工作流

  模块化和可插拔的插件机制

  项目工作区

  工作流和任务的日志记录和审计

3.1. Azkaban使用MySQL存储state的信息

AzkabanWebServer和AzkabanExecutorServer 都是能够访问MySQL的

web server使用DB的原因如下:

Project Management 项目,项目的权限以及上传的文件

Executing Flow State 跟踪执行流,执行程序运行它们

Previous Flow/Jobs 搜索之前的作业和流程执行,以及访问他们的日志文件

Scheduler 保持预定的工作状态

SLA 保持所有sla规则

executor server使用DB的原因如下:

Access the project 从数据库中检索项目文件

Executing Flows/Jobs 检索和更新 流和正在执行的数据

Logs 将输出日志存储到作业中并流入到db中

Interflow dependency 如果流在不同的执行器上运行,则它将从DB中获取状态

4. Azkaban安装部署

将安装文件上传到集群,最好上传到安装 hive、sqoop的机器上,方便命令的执行

准备工作

Azkaban Web服务器

azkaban-web-server-2.5.0.tar.gz

Azkaban执行服务器

azkaban-executor-server-2.5.0.tar.gz

MySQL

azkaban-2.5.0只支持 mysql,需安装mysql服务器,本文档中默认已安装好mysql服务器,下文中会建立 azkaban用户,密码 azkaban.

 1 # 相关信息
 2 [yun@mini01 azkaban]$ pwd
 3 /app/software/azkaban
 4 [yun@mini01 azkaban]$ ll
 5 total 22612
 6 -rw-r--r-- 1 yun yun 11157302 May 14 00:59 azkaban-executor-server-2.5.0.tar.gz
 7 -rw-r--r-- 1 yun yun     1928 May 14 00:57 azkaban-sql-script-2.5.0.tar.gz
 8 -rw-r--r-- 1 yun yun 11989669 May 14 00:59 azkaban-web-server-2.5.0.tar.gz
 9 # 解压缩包
10 [yun@mini01 azkaban]$ tar xf azkaban-executor-server-2.5.0.tar.gz 
11 [yun@mini01 azkaban]$ tar xf azkaban-web-server-2.5.0.tar.gz
12 [yun@mini01 azkaban]$ tar xf azkaban-sql-script-2.5.0.tar.gz
13 [yun@mini01 azkaban]$ ll
14 total 22616
15 drwxrwxr-x 2 yun yun     4096 Jul 29 17:02 azkaban-2.5.0
16 drwxrwxr-x 7 yun yun       92 Jul 29 17:02 azkaban-executor-2.5.0
17 -rw-r--r-- 1 yun yun 11157302 May 14 00:59 azkaban-executor-server-2.5.0.tar.gz
18 -rw-r--r-- 1 yun yun     1928 May 14 00:57 azkaban-sql-script-2.5.0.tar.gz
19 drwxrwxr-x 8 yun yun      103 Jul 29 17:02 azkaban-web-2.5.0
20 -rw-r--r-- 1 yun yun 11989669 May 14 00:59 azkaban-web-server-2.5.0.tar.gz

4.1. MySQL部署

建库并授权

 1 # 在mini03上操作
 2 # 建库
 3 MariaDB [(none)]> CREATE DATABASE azkaban DEFAULT CHARACTER SET utf8 ;
 4 Query OK, 1 row affected (0.00 sec)
 5 
 6 MariaDB [(none)]> show create database azkaban;
 7 +----------+------------------------------------------------------------------+
 8 | Database | Create Database                                                  |
 9 +----------+------------------------------------------------------------------+
10 | azkaban  | CREATE DATABASE `azkaban` /*!40100 DEFAULT CHARACTER SET utf8 */ |
11 +----------+------------------------------------------------------------------+
12 1 row in set (0.00 sec)
13 
14 MariaDB [(none)]> show databases;
15 +--------------------+
16 | Database           |
17 +--------------------+
18 | information_schema |
19 | azkaban            |
20 | hive               |
21 | mysql              |
22 | performance_schema |
23 | test               |
24 | zhang              |
25 +--------------------+
26 7 rows in set (0.00 sec)
27 
28 # 授权 
29 MariaDB [(none)]> grant all on azkaban.* to azkaban@'%' identified by 'azkaban'; 
30 Query OK, 0 rows affected (0.00 sec)
31 
32 MariaDB [(none)]> 
33 MariaDB [(none)]> flush privileges;
34 Query OK, 0 rows affected (0.00 sec)
35 
36 MariaDB [(none)]> select user,host from mysql.user;
37 +---------+-----------+
38 | user    | host      |
39 +---------+-----------+
40 | azkaban | %         |
41 | hive    | %         |
42 | root    | %         |
43 | root    | 127.0.0.1 |
44 | root    | ::1       |
45 |         | localhost |
46 | root    | localhost |
47 |         | mini03    |
48 | hive    | mini03    |
49 | root    | mini03    |
50 +---------+-----------+
51 10 rows in set (0.00 sec)

导入数据

 1 # 在有azkaban的SQL语句机器上操作
 2 [yun@mini01 azkaban-2.5.0]$ pwd
 3 /app/software/azkaban/azkaban-2.5.0
 4 [yun@mini01 azkaban-2.5.0]$ ll
 5 total 88
 6 -rwxr-xr-x 1 yun yun  129 Apr 22  2014 create.active_executing_flows.sql
 7 -rwxr-xr-x 1 yun yun  216 Apr 22  2014 create.active_sla.sql
 8 -rwxr-xr-x 1 yun yun 4694 Apr 22  2014 create-all-sql-2.5.0.sql  # 包含所有库信息
 9 -rwxr-xr-x 1 yun yun  610 Apr 22  2014 create.execution_flows.sql
10 -rwxr-xr-x 1 yun yun  519 Apr 22  2014 create.execution_jobs.sql
11 -rwxr-xr-x 1 yun yun  358 Apr 22  2014 create.execution_logs.sql
12 -rwxr-xr-x 1 yun yun  224 Apr 22  2014 create.project_events.sql
13 -rwxr-xr-x 1 yun yun  227 Apr 22  2014 create.project_files.sql
14 -rwxr-xr-x 1 yun yun  280 Apr 22  2014 create.project_flows.sql
15 -rwxr-xr-x 1 yun yun  285 Apr 22  2014 create.project_permissions.sql
16 -rwxr-xr-x 1 yun yun  294 Apr 22  2014 create.project_properties.sql
17 -rwxr-xr-x 1 yun yun  380 Apr 22  2014 create.projects.sql
18 -rwxr-xr-x 1 yun yun  325 Apr 22  2014 create.project_versions.sql
19 -rwxr-xr-x 1 yun yun  155 Apr 22  2014 create.properties.sql
20 -rwxr-xr-x 1 yun yun  498 Apr 22  2014 create.schedules.sql
21 -rwxr-xr-x 1 yun yun  189 Apr 22  2014 create.triggers.sql
22 -rwxr-xr-x 1 yun yun   22 Apr 22  2014 database.properties
23 -rwxr-xr-x 1 yun yun  671 Apr 22  2014 update-all-sql-2.1.sql
24 -rwxr-xr-x 1 yun yun  156 Apr 22  2014 update-all-sql-2.2.sql
25 -rwxr-xr-x 1 yun yun  395 Apr 22  2014 update.execution_logs.2.1.sql
26 -rwxr-xr-x 1 yun yun   59 Apr 22  2014 update.project_properties.2.1.sql
27 [yun@mini01 azkaban-2.5.0]$ ll /app/software/azkaban/azkaban-2.5.0/create-all-sql-2.5.0.sql  # 要导入的SQL文件 
28 -rwxr-xr-x 1 yun yun 4694 Apr 22  2014 /app/software/azkaban/azkaban-2.5.0/create-all-sql-2.5.0.sql
29 [yun@mini01 azkaban-2.5.0]$ 
30 [yun@mini01 azkaban-2.5.0]$ mysql -hmini03 -uazkaban -pazkaban
31 Welcome to the MariaDB monitor.  Commands end with ; or g.
32 Your MariaDB connection id is 4
33 Server version: 5.5.56-MariaDB MariaDB Server
34 
35 Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
36 
37 Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
38 
39 MariaDB [(none)]> use azkaban;  # 使用库
40 Database changed
41 MariaDB [azkaban]> source /app/software/azkaban/azkaban-2.5.0/create-all-sql-2.5.0.sql
42 ………………
43 MariaDB [azkaban]> show tables;  
44 +------------------------+
45 | Tables_in_azkaban      |
46 +------------------------+
47 | active_executing_flows |
48 | active_sla             |
49 | execution_flows        |
50 | execution_jobs         |
51 | execution_logs         |
52 | project_events         |
53 | project_files          |
54 | project_flows          |
55 | project_permissions    |
56 | project_properties     |
57 | project_versions       |
58 | projects               |
59 | properties             |
60 | schedules              |
61 | triggers               |
62 +------------------------+
63 15 rows in set (0.00 sec)

4.2. azkaban执行服器和web服务器部署

 1 [yun@mini01 azkaban]$ pwd
 2 /app/software/azkaban
 3 [yun@mini01 azkaban]$ ll
 4 total 22616
 5 drwxrwxr-x 2 yun yun     4096 Jul 29 17:02 azkaban-2.5.0
 6 drwxrwxr-x 7 yun yun       92 Jul 29 17:02 azkaban-executor-2.5.0
 7 -rw-r--r-- 1 yun yun 11157302 May 14 00:59 azkaban-executor-server-2.5.0.tar.gz
 8 -rw-r--r-- 1 yun yun     1928 May 14 00:57 azkaban-sql-script-2.5.0.tar.gz
 9 drwxrwxr-x 8 yun yun      103 Jul 29 17:02 azkaban-web-2.5.0
10 -rw-r--r-- 1 yun yun 11989669 May 14 00:59 azkaban-web-server-2.5.0.tar.gz
11 # 先创建/app/azkaban/ 目录
12 [yun@mini01 azkaban]$ cp -a azkaban-executor-2.5.0 /app/azkaban/executor-2.5.0
13 [yun@mini01 azkaban]$ cp -a azkaban-web-2.5.0 /app/azkaban/web-server-2.5.0
14 [yun@mini01 azkaban]$ cd /app/azkaban/
15 [yun@mini01 azkaban]$ ll
16 total 0
17 drwxrwxr-x 7 yun yun  92 Jul 29 17:02 executor-2.5.0
18 drwxrwxr-x 8 yun yun 103 Jul 29 17:02 web-server-2.5.0

4.3. 为azkaban创建SSL配置

 1 [yun@mini01 azkaban]$ pwd
 2 /app/azkaban
 3 [yun@mini01 azkaban]$ ll
 4 total 4
 5 drwxrwxr-x 7 yun yun   92 Jul 29 17:02 executor-2.5.0
 6 drwxrwxr-x 8 yun yun  103 Jul 29 17:02 web-server-2.5.0 
 7 [yun@mini01 azkaban]$ keytool -keystore keystore -alias jetty -genkey -keyalg RSA  
 8 Enter keystore password:     # 输入123456
 9 Re-enter new password:       # 输入123456
10 What is your first and last name?
11   [Unknown]:  
12 What is the name of your organizational unit?
13   [Unknown]:  
14 What is the name of your organization?
15   [Unknown]:  
16 What is the name of your City or Locality?
17   [Unknown]:  
18 What is the name of your State or Province?
19   [Unknown]:  
20 What is the two-letter country code for this unit?
21   [Unknown]:  CN
22 Is CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN correct?
23   [no]:  yes
24 
25 Enter key password for <jetty>
26     (RETURN if same as keystore password):  
27 # 查看生成的keystore 
28 [yun@mini01 azkaban]$ ll
29 total 4
30 drwxrwxr-x 7 yun yun   92 Jul 29 17:02 executor-2.5.0
31 -rw-rw-r-- 1 yun yun 2233 Jul 29 17:46 keystore
32 drwxrwxr-x 8 yun yun  103 Jul 29 17:02 web-server-2.5.0
33 [yun@mini01 azkaban]$ cp -a keystore  web-server-2.5.0/  # 将keystore拷贝到azkaban的web中
34 [yun@mini01 azkaban]$ ll web-server-2.5.0/
35 total 12
36 -rw-r--r-- 1 yun yun  105 Apr 22  2014 azkaban.version
37 drwxr-xr-x 2 yun yun  112 Apr 22  2014 bin
38 drwxr-xr-x 2 yun yun   57 Jul 29 17:02 conf
39 drwxr-xr-x 2 yun yun    6 Apr 22  2014 extlib
40 -rw-rw-r-- 1 yun yun 2233 Jul 29 17:46 keystore
41 drwxr-xr-x 2 yun yun 4096 Jul 29 17:02 lib
42 drwxr-xr-x 2 yun yun    6 Apr 22  2014 plugins
43 drwxr-xr-x 6 yun yun   73 Jul 29 17:02 web

4.4. 配置文件

注:先配置好服务器节点上的时区

1、先生成时区配置文件Asia/Shanghai,用交互式命令 tzselect 即可

2、拷贝该时区文件,覆盖系统本地时区配置

1 # 也可以是软连接
2 cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime  

4.4.1. web服务器配置

 1 [yun@mini01 conf]$ pwd
 2 /app/azkaban/web-server-2.5.0/conf
 3 [yun@mini01 conf]$ ll
 4 total 8
 5 -rw-r--r-- 1 yun yun 1007 Jul 29 19:29 azkaban.properties
 6 -rw-r--r-- 1 yun yun  266 Apr 22  2014 azkaban-users.xml
 7 #### azkaban.properties 配置
 8 [yun@mini01 conf]$ vim azkaban.properties 
 9 #Azkaban Personalization Settings
10 azkaban.name=Test  #服务器UI名称,用于服务器上方显示的名字
11 azkaban.label=My Local Azkaban  #描述
12 azkaban.color=#FF3601   #UI颜色
13 azkaban.default.servlet.path=/index
14 web.resource.dir=web/   #默认根web目录
15 default.timezone.id=Asia/Shanghai  #时区
16 
17 #Azkaban UserManager class
18 user.manager.class=azkaban.user.XmlUserManager  #用户权限管理默认类
19 user.manager.xml.file=conf/azkaban-users.xml    #用户配置,具体配置参加下文
20 
21 #Loader for projects
22 executor.global.properties=conf/global.properties  # global配置文件所在位置
23 azkaban.project.dir=projects
24 
25 database.type=mysql
26 mysql.port=3306
27 mysql.host=mini03
28 mysql.database=azkaban
29 mysql.user=azkaban
30 mysql.password=azkaban
31 mysql.numconnections=100   #最大连接数
32 
33 # Velocity dev mode
34 velocity.dev.mode=false
35 
36 # Azkaban Jetty server properties.
37 jetty.maxThreads=25            #最大线程数
38 jetty.ssl.port=8443            #Jetty SSL端口
39 jetty.port=8081                #Jetty端口
40 jetty.keystore=keystore        #SSL文件名
41 jetty.password=123456          #SSL文件密码
42 jetty.keypassword=123456       #Jetty主密码 与 keystore文件相同
43 jetty.truststore=keystore      #SSL文件名
44 jetty.trustpassword=123456     # SSL文件密码
45 
46 # Azkaban Executor settings
47 executor.port=12321            #执行服务器端口
48 
49 # mail settings
50 mail.sender=                   #发送邮箱
51 mail.host=                     #发送邮箱smtp地址
52 job.failure.email=             #任务失败时发送邮件的地址
53 job.success.email=             #任务成功时发送邮件的地址
54 
55 lockdown.create.projects=false
56 
57 cache.directory=cache          #缓存目录
58 
59 ###### azkaban-users.xml 配置
60 [yun@mini01 conf]$ vim azkaban-users.xml 
61 <azkaban-users>
62         <user username="azkaban" password="azkaban" roles="admin" groups="azkaban" />
63         <user username="metrics" password="metrics" roles="metrics"/>
64         <user username="admin" password="admin" roles="admin,metrics" />
65 
66         <role name="admin" permissions="ADMIN" />
67         <role name="metrics" permissions="METRICS"/>
68 </azkaban-users>

4.4.2. executor执行服务器配置

 1 [yun@mini01 conf]$ pwd
 2 /app/azkaban/executor-2.5.0/conf
 3 [yun@mini01 conf]$ vim azkaban.properties 
 4 #Azkaban
 5 default.timezone.id=Asia/Shanghai
 6 
 7 # Azkaban JobTypes Plugins
 8 azkaban.jobtype.plugin.dir=plugins/jobtypes   #jobtype 插件所在位置
 9 
10 #Loader for projects
11 executor.global.properties=conf/global.properties
12 azkaban.project.dir=projects
13 
14 database.type=mysql
15 mysql.port=3306
16 mysql.host=mini03
17 mysql.database=azkaban
18 mysql.user=azkaban
19 mysql.password=azkaban
20 mysql.numconnections=100      #最大连接数
21 
22 # Azkaban Executor settings
23 executor.maxThreads=50        #最大线程数
24 executor.port=12321           #端口号(如修改,请与web服务中一致)
25 executor.flow.threads=30      #线程数

4.5. 启动azkaban

先执行executor,再执行web,避免Web Server会因为找不到执行器启动失败。

执行服务器

1 [yun@mini01 executor-2.5.0]$ pwd
2 /app/azkaban/executor-2.5.0
3 [yun@mini01 executor-2.5.0]$ ./bin/azkaban-executor-start.sh  
4 # 或者 nohup ./bin/azkaban-executor-start.sh > azkaban-exec_$(date +%Y%m%d%H%M%S).log & 
5 # 方便查看日志
6 ………………

web服务器

1 [yun@mini01 web-server-2.5.0]$ pwd
2 /app/azkaban/web-server-2.5.0
3 [yun@mini01 web-server-2.5.0]$ ./bin/azkaban-web-start.sh  # 日志会自己记录 
4 ………………

查看java进程

1 [yun@mini01 executor-2.5.0]$ jps 
2 4083 AzkabanWebServer
3 3988 AzkabanExecutorServer
4 4171 Jps

4.6. 浏览器访问

1 https://mini01:8443/ 

使用admin登录之后

5. Azkaban实战

Azkaba内置的任务类型支持command、java

5.1. Command类型单一job示例

创建job描述文件

在Windows创建文件 command.job,内容如下

command.job

1 #command.job
2 type=command
3 # command=sh hello.sh
4 command=echo 'hello'

hello.sh

1 #!/bin/bash
2 echo 'hello World!' > /tmp/azkaban.info

将job资源文件打包成zip文件

zip command.job

创建project、上传包并执行

1、通过azkaban的web管理平台创建project并上传job压缩包

首先创建project

2、上传zip包

3、启动执行该job

5.2. Command类型多job工作流flow

1、创建有依赖关系的多个job描述

第一个job:foo.job

1 # foo.job
2 type=command
3 command=echo foo

第二个job:bar.job依赖foo.job

1 # bar.job
2 type=command
3 dependencies=foo
4 command=echo bar

2、将所有job资源文件打到一个zip包中

3、在azkaban的web管理界面创建工程并上传zip包

4、启动工作流flow

5.3. HDFS操作任务

1、创建job描述文件

fs_01.job

1 # fs.job
2 type=command
3 command=/app/hadoop/bin/hadoop fs -mkdir -p /azkaban/test03_new

fs_02.job

1 # fs.job
2 type=command
3 dependencies=fs_01
4 command=/app/hadoop/bin/hadoop fs -put /app/software/apache-flume-1.8.0-bin.tar.gz /azkaban/test03_new

2、将job资源文件打包成zip文件

3、通过azkaban的web管理平台创建project并上传job压缩包

4、启动执行该job

5.4. MAPREDUCE任务

Mr任务依然可以使用command的job类型来执行

1、创建job描述文件,及mr程序jar包(示例中直接使用hadoop自带的example jar)

mrwc_01.job

1 # mrwc.job
2 type=command
3 command=/app/hadoop/bin/hadoop fs -mkdir -p /azkaban/wordcount/input

mrwc_02.job

1 # mrwc.job
2 type=command
3 dependencies=mrwc_01
4 command=/app/hadoop/bin/hadoop fs -put test.info zhang.info /azkaban/wordcount/input

mrwc_03.job

1 # mrwc.job
2 type=command
3 dependencies=mrwc_02
4 command=/app/hadoop/bin/hadoop jar hadoop-mapreduce-examples-2.7.6.jar wordcount /azkaban/wordcount/input /azkaban/wordcount/output

test.info

1 111
2 222
3 333
4 444
5 555
6 333
7 222
8 222
9 222

zhang.info

1 zxcvbnm
2 asdfghjkl
3 qwertyuiop
4 qwertyuiop
5 111
6 qwertyuiop

2、将job资源文件打包成zip文件

3、通过azkaban的web管理平台创建project并上传job压缩包

4、启动执行该job

部分截图如下

1 [yun@mini02 ~]$ hadoop fs -cat /azkaban/wordcount/output/part-r-00000
2 111    2
3 222    4
4 333    2
5 444    1
6 555    1
7 asdfghjkl    1
8 qwertyuiop    3
9 zxcvbnm    1

5.5. HIVE脚本任务

1、创建job描述文件

hivef_01.job

1 # hivef.job
2 type=command
3 command=/app/hadoop/bin/hadoop fs -mkdir -p /aztest/hiveinput

hivef_01.job

1 # hivef.job
2 type=command
3 dependencies=hivef_01
4 command=/app/hadoop/bin/hadoop fs -put azkb.dat /aztest/hiveinput

hivef_03.job

1 # hivef.job
2 type=command
3 dependencies=hivef_02
4 command=/app/hive/bin/hive -f 'aztest.sql'

aztest.sql

1 CREATE DATABASE IF NOT EXISTS azkaban;
2 use azkaban;
3 DROP TABLE IF EXISTS aztest;
4 DROP TABLE IF EXISTS azres;
5 create table aztest(id int,name string) row format delimited fields terminated by ',';
6 load data inpath '/aztest/hiveinput/azkb.dat' into table aztest;
7 create table azres row format delimited fields terminated by '#' as select * from aztest;
8 insert overwrite directory '/aztest/hiveoutput' select count(1) from aztest;

azkb.dat

1 1,刘晨晨
2 2,王敏
3 3,张立玉
4 4,刘刚

2、将job资源文件打包成zip文件

3、通过azkaban的web管理平台创建project并上传job压缩包

4、启动执行该job