天天看點

Azkaban實戰,Command類型單一job示例,任務中執行外部shell腳本,Command類型多job工作flow,HDFS操作任務,MapReduce任務,HIVE任務

1.Azkaban實戰

Azkaba内置的任務類型支援command、java

1、建立job描述檔案

2、将job資源檔案打包成zip檔案

zip command.job

3、通過azkaban的web管理平台建立project并上傳job壓縮包

首先建立project

Azkaban實戰,Command類型單一job示例,任務中執行外部shell腳本,Command類型多job工作flow,HDFS操作任務,MapReduce任務,HIVE任務

上傳zip包,例如:

Azkaban實戰,Command類型單一job示例,任務中執行外部shell腳本,Command類型多job工作flow,HDFS操作任務,MapReduce任務,HIVE任務

zip包中的内容如下:

Azkaban實戰,Command類型單一job示例,任務中執行外部shell腳本,Command類型多job工作flow,HDFS操作任務,MapReduce任務,HIVE任務

上傳界面:

4、啟動執行該job

可以檢視腳本的内容:

執行工作流:

Azkaban實戰,Command類型單一job示例,任務中執行外部shell腳本,Command類型多job工作flow,HDFS操作任務,MapReduce任務,HIVE任務
Azkaban實戰,Command類型單一job示例,任務中執行外部shell腳本,Command類型多job工作flow,HDFS操作任務,MapReduce任務,HIVE任務
Azkaban實戰,Command類型單一job示例,任務中執行外部shell腳本,Command類型多job工作flow,HDFS操作任務,MapReduce任務,HIVE任務
Azkaban實戰,Command類型單一job示例,任務中執行外部shell腳本,Command類型多job工作flow,HDFS操作任務,MapReduce任務,HIVE任務

上面的已經變成了綠色了,表示已經執行完成了。

Azkaban實戰,Command類型單一job示例,任務中執行外部shell腳本,Command類型多job工作flow,HDFS操作任務,MapReduce任務,HIVE任務
Azkaban實戰,Command類型單一job示例,任務中執行外部shell腳本,Command類型多job工作flow,HDFS操作任務,MapReduce任務,HIVE任務

上面的repeat表示每天執行一次

Azkaban實戰,Command類型單一job示例,任務中執行外部shell腳本,Command類型多job工作flow,HDFS操作任務,MapReduce任務,HIVE任務
Azkaban實戰,Command類型單一job示例,任務中執行外部shell腳本,Command類型多job工作flow,HDFS操作任務,MapReduce任務,HIVE任務

編寫command.job檔案

内容如下:

上面的command=sh hello.sh表示的意思是執行hello.sh腳本,其中hello.sh的腳本如下:

按照上面的案例,上傳上去,并且執行。

Azkaban實戰,Command類型單一job示例,任務中執行外部shell腳本,Command類型多job工作flow,HDFS操作任務,MapReduce任務,HIVE任務

上傳任務的腳本

Azkaban實戰,Command類型單一job示例,任務中執行外部shell腳本,Command類型多job工作flow,HDFS操作任務,MapReduce任務,HIVE任務
Azkaban實戰,Command類型單一job示例,任務中執行外部shell腳本,Command類型多job工作flow,HDFS操作任務,MapReduce任務,HIVE任務
Azkaban實戰,Command類型單一job示例,任務中執行外部shell腳本,Command類型多job工作flow,HDFS操作任務,MapReduce任務,HIVE任務
Azkaban實戰,Command類型單一job示例,任務中執行外部shell腳本,Command類型多job工作flow,HDFS操作任務,MapReduce任務,HIVE任務

進入/home/tuzq/software/azkabandata檢視是否有檔案:

1、建立有依賴關系的多個job描述

第一個job:foo.job

第二個job:bar.job依賴foo.job

2、将所有job資源檔案打到一個zip包中

Azkaban實戰,Command類型單一job示例,任務中執行外部shell腳本,Command類型多job工作flow,HDFS操作任務,MapReduce任務,HIVE任務

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

Azkaban實戰,Command類型單一job示例,任務中執行外部shell腳本,Command類型多job工作flow,HDFS操作任務,MapReduce任務,HIVE任務

4、啟動工作流flow

Azkaban實戰,Command類型單一job示例,任務中執行外部shell腳本,Command類型多job工作flow,HDFS操作任務,MapReduce任務,HIVE任務
Azkaban實戰,Command類型單一job示例,任務中執行外部shell腳本,Command類型多job工作flow,HDFS操作任務,MapReduce任務,HIVE任務
Azkaban實戰,Command類型單一job示例,任務中執行外部shell腳本,Command類型多job工作flow,HDFS操作任務,MapReduce任務,HIVE任務
Azkaban實戰,Command類型單一job示例,任務中執行外部shell腳本,Command類型多job工作flow,HDFS操作任務,MapReduce任務,HIVE任務
Azkaban實戰,Command類型單一job示例,任務中執行外部shell腳本,Command類型多job工作flow,HDFS操作任務,MapReduce任務,HIVE任務
Azkaban實戰,Command類型單一job示例,任務中執行外部shell腳本,Command類型多job工作flow,HDFS操作任務,MapReduce任務,HIVE任務
Azkaban實戰,Command類型單一job示例,任務中執行外部shell腳本,Command類型多job工作flow,HDFS操作任務,MapReduce任務,HIVE任務

