大資料學習筆記之azkaban
Azakaban的安裝部署
安裝前準備
- 將Azkaban Web伺服器、Azkaban執行伺服器、Azkaban的sql執行指令碼及MySQL安裝包拷貝到hadoop102虛擬機器/opt/software目錄下
azkaban-web-server-2.5.0.tar.gz
azkaban-executor-server-2.5.0.tar.gz
azkaban-sql-script-2.5.0.tar.gz
mysql-libs.zip - 選擇Mysql作為Azkaban資料庫
安裝Azkaban
- 在/opt/module/目錄下創azkaban目錄
mkdir azkaban
- 解壓azkaban-web-server-2.5.0.tar.gz、azkaban-executor-server-2.5.0.tar.gz、azkaban-sql-script-2.5.0.tar.gz到/opt/module/azkaban目錄下
tar -zxvf azkaban-web-server-2.5.0.tar.gz -C /opt/module/azkaban/ tar -zxvf azkaban-executor-server-2.5.0.tar.gz -C /opt/module/azkaban/ tar -zxvf azkaban-sql-script-2.5.0.tar.gz -C /opt/module/azkaban/
- 對解壓後的檔案重新命名
mv azkaban-web-2.5.0/ server
mv azkaban-executor-2.5.0/ executor
- azkaban指令碼匯入
進入mysql,建立azkaban資料庫,並將解壓的指令碼匯入到azkaban資料庫。
mysql -uroot -p123456 mysql> create database azkaban; mysql> use azkaban; mysql> source /opt/module/azkaban/azkaban-2.5.0/create-all-sql-2.5.0.sql
注:source後跟.sql檔案,用於批量處理.sql檔案中的sql語句。
生成金鑰庫
Keytool是java資料證書的管理工具,使使用者能夠管理自己的公/私鑰對及相關證書。
-keystore 指定金鑰庫的名稱及位置(產生的各類資訊將不在.keystore檔案中)
-genkey 在使用者主目錄中建立一個預設檔案".keystore"
-alias 對我們生成的.keystore 進行指認別名;如果沒有預設是mykey
-keyalg 指定金鑰的演算法 RSA/DSA 預設是DSA
- 生成 keystore的密碼及相應資訊的金鑰庫
keytool -keystore keystore -alias jetty -genkey -keyalg RSA
輸入金鑰庫口令:
再次輸入新口令:
您的名字與姓氏是什麼?
[Unknown]:
您的組織單位名稱是什麼?
[Unknown]:
您的組織名稱是什麼?
[Unknown]:
您所在的城市或區域名稱是什麼?
[Unknown]:
您所在的省/市/自治區名稱是什麼?
[Unknown]:
該單位的雙字母國家/地區程式碼是什麼?
[Unknown]:
CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown是否正確?
[否]: y
輸入 <jetty> 的金鑰口令
(如果和金鑰庫口令相同, 按回車):
再次輸入新口令:
注意: 金鑰庫的密碼至少必須6個字元,可以是純數字或者字母或者數字和字母的組合等等 金鑰庫的密碼最好和<jetty> 的金鑰相同,方便記憶
2. 將keystore 拷貝到 azkaban web伺服器根目錄中
mv keystore /opt/module/azkaban/server/
時間同步
時間同步見hadoop安裝
配置檔案
- 進入azkaban web伺服器安裝目錄 conf目錄,開啟azkaban.properties檔案
pwd
/opt/module/azkaban/server/conf
vim azkaban.properties
- 按照如下配置修改azkaban.properties檔案
#Azkaban Personalization Settings
#伺服器UI名稱,用於伺服器上方顯示的名字
azkaban.name=Test
#描述
azkaban.label=My Local Azkaban
#UI顏色
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
#預設web server存放web檔案的目錄
web.resource.dir=/opt/module/azkaban/server/web/
#預設時區,已改為亞洲/上海 預設為美國
default.timezone.id=Asia/Shanghai
#Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager
#使用者許可權管理預設類(絕對路徑)
user.manager.xml.file=/opt/module/azkaban/server/conf/azkaban-users.xml
#Loader for projects
#global配置檔案所在位置(絕對路徑)
executor.global.properties=/opt/module/azkaban/executor/conf/global.properties
azkaban.project.dir=projects
#資料庫型別
database.type=mysql
#埠號
mysql.port=3306
#資料庫連線IP
mysql.host=hadoop102
#資料庫例項名
mysql.database=azkaban
#資料庫使用者名稱
mysql.user=root
#資料庫密碼
mysql.password=123456
#最大連線數
mysql.numconnections=100
# Velocity dev mode
velocity.dev.mode=false
# Azkaban Jetty server properties.
# Jetty伺服器屬性.
#最大執行緒數
jetty.maxThreads=25
#Jetty SSL埠
jetty.ssl.port=8443
#Jetty埠
jetty.port=8081
#SSL檔名(絕對路徑)
jetty.keystore=/opt/module/azkaban/server/keystore
#SSL檔案密碼
jetty.password=000000
#Jetty主密碼與keystore檔案相同
jetty.keypassword=000000
#SSL檔名(絕對路徑)
jetty.truststore=/opt/module/azkaban/server/keystore
#SSL檔案密碼
jetty.trustpassword=000000
# Azkaban Executor settings
executor.port=12321
# mail settings
mail.sender=
mail.host=
job.failure.email=
job.success.email=
lockdown.create.projects=false
cache.directory=cache
- web伺服器使用者配置
在azkaban web伺服器安裝目錄 conf目錄,按照如下配置修改azkaban-users.xml 檔案,增加管理員使用者。
vim azkaban-users.xml
<azkaban-users>
<user username="azkaban" password="azkaban" roles="admin" groups="azkaban" />
<user username="metrics" password="metrics" roles="metrics"/>
<user username="admin" password="admin" roles="admin,metrics" />
<role name="admin" permissions="ADMIN" />
<role name="metrics" permissions="METRICS"/>
</azkaban-users>
執行伺服器配置
- 進入執行伺服器安裝目錄conf,開啟azkaban.properties
pwd
/opt/module/azkaban/executor/conf
vim azkaban.properties
- 按照如下配置修改azkaban.properties檔案。
#Azkaban
#時區
default.timezone.id=Asia/Shanghai
# Azkaban JobTypes Plugins
#jobtype 外掛所在位置
azkaban.jobtype.plugin.dir=plugins/jobtypes
#Loader for projects
executor.global.properties=/opt/module/azkaban/executor/conf/global.properties
azkaban.project.dir=projects
database.type=mysql
mysql.port=3306
mysql.host=hadoop102
mysql.database=azkaban
mysql.user=root
mysql.password=123456
mysql.numconnections=100
# Azkaban Executor settings
#最大執行緒數
executor.maxThreads=50
#埠號(如修改,請與web服務中一致)
executor.port=12321
#執行緒數
executor.flow.threads=30
啟動executor伺服器
在executor伺服器目錄下執行啟動命令
pwd
/opt/module/azkaban/executor
bin/azkaban-executor-start.sh
啟動web伺服器
在azkaban web伺服器目錄下執行啟動命令
pwd
/opt/module/azkaban/server
bin/azkaban-web-start.sh
注意: 先執行executor,再執行web,避免Web Server會因為找不到執行器啟動失敗。
jps檢視程序
jps
3601 AzkabanExecutorServer
5880 Jps
3661 AzkabanWebServer
啟動完成後,在瀏覽器(建議使用谷歌瀏覽器)中輸入https://伺服器IP地址:8443
,即可訪問azkaban服務了。
在登入中輸入剛才在azkaban-users.xml檔案中新新增的戶用名及密碼,點選 login。
Azkaban操作
Azkaba內建的任務型別支援command、java
單一job
- 建立job描述檔案
vim first.job
#first.job
type=command
command=echo 'this is my first job'
- 將job資原始檔打包成zip檔案
zip first.zip first.job
注意: 目前,Azkaban上傳的工作流檔案只支援xxx.zip檔案。zip應包含xxx.job執行作業所需的檔案和任何檔案(檔名字尾必須以.job結尾,否則無法識別)。作業名稱在專案中必須是唯一的。
3. 通過azkaban的web管理平臺建立project並上傳job的zip包
首先建立project
上傳zip包
啟動執行該job
點選執行工作流
點選繼續
Job執行成功
點選檢視job日誌
多job工作流
- 建立有依賴關係的多個job描述
第一個job:start.job
vim start.job
#start.job
type=command
command=touch /opt/module/kangkang.txt
第二個job:step1.job依賴start.job
vim step1.job
#step1.job
type=command
dependencies=start
command=echo "this is step1 job"
第三個job:step2.job依賴start.job
vim step2.job
#step2.job
type=command
dependencies=start
command=echo "this is step2 job"
第四個job:finish.job依賴step1.job和step2.job
vim finish.job
#finish.job
type=command
dependencies=step1,step2
command=echo "this is finish job"
- 將所有job資原始檔打到一個zip包中
zip jobs.zip start.job step1.job step2.job finish.job
updating: start.job (deflated 16%)
adding: step1.job (deflated 12%)
adding: step2.job (deflated 12%)
adding: finish.job (deflated 14%)
- 上傳執行
java操作任務
- 編寫java程式
import java.io.IOException;
public class AzkabanTest {
public void run() throws IOException {
// 根據需求編寫具體程式碼
FileOutputStream fos = new FileOutputStream("/opt/module/azkaban/output.txt");
fos.write("this is a java progress".getBytes());
fos.close();
}
public static void main(String[] args) throws IOException {
AzkabanTest azkabanTest = new AzkabanTest();
azkabanTest.run();
}
}
- 將java程式打成jar包,建立lib目錄,將jar放入lib內
mkdir lib
cd lib/
- 編寫job檔案
vim azkabanJava.job
#azkabanJava.job
type=javaprocess
java.class=com.test.azkaban.AzkabanTest
classpath=/opt/module/azkaban/lib/*
- 將job檔案打成zip包
zip azkabanJava.zip azkabanJava.job
adding: azkabanJava.job (deflated 19%)
- 通過azkaban的web管理平臺建立project並上傳job壓縮包,啟動執行該job
pwd
/opt/module/azkaban
cat output
this is a java progress
HDFS操作任務
- 建立job描述檔案
vim fs.job
#hdfs job
type=command
command=/opt/module/hadoop-2.7.2/bin/hadoop fs -mkdir /azkaban
- 將job資原始檔打包成zip檔案
zip fs.zip fs.job
adding: fs.job (deflated 12%)
- 通過azkaban的web管理平臺建立project並上傳job壓縮包,並執行
mapreduce任務
- 建立job描述檔案,及mr程式jar包
vim mapreduce.job
#mapreduce job
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
- 將所有job資原始檔打到一個zip包中
zip mapreduce.zip mapreduce.job
adding: mapreduce.job (deflated 43%)
- 在azkaban的web管理介面建立工程並上傳zip包並執行
Hive指令碼任務
- 建立job描述檔案和hive指令碼
vim student.sql
use default;
drop table student;
create table student(id int, name string)
row format delimited fields terminated by '\t';
load data local inpath '/opt/module/datas/student.txt' into table student;
insert overwrite local directory '/opt/module/datas/student'
row format delimited fields terminated by '\t'
select * from student;
- Job描述檔案:hive.job
vim hive.job
#hive job
type=command
command=/opt/module/hive/bin/hive -f /opt/module/azkaban/jobs/student.sql
- 將所有job資原始檔打到一個zip包中
vim hive.job
#hive job
type=command
command=/opt/module/hive/bin/hive -f /opt/module/azkaban/jobs/student.sql
- 在azkaban的web管理介面建立工程並上傳zip包並執行