目次
ワークフロースケジューリングシステム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ブラウザページへのアクセス
ブラウザページへのアクセス
ログイン情報
ユーザー名: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は時限タスクスケジューリングの構成もサポートします。開封方法は以下の通りです。
処理するプロジェクトを
選択し、左側のスケジュールを選択してタイミングスケジュール情報を構成し、右側の[実行]を選択してワークフロータスクをすぐに実行します。