通過上滿的結果可以證明,可以通過job來自行hdfs的指令

Mr任務依然可以使用command的job類型來執行

1、建立job描述檔案,及mr程式jar包(示例中直接使用hadoop自帶的example jar)

Azkaban實戰,Command類型單一job示例,任務中執行外部shell腳本,Command類型多job工作flow,HDFS操作任務,MapReduce任務,HIVE任務

其中hadoop-mapreduce-examples-2.8.0.jar 在$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.0.jar

上傳之後的準備工作是:

将wordcount/input上傳到hdfs,指令如下:

[root@hadoop1 software]# hdfs dfs -put wordcount / [root@hadoop1 software]# hdfs dfs -ls / Found 8 items drwxr-xr-x - root supergroup 0 2017-06-13 12:01 /40000 drwxr-xr-x - root supergroup 0 2017-06-14 18:31 /azaz drwxr-xr-x - root supergroup 0 2017-06-13 23:43 /flume drwxr-xr-x - root supergroup 0 2017-06-14 18:46 /input -rw-r--r--   3 root supergroup       3719 2017-06-10 12:11 /kms.sh

drwxrwxrwx - root supergroup 0 2017-06-14 18:43 /tmp drwxr-xr-x - root supergroup 0 2017-06-10 22:27 /user drwxr-xr-x - root supergroup 0 2017-06-14 18:47 /wordcount [root@hadoop1 software]# hdfs dfs -ls hdfs:/wordcount/input Found 9 items -rw-r--r--   3 root supergroup        604 2017-06-14 18:47 hdfs:///wordcount/input/1.txt

-rw-r--r--   3 root supergroup        604 2017-06-14 18:47 hdfs:///wordcount/input/2.txt

-rw-r--r--   3 root supergroup        604 2017-06-14 18:47 hdfs:///wordcount/input/3.txt

-rw-r--r--   3 root supergroup        604 2017-06-14 18:47 hdfs:///wordcount/input/4.txt

-rw-r--r--   3 root supergroup        604 2017-06-14 18:47 hdfs:///wordcount/input/5.txt

-rw-r--r--   3 root supergroup   27209520 2017-06-14 18:47 hdfs:///wordcount/input/a.txt

-rw-r--r--   3 root supergroup   27209520 2017-06-14 18:47 hdfs:///wordcount/input/aaa.txt

-rw-r--r--   3 root supergroup   27787264 2017-06-14 18:47 hdfs:///wordcount/input/b.txt

-rw-r--r--   3 root supergroup   26738688 2017-06-14 18:47 hdfs:///wordcount/input/c.txt

其中1.txt中内容類似:

Azkaban實戰,Command類型單一job示例,任務中執行外部shell腳本,Command類型多job工作flow,HDFS操作任務,MapReduce任務,HIVE任務

4、啟動job

現象:

Azkaban實戰,Command類型單一job示例,任務中執行外部shell腳本,Command類型多job工作flow,HDFS操作任務,MapReduce任務,HIVE任務
Azkaban實戰,Command類型單一job示例,任務中執行外部shell腳本,Command類型多job工作flow,HDFS操作任務,MapReduce任務,HIVE任務

執行完成之後的狀态是:

Azkaban實戰,Command類型單一job示例,任務中執行外部shell腳本,Command類型多job工作flow,HDFS操作任務,MapReduce任務,HIVE任務
Azkaban實戰,Command類型單一job示例,任務中執行外部shell腳本,Command類型多job工作flow,HDFS操作任務,MapReduce任務,HIVE任務
Azkaban實戰,Command類型單一job示例,任務中執行外部shell腳本,Command類型多job工作flow,HDFS操作任務,MapReduce任務,HIVE任務

檢視hdfs上的内容:

Azkaban實戰,Command類型單一job示例,任務中執行外部shell腳本,Command類型多job工作flow,HDFS操作任務,MapReduce任務,HIVE任務

開始的時候發現在/wordcount下隻有input這個檔案夾,當執行完成之後,發現有了azout這個檔案夾。

綜上所述,說明通過azkaban在hdfs上生成了檔案

建立job描述檔案和hive腳本

Hive腳本: test.sql

Job描述檔案:hivef.job

Azkaban實戰,Command類型單一job示例,任務中執行外部shell腳本,Command類型多job工作flow,HDFS操作任務,MapReduce任務,HIVE任務

準備工作(在hdfs上建立一個hive執行sql後依賴的檔案夾):

[root@hadoop1 apache-hive-1.2.1-bin]# hdfs dfs -mkdir -p /aztest/hiveoutput

執行完成之後效果如下:

Azkaban實戰,Command類型單一job示例,任務中執行外部shell腳本,Command類型多job工作flow,HDFS操作任務,MapReduce任務,HIVE任務
Azkaban實戰,Command類型單一job示例,任務中執行外部shell腳本,Command類型多job工作flow,HDFS操作任務,MapReduce任務,HIVE任務

特别注意的是:如果執行錯了,可以檢視任務的日志輸出:

繼續閱讀