Skip to content

Commit 68aedb4

Browse files
add notes
1 parent b309071 commit 68aedb4

File tree

100 files changed

+26120
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

100 files changed

+26120
-0
lines changed
Lines changed: 225 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,225 @@
1+
# Azkaban Flow 1.0 的使用
2+
3+
<nav>
4+
<a href="#一简介">一、简介</a><br/>
5+
<a href="#二基本任务调度">二、基本任务调度</a><br/>
6+
<a href="#三多任务调度">三、多任务调度</a><br/>
7+
<a href="#四调度HDFS作业">四、调度HDFS作业</a><br/>
8+
<a href="#五调度MR作业">五、调度MR作业</a><br/>
9+
<a href="#六调度Hive作业">六、调度Hive作业</a><br/>
10+
<a href="#七在线修改作业配置">七、在线修改作业配置</a><br/>
11+
</nav>
12+
13+
14+
15+
## 一、简介
16+
17+
Azkaban 主要通过界面上传配置文件来进行任务的调度。它有两个重要的概念:
18+
19+
- **Job**: 你需要执行的调度任务;
20+
- **Flow**:一个获取多个 Job 及它们之间的依赖关系所组成的图表叫做 Flow。
21+
22+
目前 Azkaban 3.x 同时支持 Flow 1.0 和 Flow 2.0,本文主要讲解 Flow 1.0 的使用,下一篇文章会讲解 Flow 2.0 的使用。
23+
24+
## 二、基本任务调度
25+
26+
### 2.1 新建项目
27+
28+
在 Azkaban 主界面可以创建对应的项目:
29+
30+
<div align="center"> <img src="../pictures/azkaban-create-project.png"/> </div>
31+
32+
### 2.2 任务配置
33+
34+
新建任务配置文件 `Hello-Azkaban.job`,内容如下。这里的任务很简单,就是输出一句 `'Hello Azkaban!'`
35+
36+
```shell
37+
#command.job
38+
type=command
39+
command=echo 'Hello Azkaban!'
40+
```
41+
42+
### 2.3 打包上传
43+
44+
`Hello-Azkaban.job ` 打包为 `zip` 压缩文件:
45+
46+
<div align="center"> <img src="../pictures/azkaban-zip.png"/> </div>
47+
48+
通过 Web UI 界面上传:
49+
50+
<div align="center"> <img src="../pictures/azkaban-upload.png"/> </div>
51+
52+
上传成功后可以看到对应的 Flows:
53+
54+
<div align="center"> <img src="../pictures/azkaban-flows.png"/> </div>
55+
56+
### 2.4 执行任务
57+
58+
点击页面上的 `Execute Flow` 执行任务:
59+
60+
<div align="center"> <img src="../pictures/azkaban-execute.png"/> </div>
61+
62+
### 2.5 执行结果
63+
64+
点击 `detail` 可以查看到任务的执行日志:
65+
66+
<div align="center"> <img src="../pictures/azkaban-successed.png"/> </div>
67+
68+
<div align="center"> <img src="../pictures/azkaban-log.png"/> </div>
69+
70+
## 三、多任务调度
71+
72+
### 3.1 依赖配置
73+
74+
这里假设我们有五个任务(TaskA——TaskE),D 任务需要在 A,B,C 任务执行完成后才能执行,而 E 任务则需要在 D 任务执行完成后才能执行,这种情况下需要使用 `dependencies` 属性定义其依赖关系。各任务配置如下:
75+
76+
**Task-A.job** :
77+
78+
```shell
79+
type=command
80+
command=echo 'Task A'
81+
```
82+
83+
**Task-B.job** :
84+
85+
```shell
86+
type=command
87+
command=echo 'Task B'
88+
```
89+
90+
**Task-C.job** :
91+
92+
```shell
93+
type=command
94+
command=echo 'Task C'
95+
```
96+
97+
**Task-D.job** :
98+
99+
```shell
100+
type=command
101+
command=echo 'Task D'
102+
dependencies=Task-A,Task-B,Task-C
103+
```
104+
105+
**Task-E.job** :
106+
107+
```shell
108+
type=command
109+
command=echo 'Task E'
110+
dependencies=Task-D
111+
```
112+
113+
### 3.2 压缩上传
114+
115+
压缩后进行上传,这里需要注意的是一个 Project 只能接收一个压缩包,这里我还沿用上面的 Project,默认后面的压缩包会覆盖前面的压缩包:
116+
117+
<div align="center"> <img src="../pictures/azkaban-task-abcde-zip.png"/> </div>
118+
119+
### 3.3 依赖关系
120+
121+
多个任务存在依赖时,默认采用最后一个任务的文件名作为 Flow 的名称,其依赖关系如图:
122+
123+
<div align="center"> <img src="../pictures/azkaban-dependencies.png"/> </div>
124+
125+
### 3.4 执行结果
126+
127+
<div align="center"> <img src="../pictures/azkaban-task-abcde.png"/> </div>
128+
129+
从这个案例可以看出,Flow1.0 无法通过一个 job 文件来完成多个任务的配置,但是 Flow 2.0 就很好的解决了这个问题。
130+
131+
## 四、调度HDFS作业
132+
133+
步骤与上面的步骤一致,这里以查看 HDFS 上的文件列表为例。命令建议采用完整路径,配置文件如下:
134+
135+
```shell
136+
type=command
137+
command=/usr/app/hadoop-2.6.0-cdh5.15.2/bin/hadoop fs -ls /
138+
```
139+
140+
执行结果:
141+
142+
<div align="center"> <img src="../pictures/azkaban-hdfs.png"/> </div>
143+
144+
## 五、调度MR作业
145+
146+
MR 作业配置:
147+
148+
```shell
149+
type=command
150+
command=/usr/app/hadoop-2.6.0-cdh5.15.2/bin/hadoop jar /usr/app/hadoop-2.6.0-cdh5.15.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.15.2.jar pi 3 3
151+
```
152+
153+
执行结果:
154+
155+
<div align="center"> <img src="../pictures/azkaban-mr.png"/> </div>
156+
157+
## 六、调度Hive作业
158+
159+
作业配置:
160+
161+
```shell
162+
type=command
163+
command=/usr/app/hive-1.1.0-cdh5.15.2/bin/hive -f 'test.sql'
164+
```
165+
166+
其中 `test.sql` 内容如下,创建一张雇员表,然后查看其结构:
167+
168+
```sql
169+
CREATE DATABASE IF NOT EXISTS hive;
170+
use hive;
171+
drop table if exists emp;
172+
CREATE TABLE emp(
173+
empno int,
174+
ename string,
175+
job string,
176+
mgr int,
177+
hiredate string,
178+
sal double,
179+
comm double,
180+
deptno int
181+
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
182+
-- 查看 emp 表的信息
183+
desc emp;
184+
```
185+
186+
打包的时候将 `job` 文件与 `sql` 文件一并进行打包:
187+
188+
<div align="center"> <img src="../pictures/azkaban-hive.png"/> </div>
189+
190+
执行结果如下:
191+
192+
<div align="center"> <img src="../pictures/azkaban-hive-result.png"/> </div>
193+
194+
## 七、在线修改作业配置
195+
196+
在测试时,我们可能需要频繁修改配置,如果每次修改都要重新打包上传,这会比较麻烦。所以 Azkaban 支持配置的在线修改,点击需要修改的 Flow,就可以进入详情页面:
197+
198+
<div align="center"> <img src="../pictures/azkaban-project-edit.png"/> </div>
199+
200+
在详情页面点击 `Eidt` 按钮可以进入编辑页面:
201+
202+
<div align="center"> <img src="../pictures/azkaban-edit.png"/> </div>
203+
204+
在编辑页面可以新增配置或者修改配置:
205+
206+
<div align="center"> <img src="../pictures/azkaban-click-edit.png"/> </div>
207+
208+
## 附:可能出现的问题
209+
210+
如果出现以下异常,多半是因为执行主机内存不足,Azkaban 要求执行主机的可用内存必须大于 3G 才能执行任务:
211+
212+
```shell
213+
Cannot request memory (Xms 0 kb, Xmx 0 kb) from system for job
214+
```
215+
216+
<div align="center"> <img src="../pictures/azkaban-memory.png"/> </div>
217+
218+
如果你的执行主机没办法增大内存,那么可以通过修改 `plugins/jobtypes/` 目录下的 `commonprivate.properties` 文件来关闭内存检查,配置如下:
219+
220+
```shell
221+
memCheck.enabled=false
222+
```
223+
224+
225+

0 commit comments

Comments
 (0)