3.4.3 Azkabanワークフロースケジューリングシステム、概要、インストールとデプロイ、使用(シェルスケジューリング、ジョブ依存関係、HDFSスケジューリング、MRスケジューリング、HIVEスクリプトスケジューリング)

目次

ワークフロースケジューリングシステムAzkaban

セクション1概要

1.1ワークフロースケジューリングシステム

1.2ワークフロースケジューリングの実装

1.3アズカバンとウージーの間の会話

セクション2アズカバン入門

セクション3Azkabanのインストールと展開

3.1アズカバンの設置準備

3.2ソロサーバーモードの展開

3.3マルチエグゼキュータモードのデプロイメント

セクション4アズカバンの使用

1シェルコマンドスケジューリング

2ジョブ依存のスケジューリング

3HDFSタスクのスケジューリング

4MAPREDUCEタスクのスケジューリング

5HIVEスクリプトタスクのスケジューリング


 

ワークフロースケジューリングシステムAzkaban

セクション1概要

1.1ワークフロースケジューリングシステム

完全なデータ分析システムは通常、多数のタスクユニットで構成されています。

  • シェルスクリプト
  • Javaプログラム
  • mapreduceプログラム
  • ハイブスクリプトなど。

各タスクユニット間には時系列と依存関係があり、このような複雑な実行プランをうまく整理するためには、タスクの実行をスケジュールするワークフロースケジューリングシステムが必要です。

そのような要件があるとすると、あるビジネスシステムが毎日20Gの生データを生成し、それを毎日処理します。処理手順は次のとおりです。

  • Hadoopを介して元のデータをHDFSに同期します。
  • 元のデータはMapReduceコンピューティングフレームワークを使用して変換され、結果のデータはパーティションテーブルの形式で複数のHiveテーブルに保存されます。
  • 詳細なデータHiveテーブルを取得するには、Hive内の複数のテーブルのデータに対してJOIN処理を実行する必要があります。
  • 詳細データに対してさまざまな統計分析を実行して、結果レポート情報を取得します。
  • 統計分析から得られた結果データは、ビジネス呼び出しのためにビジネスシステムに同期する必要があります。

 

1.2ワークフロースケジューリングの実装

シンプルなタスクスケジューリング

  • Linuxのcrontabを直接使用します。

複雑なタスクのスケジューリング

  • スケジューリングプラットフォームを開発するか、Ooize、Azkaban、Airflowなどの既製のオープンソーススケジューリングシステムを使用します。

 

1.3アズカバンとウージーの間の会話

市場で最も人気のある2つのスケジューラーを比較して分析します。一般に、OoizeはAzkabanに比べて重量のあるタスクスケジューリングシステムであり、完全な機能を備えていますが、構成と使用(xml)がより複雑です。特定の機能の欠如を気にしない場合は、軽量スケジューラのAzkabanが適しています。

特徴

  • どちらもmapreduce、pig、java、スクリプトをストリームタスクとしてスケジュールできます
  • どちらもワークフロータスクを定期的に実行できます

ワークフローの定義

  • Azkabanはプロパティファイルを使用してワークフローを定義します
  • OozieはXMLファイルを使用してワークフローを定義します

参考として

  • Azkabanは、$ {input}などの直接パラメーター受け渡しをサポートしています。
  • Oozieは、$ {fs:dirSize(myInputDir)}などのパラメーターとEL式をサポートしています。

時限実行

  • アズカバンのスケジュールされたタスクは時間に基づいています
  • Oozieのスケジュールされたタスクは、時間と入力データに基づいています

資源管理

  • Azkabanには、ワークフローでのユーザーの読み取り/書き込み/実行操作など、厳密な権限制御があります
  • Oozieは一時的に厳格な許可管理を行っていません

ワークストリームの実行

  • Azkabanには、ソロサーバーモード(エグゼキュータサーバーとWebサーバーが同じノードにデプロイされる)とマルチサーバーモード(エグゼキュータサーバーとWebサーバーが異なるノードにデプロイされる)の2つの動作モードがあります。
  • Oozieは、マルチユーザーおよびマルチワークストリーミングをサポートするワークストリーミングサーバーとして動作します

 

セクション2アズカバン入門

Azkabanは、LinkedIn(LinkedIn)によって起動されるバッチワークフロータスクスケジューラであり、ワークフロー内の特定の順序で一連のタスクとプロセスを実行するために使用されます。Azkabanは、ジョブ構成ファイルを使用してタスク間の依存関係を構築し、ワークフローを維持および追跡するための使いやすいWebユーザーインターフェイスを提供します

