该文章是基于 Hadoop2.7.6_01_部署 、 Hive-1.2.1_01_安装部署 进行的
1. 前言
代码语言:txt复制 在一个完整的大数据处理系统中,除了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对比
代码语言:txt复制 对市面上最流行的两种调度器,给出以下详细对比,以供技术选型参考。总体来说,ooize相比azkaban是一个重量级的任务调度系统,功能全面,但配置使用也更复杂。如果可以不在意某些功能的缺失,轻量级调度器azkaban是很不错的候选对象。
详情如下:
- 功能
两者均可以调度mapreduce,pig,java,脚本工作流任务
代码语言:txt复制 两者均可以定时执行工作流任务
- 工作流定义
Azkaban使用Properties文件定义工作流
代码语言:txt复制 Oozie使用XML文件定义工作流
- 工作流传参
Azkaban支持直接传参,例如${input}
代码语言:txt复制 Oozie支持参数和EL表达式,例如${fs:dirSize(myInputDir)}
- 定时执行
Azkaban的定时执行任务是基于时间的
代码语言:txt复制 Oozie的定时执行任务基于时间和输入数据
- 资源管理
Azkaban有较严格的权限控制,如用户对工作流进行读/写/执行等操作
代码语言:txt复制 Oozie暂无严格的权限控制
- 工作流执行
Azkaban有两种运行模式,分别是solo server mode(executor server和web server部署在同一台节点)和multi server mode(executor server和web server可以部署在不同节点)
代码语言:txt复制 Oozie作为工作流服务器运行,支持多用户和多工作流
- 工作流管理
Azkaban支持浏览器以及ajax方式操作工作流
代码语言:txt复制 Oozie支持命令行、HTTP REST、Java API、浏览器操作工作流
3. Azkaban介绍
代码语言:txt复制 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安装部署
代码语言:txt复制 将安装文件上传到集群,最好上传到安装 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.
代码语言:javascript复制 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部署
建库并授权
代码语言:javascript复制 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)
导入数据
代码语言:javascript复制 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服务器部署
代码语言:javascript复制 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配置
代码语言:javascript复制 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、拷贝该时区文件,覆盖系统本地时区配置
代码语言:javascript复制1 # 也可以是软连接
2 cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
4.4.1. web服务器配置
代码语言:javascript复制 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执行服务器配置
代码语言:javascript复制 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
代码语言:txt复制 先执行executor,再执行web,避免Web Server会因为找不到执行器启动失败。
执行服务器
代码语言:javascript复制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服务器
代码语言:javascript复制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进程
代码语言:javascript复制1 [yun@mini01 executor-2.5.0]$ jps
2 4083 AzkabanWebServer
3 3988 AzkabanExecutorServer
4 4171 Jps
4.6. 浏览器访问
代码语言:javascript复制1 https://mini01:8443/
代码语言:txt复制 使用admin登录之后
5. Azkaban实战
代码语言:txt复制 Azkaba内置的任务类型支持command、java
5.1. Command类型单一job示例
创建job描述文件
在Windows创建文件 command.job,内容如下
command.job
代码语言:javascript复制1 #command.job
2 type=command
3 # command=sh hello.sh
4 command=echo 'hello'
hello.sh
代码语言:javascript复制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
代码语言:javascript复制1 # foo.job
2 type=command
3 command=echo foo
第二个job:bar.job依赖foo.job
代码语言:javascript复制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
代码语言:javascript复制1 # fs.job
2 type=command
3 command=/app/hadoop/bin/hadoop fs -mkdir -p /azkaban/test03_new
fs_02.job
代码语言:javascript复制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
代码语言:javascript复制1 # mrwc.job
2 type=command
3 command=/app/hadoop/bin/hadoop fs -mkdir -p /azkaban/wordcount/input
mrwc_02.job
代码语言:javascript复制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
代码语言:javascript复制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
代码语言:javascript复制1 111
2 222
3 333
4 444
5 555
6 333
7 222
8 222
9 222
zhang.info
代码语言:javascript复制1 zxcvbnm
2 asdfghjkl
3 qwertyuiop
4 qwertyuiop
5 111
6 qwertyuiop
2、将job资源文件打包成zip文件
3、通过azkaban的web管理平台创建project并上传job压缩包
4、启动执行该job
部分截图如下
代码语言:javascript复制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
代码语言:javascript复制1 # hivef.job
2 type=command
3 command=/app/hadoop/bin/hadoop fs -mkdir -p /aztest/hiveinput
hivef_01.job
代码语言:javascript复制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
代码语言:javascript复制1 # hivef.job
2 type=command
3 dependencies=hivef_02
4 command=/app/hive/bin/hive -f 'aztest.sql'
aztest.sql
代码语言:javascript复制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
代码语言:javascript复制1 1,刘晨晨
2 2,王敏
3 3,张立玉
4 4,刘刚
2、将job资源文件打包成zip文件
3、通过azkaban的web管理平台创建project并上传job压缩包
4、启动执行该job