Azkabanは、タスク間の依存関係を構築するためのKVファイル(プロパティ)形式を定義し、ワークフローを維持および追跡するための使いやすいWebユーザーインターフェイスを提供します。

以下の特徴があります

  • Webユーザーインターフェイス
  • 次に、ワークストリームをアップロードします
  • タスク間の関係を簡単に設定できます
  • ワークフローのスケジューリング

建築

mysqlサーバー:プロジェクト名、プロジェクトの説明、プロジェクトの権限、タスクのステータス、SLAルールなどのメタデータを保存します。

AzkabanWebServer:外部Webサービスを提供し、ユーザーがWebページを介して管理できるようにします。責任には、プロジェクト管理、権限の承認、タスクのスケジューリング、およびエグゼキュータの監視が含まれます。

AzkabanExecutorServer:特定のワークフローの送信と実行を担当します。

 

セクション3Azkabanのインストールと展開

3.1アズカバンの設置準備

1コンパイル
このオプションは、azkaban3.51.0バージョンを使用して再コンパイルすることです。コンパイルが完了すると、インストールに必要なインストールパッケージが取得されます。

cd / opt / lagou /ソフトウェア/

wget https://github.com/azkaban/azkaban/archive/3.51.0.tar.gz

tar -zxvf 3.51.0.tar.gz -C ../servers/

cd /opt/lagou/servers/azkaban-3.51.0/

yum -y install git

yum -y install gcc-c ++

./gradlew build installDist -x test

Gradleは、ApacheAntとApacheMavenに基づく自動プロジェクトビルドツールです。-xtestテストをスキップします。(オンラインjarダウンロードが失敗して遅くなる可能性があることに注意してください)

2コンパイルされたインストールファイルをアップロードします

linux122ノードにディレクトリを作成します

mkdir / opt / lagou / servers / azkaban

 

3.2ソロサーバーモードの展開

1シングルサービスモードのインストール

1解凍

azkabanのソロサーバーはシングルノードモードを使用してサービスを開始します。開始するにはazkaban-soloserver-0.1.0-SNAPSHOT.tar.gzのインストールパッケージのみが必要であり、すべてのデータ情報はデフォルトのデータに保存されます。アズカバンのH2、

tar -zxvf azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz -C ../../servers/azkaban

2構成ファイルを変更します

タイムゾーン構成ファイルを変更する

cd /opt/lagou/servers/azkaban/azkaban-solo-server-0.1.0-SNAPSHOT/conf

vim azkaban.properties

default.timezone.id =アジア/上海

commonprivate.properties構成ファイルを変更します

cd /opt/lagou/servers/azkaban-solo-server-0.1.0-SNAPSHOT/plugins/jobtypes

vim commonprivate.properties

execute.as.user = false
memCheck.enabled = false

azkabanはデフォルトで3Gのメモリを必要とし、残りのメモリが不足している場合は例外が報告されます。

3ソロサーバーを起動します

cd /opt/lagou/servers/azkaban-solo-server-0.1.0-SNAPSHOT

bin / start-solo.sh

4ブラウザページへのアクセス

ブラウザページへのアクセス

http:// linux122:8081 / index

ログイン情報

ユーザー名:azkaban
パスワード:azkaban

 

2シングルサービスモードの使用

要件:azkabanを使用して、シェルスクリプトをスケジュールし、Linuxシェルコマンドを実行します


ジョブファイル開発するための具体的な手順
通常のテキストファイルfoo.jobを作成します。ファイルの内容は次のとおりです。

type = command
command = echo'hello world '

Zip

圧縮されたパッケージをAzkabanにアップロードします

プロジェクトを作成する

プロジェクト名と説明情報を指定します

Azkabanが圧縮パッケージをアップロードします

ワークフロー計画を表示して実行する

演算結果ページ

プログラムを停止します

bin / shutdown-solo.sh

 

3.3マルチエグゼキュータモードのデプロイメント

1必要なソフトウェアをインストールします


AzkabanWebサービスインストールパッケージazkaban-web-server-0.1.0-SNAPSHOT.tar.gz

Azkaban実行サービスインストールパッケージ
azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz

SQLスクリプト

ノード計画

 

2データベースの準備

linux123

mysqlクライアントを入力し、次のコマンドを実行します

mysql -uroot -p

次のコマンドを実行します。

SET GLOBAL validate_password_length=5;

SET GLOBAL validate_password_policy=0;

CREATE USER 'azkaban'@'%' IDENTIFIED BY 'azkaban'; 

GRANT all privileges ON azkaban.* to 'azkaban'@'%' identified by 'azkaban' WITH GRANT OPTION;

CREATE DATABASE azkaban;

use azkaban;

[root @ linux123ソフトウェア] mkdir / opt / lagou / servers / azkaban

[root @ linux122ソフトウェア] #scp azkaban-db-0.1.0-SNAPSHOT.tar.gz linux123:/ opt / lagou / servers / azkaban /

#データベーススクリプトを解凍します

tar -zxvf azkaban-db-0.1.0-SNAPSHOT.tar.gz -C / opt / lagou / servers / azkaban

 

#Load initialize sql create table

mysql> source /opt/lagou/servers/azkaban/azkaban-db-0.1.0-SNAPSHOT/create-all-sql-0.1.0-SNAPSHOT.sql;

3Azkaban-web-serverを構成します

linux122ノードを入力してください

azkaban-web-serverを解凍します

[root @ linux122ソフトウェア] #tar -zxvf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz -C / opt / lagou / servers / azkaban

azkaban-web-serverのルートディレクトリに移動します

[root @ linux122ソフトウェア] #cd /opt/lagou/servers/azkaban/azkaban-web-server-0.1.0-SNAPSHOT

#⽣成ssl证书:
[root @ linux122 azkaban-web-server-0.1.0-SNAPSHOT] #keytool -keystore keystore -alias jetty -genkey -keyalg RSA

 

#パスワードを直接azkabanその他のEnterキースキップ

注:このコマンドを実行すると、現在のキーストアのパスワードと対応する情報を入力するように求められます。入力したパスワードを覚えておいてください(すべてのパスワードはazkabanに入力されます)

azkaban-web-serverの構成ファイルを変更します

cd /opt/lagou/servers/azkaban/azkaban-web-server-0.1.0-SNAPSHOT/conf
vim azkaban.properties

# Azkaban Personalization Settings
azkaban.name=Test
azkaban.label=My Local Azkaban
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
web.resource.dir=web/
default.timezone.id=Asia/Shanghai # 时区注意后⾯不要有空格

# Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager
user.manager.xml.file=conf/azkaban-users.xml

# Azkaban Jetty server properties. 开启使⽤ssl 并且知道端⼝
jetty.use.ssl=true
jetty.port=8443
jetty.maxThreads=25

# KeyStore for SSL ssl相关配置 注意密码和证书路径
jetty.keystore=keystore
jetty.password=azkaban
jetty.keypassword=azkaban
jetty.truststore=keystore
jetty.trustpassword=azkaban

# Azkaban mysql settings by default. Users should configure their own username and password.
database.type=mysql
mysql.port=3306
mysql.host=linux123
mysql.database=azkaban
mysql.user=root
mysql.password=12345678
mysql.numconnections=100

#Multiple Executor 设置为false
azkaban.use.multiple.executors=true
#azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus
azkaban.executorselector.comparator.NumberOfAssignedFlowComparator=1
azkaban.executorselector.comparator.Memory=1
azkaban.executorselector.comparator.LastDispatched=1
azkaban.executorselector.comparator.CpuUsage=1

属性を追加する

mkdir-pプラグイン/ジョブタイプ

cdプラグイン/ jobtypes /
vim commonprivate.properties

azkaban.native.lib = false
execute.as.user = false
memCheck.enabled = false

4Azkaban-exec-serverを構成します

linux123ノード、execインストールパッケージを/ opt / lagou / softwareにアップロードします

tar -zxvf azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz –C / opt / lagou / servers / azkaban /

azkaban-exec-serverの構成ファイルを変更します

cd /opt/lagou/servers/azkaban/azkaban-exec-server-0.1.0-SNAPSHOT/conf
vim azkaban.properties

# Azkaban Personalization Settings
azkaban.name=Test
azkaban.label=My Local Azkaban
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
web.resource.dir=web/
default.timezone.id=Asia/Shanghai

# Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager
user.manager.xml.file=conf/azkaban-users.xml

# Loader for projects
executor.global.properties=conf/global.properties
azkaban.project.dir=projects

# Where the Azkaban web server is located
azkaban.webserver.url=https://linux122:8443

# Azkaban mysql settings by default. Users should configure their own usernameand password.
database.type=mysql
mysql.port=3306
mysql.host=linux123
mysql.database=azkaban
mysql.user=root
mysql.password=12345678
mysql.numconnections=100

# Azkaban Executor settings
executor.maxThreads=50
executor.port=12321
executor.flow.threads=30

exec-serverをlinux121ノードに配布します

cd / opt / lagou /サーバー

scp -r azkaban linux121:$ PWD

 

5サービスを開始します

最初にexec-serverを起動します

Webサーバーを再起動します

#linux121、123 start exec-server
bin / start-exec.sh

#linux122 start web-server
bin / start-web.sh

exec-serverをアクティブ化します

webServerを起動すると、プロセスが失敗して消えます。インストールパッケージのルートディレクトリにある対応する起動ログを確認できます。

エグゼキュータを手動でアクティブ化する必要があります

cd /opt/lagou/servers/azkaban/azkaban-exec-server-0.1.0-SNAPSHOT

curl -G "linux121:$(<./ executeor.port)/ executor?action = activate" && echo

curl -G "linux123:$(<./ executeor.port)/ executor?action = activate" && echo

再起動するたびに、上記を実行する必要があります

訪問アドレス:
https:// linux122:8443

 

セクション4アズカバンの使用

1シェルコマンドスケジューリング

ジョブ記述ファイル
vicommand.jobを作成します

type = command
command = echo'hello '

ジョブリソースファイルをzipファイルにパッケージ化する

zip command.job

プロジェクトを作成し、azkabanのWeb管理プラットフォームを介してジョブ圧縮パッケージをアップロードします

⾸最初にプロジェクトを作成する

zipパッケージをアップロードする

ジョブの実行を開始します

 

2ジョブ依存のスケジューリング

依存関係のある複数の職務記述書を作成する

最初の仕事:foo.job

type = command
command = echo'foo '

2番目のジョブ:bar.jobはfoo.jobに依存します

type =
commanddependencies = foo
command = echo'bar '

すべてのジョブリソースファイルをzipパッケージに入力します

azkabanのWeb管理フィールドでプロセスを作成し、zipパッケージ
アップロードしますワークフローを開始します

 

3HDFSタスクのスケジューリング

ジョブ記述ファイル
fs.jobを作成します

type = command
command = / opt / lagou / servers / hadoop-2.9.2 / bin / hadoop fs -mkdir / azkaban

ジョブリソースファイルをzipファイルにパッケージ化する

プロジェクトを作成し、azkabanのWeb管理プラットフォームを介してジョブ圧縮パッケージをアップロードします

ジョブの実行を開始します

 

4MAPREDUCEタスクのスケジューリング

mrタスクは、ジョブタイプのコマンドを使用して実行できます。

ジョブ記述ファイルとmrプログラムjarパッケージを作成します(この例では、hadoopが直接提供するサンプルjarを使用します)

mrwc.job

type = command
command = / opt / lagou / servers / hadoop-2.9.2 / bin / hadoop jar hadoop-mapreduce-examples-2.9.2.jar wordcount / wordcount / input / wordcount / azout

すべてのジョブリソースファイルをzipパッケージに入力します

プロセスを作成し、azkabanのWeb管理フィールドにzipパッケージをアップロードします

ジョブを開始します

仮想マシンのメモリが不足している場合:

1.マシンのメモリを増やします。2。clearsystemcache
コマンドを使用して、一部のメモリを一時的に解放します。

[root @ linux123 mapreduce] #echo 1> / proc / sys / vm / drop_caches
[root @ linux123 mapreduce] #echo 2> / proc / sys / vm / drop_caches
[root @ linux123 mapreduce] #echo 3> / proc / sys / vm / drop_caches

 

5HIVEスクリプトタスクのスケジューリング

ジョブ記述ファイルとハイブスクリプトを作成する
ハイブスクリプト:test.sql

use default;

drop table aztest;

create table aztest(id int,name string) 
row format delimited fields terminatedby ',';

ジョブ記述ファイル:hivef.job
hivef.job

type = command
command = / opt / lagou /servers/hive-2.3.7/bin/hive -f'test.sql '

すべてのジョブリソースファイルをzipパッケージに入力してプロセスを作成し、zipパッケージをアップロードしてジョブを開始します

 

6タイミングタスクのスケジューリング

ワークフロータスクの手動実行に加えて、azkabanは時限タスクスケジューリングの構成もサポートします。開封方法は以下の通りです。

処理するプロジェクトを
選択し、左側のスケジュール選択してタイミングスケジュール情報を構成し、右側の[実行]を選択してワークフロータスクをすぐに実行します。

おすすめ

転載: blog.csdn.net/chengh1993/article/details/112390515
おすすめ