SlideShare a Scribd company logo
1 of 26
Download to read offline
takemikami’s note	– http://takemikami.com/
三上 威 (フリーランスITエンジニア)		twitter:	@takemikami
マーケティングデータ分析基盤技術勉強会
『Apache	Airflow	入門』
Apache	Airflowの概要・Airflowによるジョブ実行と利用シーン
1
Airflow
2017.3.16	株式会社フロムスクラッチ 社内勉強会
Copyright	(C)	2017	Takeshi	Mikami.	All	rights	reserved.
フロムスクラッチ
社内勉強会
takemikami’s note	– http://takemikami.com/
はじめに
• 本勉強会では、Airflowの以下の点についてお話しします。
– Apache	Airflowの概要と特徴の紹介
– Airflowでの簡単なワークフローを実行方法
– Airflowの特徴を活かせる利用シーンの紹介
2Copyright	(C)	2017	Takeshi	Mikami.	All	rights	reserved.
本勉強会で説明する内容の概要を示します。
Python言語で定義したワークフローを
スケジュール・モニタリングするプラットフォーム
Apache	Airflowとは
takemikami’s note	– http://takemikami.com/
アジェンダ
• Apache	Airflowとは
– Apache	Airflowとは
– Apache	Airflowの特徴
– いわゆるジョブ管理ツールとの違い
– 類似ツールの紹介
• Apache	Airflowでのジョブ実行
– Airflowのセットアップ
– AirflowのUI
– デモ
• Apache	Airflowの利用シーン
– レポーティングでの利用イメージ
– 機械学習での利用イメージ
3Copyright	(C)	2017	Takeshi	Mikami.	All	rights	reserved.
Apache	Airflow入門のアジェンダを示します。
takemikami’s note	– http://takemikami.com/Copyright	(C)	2017	Takeshi	Mikami.	All	rights	reserved. 4
Apache	Airflowとは
• Apache	Airflowとは
• Apache	Airflowの特徴
• いわゆるジョブ管理ツールとの違い
• 類似ツールの紹介
takemikami’s note	– http://takemikami.com/
Apache	Airflowとは
• Python言語によるタスクのワークフロー定義
• 依存関係に基づいたジョブの実行
• ワークフロー管理のためのUI提供
– パイプラインのヴィジュアライズ
– プロセスのモニタリング
5Copyright	(C)	2017	Takeshi	Mikami.	All	rights	reserved.
Apache	Airflowとは
Apache	Airflowの紹介をします。
Python言語で定義したワークフローを
スケジュール・モニタリングするプラットフォーム
takemikami’s note	– http://takemikami.com/
Apache	Airflowの特徴
• タスクの依存関係をPython言語で定義・管理
– 特別な記法の習得が不要
– ワークフローの定義を、SCMで管理しやすい
• タスクの依存関係に基づいたワークフローの動的生成
– タスクの要求変換の対応が容易
• タスクの実行ログの管理と再実行
– 未実行のタスクのみ実行するスケジュールが可能
6Copyright	(C)	2017	Takeshi	Mikami.	All	rights	reserved.
Apache	Airflowとは
Airflowの主な特徴について説明します。
takemikami’s note	– http://takemikami.com/
タスクの依存関係の考え方
• 「売上」「商品原価」「媒体別広告費」→「広告効果レポート」
ワークフローの依存関係は、以下の2つになる
7Copyright	(C)	2017	Takeshi	Mikami.	All	rights	reserved.
Apache	Airflowとは
タスクの依存関係の考え方の整理します。
広告費
集計
媒体商品別
広告費
広告効果
集計
広告効果
レポート
売上
商品原価
媒体B
広告費
媒体A
広告費
利益計算
商品別
利益
依存関係
依存関係
takemikami’s note	– http://takemikami.com/
ワークフロー動的生成の基本: DAG(有向非巡回グラフ)
• DAG(Directed	Acyclic	Graph,	有向非巡回グラフ)であれば、
タスクの依存関係はトポロジカルソートで解決できる
• DAGとはCycle(閉路)を持たない有向グラフのこと
8Copyright	(C)	2017	Takeshi	Mikami.	All	rights	reserved.
Apache	Airflowとは
ワークフローの動的生成に関する用語について整理します。
DAGの例:
2
11
5
10
9
7 8
3
Cycleの例:
2
11
5
10
9
7 8
3
Cycle
→依存関係を解決可能 →依存関係を解決できない
takemikami’s note	– http://takemikami.com/
ワークフロー動的生成の基本: トポロジカルソート
• トポロジカルソートとは、DAGの各nodeを
「どのnodeもその被依存nodeより前にあるように」並べること。
9Copyright	(C)	2017	Takeshi	Mikami.	All	rights	reserved.
Apache	Airflowとは
ワークフローの動的生成に関する用語について整理します。
トポロジカルソートの結果:
・ 7,	5,	3,	11,	8,	2,	9,	10	(見た目において左から右、上から下への順)
・ 3,	5,	7,	8,	11,	2,	9,	10	(数値的に小さなノードを前に持ってくる)
・ 3,	7,	8,	5,	11,	10,	2,	9
・ 5,	7,	3,	8,	11,	10,	9,	2	(辺の数が少ないノードを前に持ってくる)
・ 7,	5,	11,	3,	10,	8,	9,	2	(辺の数が多いノードを前に持ってくる)
・ 7,	5,	11,	2,	3,	8,	9,	10
※Wikipediaから (	https://ja.wikipedia.org/wiki/トポロジカルソート )
7 5 3
11 8
2 9 10
takemikami’s note	– http://takemikami.com/
未実行のタスクのみを実行する仕組み
• Airflowでは依存関係・実行ログの情報を元に、
必要なタスクのみをスケジュールして実行出来る
10Copyright	(C)	2017	Takeshi	Mikami.	All	rights	reserved.
Apache	Airflowとは
Airflowで未実行のタスクのみを実行する仕組みを説明します。
7 5 3
11 8
2 9 10
2のスケジュール: 9のスケジュール:
7 5 3
11 8
2 9 10
7 5 3
11 8
2 9 10
2の実行後:
→7,	5,	11の実行は不要
takemikami’s note	– http://takemikami.com/
いわゆるジョブ管理ツールとの違い
• もっとも大きな違いは、
「タスクの依存関係に基づいてワークフローを動的に生成」
• メリット:要求出力ごとのワークフローの定義が不要
→要求出力の変化が激しい処理に対応しやすい
※レポーティングや機械学習の前処理など
• デメリット:ワークフローを事前に計画しにくい
→処理完了時間の要求がシビアなものに適用しにくい
インフラのリソースプランニングが難しい
11Copyright	(C)	2017	Takeshi	Mikami.	All	rights	reserved.
Apache	Airflowとは
WebSAM JobCenterやJP1などのジョブ管理ツールとの違いを説明します。
takemikami’s note	– http://takemikami.com/
類似ツールの紹介
• Spotify	luigi (python)
https://github.com/spotify/luigi
• Pinterest	Pinball	(python)
https://github.com/pinterest/pinball
• TresureData digdag (java)
https://github.com/treasure-data/digdag
• Rukawa (ruby)
https://github.com/joker1007/rukawa
• mario (sacala)
https://github.com/intentmedia/mario
12Copyright	(C)	2017	Takeshi	Mikami.	All	rights	reserved.
Apache	Airflowとは
Airflowに似たツールの紹介です。
Airflowと同様の問題を解決する、類似ツールがいくつかあります。
takemikami’s note	– http://takemikami.com/Copyright	(C)	2017	Takeshi	Mikami.	All	rights	reserved. 13
Apache	Airflowでのジョブ実行
• Airflowのセットアップ
• AirflowのUI
• DAGと依存関係の定義
• サンプルワークフローの実行
takemikami’s note	– http://takemikami.com/
Airflowのセットアップ
• Airflowは以下の流れでセットアップします。
※Pythonがセットアップ済みの前提です。(Python 3.5.2	::	Anaconda	4.1.1	(x86_64)で確認)
– インストール
– 作業ディレクトリの作成
– データベースの初期化
– UI起動
14Copyright	(C)	2017	Takeshi	Mikami.	All	rights	reserved.
Apache	Airflowでのジョブ実行
Airflowのセットアップ手順を示します。
$	pip	install	airflow
$	mkdir ~/airflow_home &&	cd	$_
$	export	AIRFLOW_HOME=`pwd`
$	airflow	initdb
$	airflow	webserver	-p	8080
takemikami’s note	– http://takemikami.com/
AirflowのUI
15Copyright	(C)	2017	Takeshi	Mikami.	All	rights	reserved.
Apache	Airflowでのジョブ実行
AirflowのUIを紹介します。
依存関係の定義一覧: DAG: 処理結果ツリー:
処理結果
ガントチャート:
takemikami’s note	– http://takemikami.com/
DAGの定義
• 以下の流れでDAGを定義します。
– DAG用ディレクトリの作成
– 「$AIRFLOW_HOME/dags/」配下にpythonでDAGを定義します
※dags配下をgitなどで管理しておくと便利
16Copyright	(C)	2017	Takeshi	Mikami.	All	rights	reserved.
Apache	Airflowでのジョブ実行
DAGの定義方法を示します。
$	cd	$AIRFLOW_HOME
$	mkdir $AIRFLOW_HOME/dags
takemikami’s note	– http://takemikami.com/
シンプルな(単一タスクの)	DAGを定義
17Copyright	(C)	2017	Takeshi	Mikami.	All	rights	reserved.
Apache	Airflowでのジョブ実行
シンプルなDAGの定義です。 ($AIRFLOW_HOME/dags/original_dag1.py)
from	builtins import	range
from	airflow.operators import	BashOperator,	DummyOperator
from	airflow.models import	DAG
from	datetime import	datetime,	timedelta
args =	{
'owner':	'airflow',
'start_date':	datetime.combine(datetime.today()	- timedelta(1),	datetime.min.time()),
}
dag	=	DAG(
dag_id='simple_dag',	default_args=args,
schedule_interval='0	0	*	*	*',
dagrun_timeout=timedelta(minutes=60))
last_task =	DummyOperator(task_id='last_task',	dag=dag)
if	__name__	==	"__main__":
dag.cli()
DAGの定義
タスクの定義
初期パラメータの定義
takemikami’s note	– http://takemikami.com/
依存関係の追加
18Copyright	(C)	2017	Takeshi	Mikami.	All	rights	reserved.
Apache	Airflowでのジョブ実行
シンプルなDAGの定義です。 ($AIRFLOW_HOME/dags/original_dag2.py)
※省略※
last_task =	DummyOperator(task_id='last_task',	dag=dag)
before_task =	BashOperator(
task_id=’before_task',
bash_command='echo	before	task',
dag=dag)
last_task.set_upstream(before_task)
※省略※
• 先行タスクを追加し、依存関係を設定します
タスクの定義
依存関係の定義
DAG:
takemikami’s note	– http://takemikami.com/
サンプルワークフローの実行 1/3
19Copyright	(C)	2017	Takeshi	Mikami.	All	rights	reserved.
Apache	Airflowでのジョブ実行
サンプルのワークフローを実行してみます。
• 以下のサンプル「example_bash_operator」を実行していきます
• 「runme_1」 3/1分の実行
DAG:
$	airflow	run	example_bash_operator runme_1	2017-03-01
takemikami’s note	– http://takemikami.com/
サンプルワークフローの実行 2/3
20Copyright	(C)	2017	Takeshi	Mikami.	All	rights	reserved.
Apache	Airflowでのジョブ実行
サンプルのワークフローを実行してみます。
• 以下のように次々と実行していきます
$	airflow	run	example_bash_operator also_run_this 2017-03-02
$	airflow	run	example_bash_operator runme_1	2017-03-03
$	airflow	run	example_bash_operator runme_0	2017-03-04
結果のツリービュー:
実行したものが
処理済みになる
takemikami’s note	– http://takemikami.com/
サンプルワークフローの実行 2/3
21Copyright	(C)	2017	Takeshi	Mikami.	All	rights	reserved.
Apache	Airflowでのジョブ実行
サンプルのワークフローを実行してみます。
• 3/1〜5の抜けているところを埋めるように実行します。
$	airflow	backfill	example_bash_operator -s	2017-03-01	-e	2017-03-05
結果のツリービュー:
実行前
歯抜け部分が
処理済みになる
takemikami’s note	– http://takemikami.com/Copyright	(C)	2017	Takeshi	Mikami.	All	rights	reserved. 22
Apache	Airflowの利用シーン
• レポーティングでの利用イメージ
• 機械学習での利用イメージ
takemikami’s note	– http://takemikami.com/
追加部分
レポーティングでの利用イメージ
• レポート追加は「タスク追加」「依存関係追加」で
ワークフローを実現
23Copyright	(C)	2017	Takeshi	Mikami.	All	rights	reserved.
Apache	Airflowの利用シーン
レポーティングでの適用イメージを示します。
広告費
集計
媒体商品別
広告費
広告効果
集計
広告効果
レポート
売上
商品原価
媒体B
広告費
媒体A
広告費
利益計算
商品別
利益
キャンペーン
効果集計
キャンペーン
効果レポート
キャンペーン
コスト
依存関係追加
タスク追加
takemikami’s note	– http://takemikami.com/
機械学習での利用イメージ 1/3
• 例えば、商品カテゴリ毎の購入商品点数で性別を予測したい。
– 特徴量(説明変数): 商品カテゴリ毎の購入商品点数
– 目的変数: 性別
24Copyright	(C)	2017	Takeshi	Mikami.	All	rights	reserved.
Apache	Airflowの利用シーン
機械学習での適用イメージを示します。
性別 電化製品 キッチン
用品
ベビー用
品
アパレル カー用品 食品
男性 3 0 0 2 8 0
女性 0 5 5 0 0 0
? 3 1 0 1 1 4
? 1 0 0 0 0 8
目的変数 商品カテゴリ毎の購入商品点数
特徴量
takemikami’s note	– http://takemikami.com/
機械学習での利用イメージ 2/3
• 配達希望日も特徴に加えた方が予測精度が上がるのでは?
– 特徴量(説明変数): 商品カテゴリ毎の購入商品点数+配達希望日
– 目的変数: 性別
25Copyright	(C)	2017	Takeshi	Mikami.	All	rights	reserved.
Apache	Airflowの利用シーン
機械学習での適用イメージを示します。
性別 電化製品 キッチン
用品
ベビー用
品
アパレル カー用品 食品 平日 休日
男性 3 0 0 2 8 0 0 9
女性 0 5 5 0 0 0 5 1
? 3 1 0 1 1 4 1 8
? 1 0 0 0 0 8 7 1
目的変数 商品カテゴリ毎の購入商品点数 配達希望日
特徴量
takemikami’s note	– http://takemikami.com/
追加部分
機械学習での利用イメージ 3/3
• 特徴量の追加もレポート追加同様に、
「タスク追加」「依存関係追加」で、動的にワークフローを生成
26Copyright	(C)	2017	Takeshi	Mikami.	All	rights	reserved.
Apache	Airflowの利用シーン
機械学習での適用イメージを示します。
売上
顧客
購入点数
集計
顧客別
購入点数
予測用
データ
予測用
データ集計 学習と予測
性別予測済み
顧客
配送
配達日
集計
顧客別
配達日数
依存関係追加タスク追加

More Related Content

What's hot

AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design PatternAWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design PatternAmazon Web Services Japan
 
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版) データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版) Satoshi Nagayasu
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話Yuta Shimada
 
異次元のグラフデータベースNeo4j
異次元のグラフデータベースNeo4j異次元のグラフデータベースNeo4j
異次元のグラフデータベースNeo4j昌桓 李
 
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)NTT DATA OSS Professional Services
 
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すWebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すTakaya Saeki
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)Yoshitaka Kawashima
 
PySparkによるジョブを、より速く、よりスケーラブルに実行するための最善の方法 ※講演は翻訳資料にて行います。 - Getting the Best...
PySparkによるジョブを、より速く、よりスケーラブルに実行するための最善の方法  ※講演は翻訳資料にて行います。 - Getting the Best...PySparkによるジョブを、より速く、よりスケーラブルに実行するための最善の方法  ※講演は翻訳資料にて行います。 - Getting the Best...
PySparkによるジョブを、より速く、よりスケーラブルに実行するための最善の方法 ※講演は翻訳資料にて行います。 - Getting the Best...Holden Karau
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Etsuji Nakai
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)NTT DATA Technology & Innovation
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Akihiro Suda
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) Hironobu Isoda
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjugYahoo!デベロッパーネットワーク
 
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?Teppei Sato
 
できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミングPreferred Networks
 

What's hot (20)

At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design PatternAWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
 
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版) データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
データウェアハウスモデリング入門(ダイジェスト版)(事前公開版)
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
 
コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話
 
異次元のグラフデータベースNeo4j
異次元のグラフデータベースNeo4j異次元のグラフデータベースNeo4j
異次元のグラフデータベースNeo4j
 
Serverless時代のJavaについて
Serverless時代のJavaについてServerless時代のJavaについて
Serverless時代のJavaについて
 
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
 
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すWebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話す
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
 
PySparkによるジョブを、より速く、よりスケーラブルに実行するための最善の方法 ※講演は翻訳資料にて行います。 - Getting the Best...
PySparkによるジョブを、より速く、よりスケーラブルに実行するための最善の方法  ※講演は翻訳資料にて行います。 - Getting the Best...PySparkによるジョブを、より速く、よりスケーラブルに実行するための最善の方法  ※講演は翻訳資料にて行います。 - Getting the Best...
PySparkによるジョブを、より速く、よりスケーラブルに実行するための最善の方法 ※講演は翻訳資料にて行います。 - Getting the Best...
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
 
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
 
できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミング
 

Viewers also liked

Jenkins 2.0 Pipeline & Blue Ocean
Jenkins 2.0 Pipeline & Blue OceanJenkins 2.0 Pipeline & Blue Ocean
Jenkins 2.0 Pipeline & Blue OceanAkihiko Horiuchi
 
Apache Hbase バルクロードの使い方
Apache Hbase バルクロードの使い方Apache Hbase バルクロードの使い方
Apache Hbase バルクロードの使い方Takeshi Mikami
 
表参道.rb #19 / ただRailsで使われていないメソッドを削除したい人生だった
表参道.rb #19 / ただRailsで使われていないメソッドを削除したい人生だった表参道.rb #19 / ただRailsで使われていないメソッドを削除したい人生だった
表参道.rb #19 / ただRailsで使われていないメソッドを削除したい人生だったYasuhiro Matsumura
 
分散ワークフローエンジン『Digdag』の実装 at Tokyo RubyKaigi #11
分散ワークフローエンジン『Digdag』の実装 at Tokyo RubyKaigi #11分散ワークフローエンジン『Digdag』の実装 at Tokyo RubyKaigi #11
分散ワークフローエンジン『Digdag』の実装 at Tokyo RubyKaigi #11Sadayuki Furuhashi
 
Digdagによる大規模データ処理の自動化とエラー処理
Digdagによる大規模データ処理の自動化とエラー処理Digdagによる大規模データ処理の自動化とエラー処理
Digdagによる大規模データ処理の自動化とエラー処理Sadayuki Furuhashi
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とToru Takahashi
 

Viewers also liked (7)

Azkaban
AzkabanAzkaban
Azkaban
 
Jenkins 2.0 Pipeline & Blue Ocean
Jenkins 2.0 Pipeline & Blue OceanJenkins 2.0 Pipeline & Blue Ocean
Jenkins 2.0 Pipeline & Blue Ocean
 
Apache Hbase バルクロードの使い方
Apache Hbase バルクロードの使い方Apache Hbase バルクロードの使い方
Apache Hbase バルクロードの使い方
 
表参道.rb #19 / ただRailsで使われていないメソッドを削除したい人生だった
表参道.rb #19 / ただRailsで使われていないメソッドを削除したい人生だった表参道.rb #19 / ただRailsで使われていないメソッドを削除したい人生だった
表参道.rb #19 / ただRailsで使われていないメソッドを削除したい人生だった
 
分散ワークフローエンジン『Digdag』の実装 at Tokyo RubyKaigi #11
分散ワークフローエンジン『Digdag』の実装 at Tokyo RubyKaigi #11分散ワークフローエンジン『Digdag』の実装 at Tokyo RubyKaigi #11
分散ワークフローエンジン『Digdag』の実装 at Tokyo RubyKaigi #11
 
Digdagによる大規模データ処理の自動化とエラー処理
Digdagによる大規模データ処理の自動化とエラー処理Digdagによる大規模データ処理の自動化とエラー処理
Digdagによる大規模データ処理の自動化とエラー処理
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤と
 

Similar to Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会)

Cloud Foundry Cli Plugin入門
Cloud Foundry Cli Plugin入門Cloud Foundry Cli Plugin入門
Cloud Foundry Cli Plugin入門Takeshi Morikawa
 
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますinfinite_loop
 
Airflowを広告データのワークフローエンジンとして運用してみた話
Airflowを広告データのワークフローエンジンとして運用してみた話Airflowを広告データのワークフローエンジンとして運用してみた話
Airflowを広告データのワークフローエンジンとして運用してみた話Katsunori Kanda
 
いまさら聞けないRake入門
いまさら聞けないRake入門いまさら聞けないRake入門
いまさら聞けないRake入門Tomoya Kawanishi
 
CloudHubのログバックアップについて
CloudHubのログバックアップについてCloudHubのログバックアップについて
CloudHubのログバックアップについてMuleSoft Meetup Tokyo
 
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例Shigeru UCHIYAMA
 
[Cloud OnAir] GCP 上でストリーミングデータ処理基盤を構築してみよう! 2018年9月13日 放送
[Cloud OnAir] GCP 上でストリーミングデータ処理基盤を構築してみよう! 2018年9月13日 放送[Cloud OnAir] GCP 上でストリーミングデータ処理基盤を構築してみよう! 2018年9月13日 放送
[Cloud OnAir] GCP 上でストリーミングデータ処理基盤を構築してみよう! 2018年9月13日 放送Google Cloud Platform - Japan
 
Participation report of data stax accelerate 2019
Participation report of data stax accelerate 2019Participation report of data stax accelerate 2019
Participation report of data stax accelerate 2019MKT-INTHEFOREST
 
CircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウ
CircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウCircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウ
CircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウTakeshi Mikami
 
Newcomer2020 Docker研修
Newcomer2020 Docker研修Newcomer2020 Docker研修
Newcomer2020 Docker研修Suguru Yazawa
 
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Daisuke Hiraoka
 
serverspecを使用したサーバ設定テストの実例
serverspecを使用したサーバ設定テストの実例serverspecを使用したサーバ設定テストの実例
serverspecを使用したサーバ設定テストの実例Koichi Shimozono
 
Ansible quickstart
Ansible quickstartAnsible quickstart
Ansible quickstartHideki Saito
 
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2Preferred Networks
 
cndjp: 「Microclimate」by capsmalt
cndjp: 「Microclimate」by capsmaltcndjp: 「Microclimate」by capsmalt
cndjp: 「Microclimate」by capsmaltcapsmalt
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Masahito Zembutsu
 

Similar to Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会) (20)

Cloud Foundry Cli Plugin入門
Cloud Foundry Cli Plugin入門Cloud Foundry Cli Plugin入門
Cloud Foundry Cli Plugin入門
 
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せます
 
Airflowを広告データのワークフローエンジンとして運用してみた話
Airflowを広告データのワークフローエンジンとして運用してみた話Airflowを広告データのワークフローエンジンとして運用してみた話
Airflowを広告データのワークフローエンジンとして運用してみた話
 
いまさら聞けないRake入門
いまさら聞けないRake入門いまさら聞けないRake入門
いまさら聞けないRake入門
 
CloudHubのログバックアップについて
CloudHubのログバックアップについてCloudHubのログバックアップについて
CloudHubのログバックアップについて
 
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
 
[Cloud OnAir] GCP 上でストリーミングデータ処理基盤を構築してみよう! 2018年9月13日 放送
[Cloud OnAir] GCP 上でストリーミングデータ処理基盤を構築してみよう! 2018年9月13日 放送[Cloud OnAir] GCP 上でストリーミングデータ処理基盤を構築してみよう! 2018年9月13日 放送
[Cloud OnAir] GCP 上でストリーミングデータ処理基盤を構築してみよう! 2018年9月13日 放送
 
Participation report of data stax accelerate 2019
Participation report of data stax accelerate 2019Participation report of data stax accelerate 2019
Participation report of data stax accelerate 2019
 
Hadoop-3.2.0の新機能の紹介とJava9+対応のコミュニティ動向
Hadoop-3.2.0の新機能の紹介とJava9+対応のコミュニティ動向Hadoop-3.2.0の新機能の紹介とJava9+対応のコミュニティ動向
Hadoop-3.2.0の新機能の紹介とJava9+対応のコミュニティ動向
 
CircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウ
CircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウCircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウ
CircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウ
 
Newcomer2020 Docker研修
Newcomer2020 Docker研修Newcomer2020 Docker研修
Newcomer2020 Docker研修
 
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!
 
serverspecを使用したサーバ設定テストの実例
serverspecを使用したサーバ設定テストの実例serverspecを使用したサーバ設定テストの実例
serverspecを使用したサーバ設定テストの実例
 
Ansible quickstart
Ansible quickstartAnsible quickstart
Ansible quickstart
 
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
 
Flex's DI Container
Flex's DI ContainerFlex's DI Container
Flex's DI Container
 
Windows Azure PHP Tips
Windows Azure PHP Tips Windows Azure PHP Tips
Windows Azure PHP Tips
 
cndjp: 「Microclimate」by capsmalt
cndjp: 「Microclimate」by capsmaltcndjp: 「Microclimate」by capsmalt
cndjp: 「Microclimate」by capsmalt
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
 
Tekton 入門
Tekton 入門Tekton 入門
Tekton 入門
 

More from Takeshi Mikami

rdflintのvscode拡張の紹介とその実装方法
rdflintのvscode拡張の紹介とその実装方法rdflintのvscode拡張の紹介とその実装方法
rdflintのvscode拡張の紹介とその実装方法Takeshi Mikami
 
適切なクラスタ数を機械的に求める手法の紹介
適切なクラスタ数を機械的に求める手法の紹介適切なクラスタ数を機械的に求める手法の紹介
適切なクラスタ数を機械的に求める手法の紹介Takeshi Mikami
 
OAuth 2.0による認可の流れ
OAuth 2.0による認可の流れOAuth 2.0による認可の流れ
OAuth 2.0による認可の流れTakeshi Mikami
 
MapReduceによるConnected Components(連結成分)の見つけ方
MapReduceによるConnected Components(連結成分)の見つけ方MapReduceによるConnected Components(連結成分)の見つけ方
MapReduceによるConnected Components(連結成分)の見つけ方Takeshi Mikami
 
RDFチェックツール「rdflint」のご紹介 (LODチャレンジ2019受賞作品紹介 基盤技術部門優秀賞)
RDFチェックツール「rdflint」のご紹介 (LODチャレンジ2019受賞作品紹介 基盤技術部門優秀賞)RDFチェックツール「rdflint」のご紹介 (LODチャレンジ2019受賞作品紹介 基盤技術部門優秀賞)
RDFチェックツール「rdflint」のご紹介 (LODチャレンジ2019受賞作品紹介 基盤技術部門優秀賞)Takeshi Mikami
 
データサイエンスアイドル「小日向美穂」と考える「つながり」
データサイエンスアイドル「小日向美穂」と考える「つながり」データサイエンスアイドル「小日向美穂」と考える「つながり」
データサイエンスアイドル「小日向美穂」と考える「つながり」Takeshi Mikami
 
RDFのチェックツール「rdflint」と コミュニティによるオープンデータの作成
RDFのチェックツール「rdflint」とコミュニティによるオープンデータの作成RDFのチェックツール「rdflint」とコミュニティによるオープンデータの作成
RDFのチェックツール「rdflint」と コミュニティによるオープンデータの作成Takeshi Mikami
 
GitHubの機能を活用したGitHub Flowによる開発の進め方
GitHubの機能を活用したGitHub Flowによる開発の進め方GitHubの機能を活用したGitHub Flowによる開発の進め方
GitHubの機能を活用したGitHub Flowによる開発の進め方Takeshi Mikami
 
HBase CompleteBulkLoadその仕組み&発生した問題
HBase CompleteBulkLoadその仕組み&発生した問題HBase CompleteBulkLoadその仕組み&発生した問題
HBase CompleteBulkLoadその仕組み&発生した問題Takeshi Mikami
 
RDFチェックツール「rdflint」のご紹介
RDFチェックツール「rdflint」のご紹介RDFチェックツール「rdflint」のご紹介
RDFチェックツール「rdflint」のご紹介Takeshi Mikami
 
アーリース情報技術株式会社 会社案内 (2019/02/13)
アーリース情報技術株式会社 会社案内 (2019/02/13)アーリース情報技術株式会社 会社案内 (2019/02/13)
アーリース情報技術株式会社 会社案内 (2019/02/13)Takeshi Mikami
 
Spark MLlib ML Pipelines の概要 及びpysparkからの扱い方
Spark MLlib ML Pipelines の概要 及びpysparkからの扱い方Spark MLlib ML Pipelines の概要 及びpysparkからの扱い方
Spark MLlib ML Pipelines の概要 及びpysparkからの扱い方Takeshi Mikami
 
センサーによるデータ計測と異常検知の基本
センサーによるデータ計測と異常検知の基本センサーによるデータ計測と異常検知の基本
センサーによるデータ計測と異常検知の基本Takeshi Mikami
 
Webサイトのアクセスログによるユーザー属性推定
Webサイトのアクセスログによるユーザー属性推定Webサイトのアクセスログによるユーザー属性推定
Webサイトのアクセスログによるユーザー属性推定Takeshi Mikami
 
Google Cloud Dataflowによる データ変換処理入門
Google Cloud Dataflowによる データ変換処理入門Google Cloud Dataflowによる データ変換処理入門
Google Cloud Dataflowによる データ変換処理入門Takeshi Mikami
 
IoTでの機械学習活用イメージと強化学習のご紹介
IoTでの機械学習活用イメージと強化学習のご紹介IoTでの機械学習活用イメージと強化学習のご紹介
IoTでの機械学習活用イメージと強化学習のご紹介Takeshi Mikami
 
協調フィルタリング・アソシエーション分析によるレコメンド手法の紹介
協調フィルタリング・アソシエーション分析によるレコメンド手法の紹介協調フィルタリング・アソシエーション分析によるレコメンド手法の紹介
協調フィルタリング・アソシエーション分析によるレコメンド手法の紹介Takeshi Mikami
 
SparkMLlibで始めるビッグデータを対象とした機械学習入門
SparkMLlibで始めるビッグデータを対象とした機械学習入門SparkMLlibで始めるビッグデータを対象とした機械学習入門
SparkMLlibで始めるビッグデータを対象とした機械学習入門Takeshi Mikami
 
Ims@sparqlではじめるr markdownとgitbookによるレポート生成
Ims@sparqlではじめるr markdownとgitbookによるレポート生成Ims@sparqlではじめるr markdownとgitbookによるレポート生成
Ims@sparqlではじめるr markdownとgitbookによるレポート生成Takeshi Mikami
 

More from Takeshi Mikami (20)

rdflintのvscode拡張の紹介とその実装方法
rdflintのvscode拡張の紹介とその実装方法rdflintのvscode拡張の紹介とその実装方法
rdflintのvscode拡張の紹介とその実装方法
 
適切なクラスタ数を機械的に求める手法の紹介
適切なクラスタ数を機械的に求める手法の紹介適切なクラスタ数を機械的に求める手法の紹介
適切なクラスタ数を機械的に求める手法の紹介
 
OAuth 2.0による認可の流れ
OAuth 2.0による認可の流れOAuth 2.0による認可の流れ
OAuth 2.0による認可の流れ
 
MapReduceによるConnected Components(連結成分)の見つけ方
MapReduceによるConnected Components(連結成分)の見つけ方MapReduceによるConnected Components(連結成分)の見つけ方
MapReduceによるConnected Components(連結成分)の見つけ方
 
RDFチェックツール「rdflint」のご紹介 (LODチャレンジ2019受賞作品紹介 基盤技術部門優秀賞)
RDFチェックツール「rdflint」のご紹介 (LODチャレンジ2019受賞作品紹介 基盤技術部門優秀賞)RDFチェックツール「rdflint」のご紹介 (LODチャレンジ2019受賞作品紹介 基盤技術部門優秀賞)
RDFチェックツール「rdflint」のご紹介 (LODチャレンジ2019受賞作品紹介 基盤技術部門優秀賞)
 
データサイエンスアイドル「小日向美穂」と考える「つながり」
データサイエンスアイドル「小日向美穂」と考える「つながり」データサイエンスアイドル「小日向美穂」と考える「つながり」
データサイエンスアイドル「小日向美穂」と考える「つながり」
 
RDFのチェックツール「rdflint」と コミュニティによるオープンデータの作成
RDFのチェックツール「rdflint」とコミュニティによるオープンデータの作成RDFのチェックツール「rdflint」とコミュニティによるオープンデータの作成
RDFのチェックツール「rdflint」と コミュニティによるオープンデータの作成
 
GitHubの機能を活用したGitHub Flowによる開発の進め方
GitHubの機能を活用したGitHub Flowによる開発の進め方GitHubの機能を活用したGitHub Flowによる開発の進め方
GitHubの機能を活用したGitHub Flowによる開発の進め方
 
HBase CompleteBulkLoadその仕組み&発生した問題
HBase CompleteBulkLoadその仕組み&発生した問題HBase CompleteBulkLoadその仕組み&発生した問題
HBase CompleteBulkLoadその仕組み&発生した問題
 
RDFチェックツール「rdflint」のご紹介
RDFチェックツール「rdflint」のご紹介RDFチェックツール「rdflint」のご紹介
RDFチェックツール「rdflint」のご紹介
 
アーリース情報技術株式会社 会社案内 (2019/02/13)
アーリース情報技術株式会社 会社案内 (2019/02/13)アーリース情報技術株式会社 会社案内 (2019/02/13)
アーリース情報技術株式会社 会社案内 (2019/02/13)
 
Spark MLlib ML Pipelines の概要 及びpysparkからの扱い方
Spark MLlib ML Pipelines の概要 及びpysparkからの扱い方Spark MLlib ML Pipelines の概要 及びpysparkからの扱い方
Spark MLlib ML Pipelines の概要 及びpysparkからの扱い方
 
SPARQL入門
SPARQL入門SPARQL入門
SPARQL入門
 
センサーによるデータ計測と異常検知の基本
センサーによるデータ計測と異常検知の基本センサーによるデータ計測と異常検知の基本
センサーによるデータ計測と異常検知の基本
 
Webサイトのアクセスログによるユーザー属性推定
Webサイトのアクセスログによるユーザー属性推定Webサイトのアクセスログによるユーザー属性推定
Webサイトのアクセスログによるユーザー属性推定
 
Google Cloud Dataflowによる データ変換処理入門
Google Cloud Dataflowによる データ変換処理入門Google Cloud Dataflowによる データ変換処理入門
Google Cloud Dataflowによる データ変換処理入門
 
IoTでの機械学習活用イメージと強化学習のご紹介
IoTでの機械学習活用イメージと強化学習のご紹介IoTでの機械学習活用イメージと強化学習のご紹介
IoTでの機械学習活用イメージと強化学習のご紹介
 
協調フィルタリング・アソシエーション分析によるレコメンド手法の紹介
協調フィルタリング・アソシエーション分析によるレコメンド手法の紹介協調フィルタリング・アソシエーション分析によるレコメンド手法の紹介
協調フィルタリング・アソシエーション分析によるレコメンド手法の紹介
 
SparkMLlibで始めるビッグデータを対象とした機械学習入門
SparkMLlibで始めるビッグデータを対象とした機械学習入門SparkMLlibで始めるビッグデータを対象とした機械学習入門
SparkMLlibで始めるビッグデータを対象とした機械学習入門
 
Ims@sparqlではじめるr markdownとgitbookによるレポート生成
Ims@sparqlではじめるr markdownとgitbookによるレポート生成Ims@sparqlではじめるr markdownとgitbookによるレポート生成
Ims@sparqlではじめるr markdownとgitbookによるレポート生成
 

Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会)

  • 1. takemikami’s note – http://takemikami.com/ 三上 威 (フリーランスITエンジニア) twitter: @takemikami マーケティングデータ分析基盤技術勉強会 『Apache Airflow 入門』 Apache Airflowの概要・Airflowによるジョブ実行と利用シーン 1 Airflow 2017.3.16 株式会社フロムスクラッチ 社内勉強会 Copyright (C) 2017 Takeshi Mikami. All rights reserved. フロムスクラッチ 社内勉強会
  • 2. takemikami’s note – http://takemikami.com/ はじめに • 本勉強会では、Airflowの以下の点についてお話しします。 – Apache Airflowの概要と特徴の紹介 – Airflowでの簡単なワークフローを実行方法 – Airflowの特徴を活かせる利用シーンの紹介 2Copyright (C) 2017 Takeshi Mikami. All rights reserved. 本勉強会で説明する内容の概要を示します。 Python言語で定義したワークフローを スケジュール・モニタリングするプラットフォーム Apache Airflowとは
  • 3. takemikami’s note – http://takemikami.com/ アジェンダ • Apache Airflowとは – Apache Airflowとは – Apache Airflowの特徴 – いわゆるジョブ管理ツールとの違い – 類似ツールの紹介 • Apache Airflowでのジョブ実行 – Airflowのセットアップ – AirflowのUI – デモ • Apache Airflowの利用シーン – レポーティングでの利用イメージ – 機械学習での利用イメージ 3Copyright (C) 2017 Takeshi Mikami. All rights reserved. Apache Airflow入門のアジェンダを示します。
  • 4. takemikami’s note – http://takemikami.com/Copyright (C) 2017 Takeshi Mikami. All rights reserved. 4 Apache Airflowとは • Apache Airflowとは • Apache Airflowの特徴 • いわゆるジョブ管理ツールとの違い • 類似ツールの紹介
  • 5. takemikami’s note – http://takemikami.com/ Apache Airflowとは • Python言語によるタスクのワークフロー定義 • 依存関係に基づいたジョブの実行 • ワークフロー管理のためのUI提供 – パイプラインのヴィジュアライズ – プロセスのモニタリング 5Copyright (C) 2017 Takeshi Mikami. All rights reserved. Apache Airflowとは Apache Airflowの紹介をします。 Python言語で定義したワークフローを スケジュール・モニタリングするプラットフォーム
  • 6. takemikami’s note – http://takemikami.com/ Apache Airflowの特徴 • タスクの依存関係をPython言語で定義・管理 – 特別な記法の習得が不要 – ワークフローの定義を、SCMで管理しやすい • タスクの依存関係に基づいたワークフローの動的生成 – タスクの要求変換の対応が容易 • タスクの実行ログの管理と再実行 – 未実行のタスクのみ実行するスケジュールが可能 6Copyright (C) 2017 Takeshi Mikami. All rights reserved. Apache Airflowとは Airflowの主な特徴について説明します。
  • 7. takemikami’s note – http://takemikami.com/ タスクの依存関係の考え方 • 「売上」「商品原価」「媒体別広告費」→「広告効果レポート」 ワークフローの依存関係は、以下の2つになる 7Copyright (C) 2017 Takeshi Mikami. All rights reserved. Apache Airflowとは タスクの依存関係の考え方の整理します。 広告費 集計 媒体商品別 広告費 広告効果 集計 広告効果 レポート 売上 商品原価 媒体B 広告費 媒体A 広告費 利益計算 商品別 利益 依存関係 依存関係
  • 8. takemikami’s note – http://takemikami.com/ ワークフロー動的生成の基本: DAG(有向非巡回グラフ) • DAG(Directed Acyclic Graph, 有向非巡回グラフ)であれば、 タスクの依存関係はトポロジカルソートで解決できる • DAGとはCycle(閉路)を持たない有向グラフのこと 8Copyright (C) 2017 Takeshi Mikami. All rights reserved. Apache Airflowとは ワークフローの動的生成に関する用語について整理します。 DAGの例: 2 11 5 10 9 7 8 3 Cycleの例: 2 11 5 10 9 7 8 3 Cycle →依存関係を解決可能 →依存関係を解決できない
  • 9. takemikami’s note – http://takemikami.com/ ワークフロー動的生成の基本: トポロジカルソート • トポロジカルソートとは、DAGの各nodeを 「どのnodeもその被依存nodeより前にあるように」並べること。 9Copyright (C) 2017 Takeshi Mikami. All rights reserved. Apache Airflowとは ワークフローの動的生成に関する用語について整理します。 トポロジカルソートの結果: ・ 7, 5, 3, 11, 8, 2, 9, 10 (見た目において左から右、上から下への順) ・ 3, 5, 7, 8, 11, 2, 9, 10 (数値的に小さなノードを前に持ってくる) ・ 3, 7, 8, 5, 11, 10, 2, 9 ・ 5, 7, 3, 8, 11, 10, 9, 2 (辺の数が少ないノードを前に持ってくる) ・ 7, 5, 11, 3, 10, 8, 9, 2 (辺の数が多いノードを前に持ってくる) ・ 7, 5, 11, 2, 3, 8, 9, 10 ※Wikipediaから ( https://ja.wikipedia.org/wiki/トポロジカルソート ) 7 5 3 11 8 2 9 10
  • 10. takemikami’s note – http://takemikami.com/ 未実行のタスクのみを実行する仕組み • Airflowでは依存関係・実行ログの情報を元に、 必要なタスクのみをスケジュールして実行出来る 10Copyright (C) 2017 Takeshi Mikami. All rights reserved. Apache Airflowとは Airflowで未実行のタスクのみを実行する仕組みを説明します。 7 5 3 11 8 2 9 10 2のスケジュール: 9のスケジュール: 7 5 3 11 8 2 9 10 7 5 3 11 8 2 9 10 2の実行後: →7, 5, 11の実行は不要
  • 11. takemikami’s note – http://takemikami.com/ いわゆるジョブ管理ツールとの違い • もっとも大きな違いは、 「タスクの依存関係に基づいてワークフローを動的に生成」 • メリット:要求出力ごとのワークフローの定義が不要 →要求出力の変化が激しい処理に対応しやすい ※レポーティングや機械学習の前処理など • デメリット:ワークフローを事前に計画しにくい →処理完了時間の要求がシビアなものに適用しにくい インフラのリソースプランニングが難しい 11Copyright (C) 2017 Takeshi Mikami. All rights reserved. Apache Airflowとは WebSAM JobCenterやJP1などのジョブ管理ツールとの違いを説明します。
  • 12. takemikami’s note – http://takemikami.com/ 類似ツールの紹介 • Spotify luigi (python) https://github.com/spotify/luigi • Pinterest Pinball (python) https://github.com/pinterest/pinball • TresureData digdag (java) https://github.com/treasure-data/digdag • Rukawa (ruby) https://github.com/joker1007/rukawa • mario (sacala) https://github.com/intentmedia/mario 12Copyright (C) 2017 Takeshi Mikami. All rights reserved. Apache Airflowとは Airflowに似たツールの紹介です。 Airflowと同様の問題を解決する、類似ツールがいくつかあります。
  • 13. takemikami’s note – http://takemikami.com/Copyright (C) 2017 Takeshi Mikami. All rights reserved. 13 Apache Airflowでのジョブ実行 • Airflowのセットアップ • AirflowのUI • DAGと依存関係の定義 • サンプルワークフローの実行
  • 14. takemikami’s note – http://takemikami.com/ Airflowのセットアップ • Airflowは以下の流れでセットアップします。 ※Pythonがセットアップ済みの前提です。(Python 3.5.2 :: Anaconda 4.1.1 (x86_64)で確認) – インストール – 作業ディレクトリの作成 – データベースの初期化 – UI起動 14Copyright (C) 2017 Takeshi Mikami. All rights reserved. Apache Airflowでのジョブ実行 Airflowのセットアップ手順を示します。 $ pip install airflow $ mkdir ~/airflow_home && cd $_ $ export AIRFLOW_HOME=`pwd` $ airflow initdb $ airflow webserver -p 8080
  • 16. takemikami’s note – http://takemikami.com/ DAGの定義 • 以下の流れでDAGを定義します。 – DAG用ディレクトリの作成 – 「$AIRFLOW_HOME/dags/」配下にpythonでDAGを定義します ※dags配下をgitなどで管理しておくと便利 16Copyright (C) 2017 Takeshi Mikami. All rights reserved. Apache Airflowでのジョブ実行 DAGの定義方法を示します。 $ cd $AIRFLOW_HOME $ mkdir $AIRFLOW_HOME/dags
  • 17. takemikami’s note – http://takemikami.com/ シンプルな(単一タスクの) DAGを定義 17Copyright (C) 2017 Takeshi Mikami. All rights reserved. Apache Airflowでのジョブ実行 シンプルなDAGの定義です。 ($AIRFLOW_HOME/dags/original_dag1.py) from builtins import range from airflow.operators import BashOperator, DummyOperator from airflow.models import DAG from datetime import datetime, timedelta args = { 'owner': 'airflow', 'start_date': datetime.combine(datetime.today() - timedelta(1), datetime.min.time()), } dag = DAG( dag_id='simple_dag', default_args=args, schedule_interval='0 0 * * *', dagrun_timeout=timedelta(minutes=60)) last_task = DummyOperator(task_id='last_task', dag=dag) if __name__ == "__main__": dag.cli() DAGの定義 タスクの定義 初期パラメータの定義
  • 18. takemikami’s note – http://takemikami.com/ 依存関係の追加 18Copyright (C) 2017 Takeshi Mikami. All rights reserved. Apache Airflowでのジョブ実行 シンプルなDAGの定義です。 ($AIRFLOW_HOME/dags/original_dag2.py) ※省略※ last_task = DummyOperator(task_id='last_task', dag=dag) before_task = BashOperator( task_id=’before_task', bash_command='echo before task', dag=dag) last_task.set_upstream(before_task) ※省略※ • 先行タスクを追加し、依存関係を設定します タスクの定義 依存関係の定義 DAG:
  • 19. takemikami’s note – http://takemikami.com/ サンプルワークフローの実行 1/3 19Copyright (C) 2017 Takeshi Mikami. All rights reserved. Apache Airflowでのジョブ実行 サンプルのワークフローを実行してみます。 • 以下のサンプル「example_bash_operator」を実行していきます • 「runme_1」 3/1分の実行 DAG: $ airflow run example_bash_operator runme_1 2017-03-01
  • 20. takemikami’s note – http://takemikami.com/ サンプルワークフローの実行 2/3 20Copyright (C) 2017 Takeshi Mikami. All rights reserved. Apache Airflowでのジョブ実行 サンプルのワークフローを実行してみます。 • 以下のように次々と実行していきます $ airflow run example_bash_operator also_run_this 2017-03-02 $ airflow run example_bash_operator runme_1 2017-03-03 $ airflow run example_bash_operator runme_0 2017-03-04 結果のツリービュー: 実行したものが 処理済みになる
  • 21. takemikami’s note – http://takemikami.com/ サンプルワークフローの実行 2/3 21Copyright (C) 2017 Takeshi Mikami. All rights reserved. Apache Airflowでのジョブ実行 サンプルのワークフローを実行してみます。 • 3/1〜5の抜けているところを埋めるように実行します。 $ airflow backfill example_bash_operator -s 2017-03-01 -e 2017-03-05 結果のツリービュー: 実行前 歯抜け部分が 処理済みになる
  • 22. takemikami’s note – http://takemikami.com/Copyright (C) 2017 Takeshi Mikami. All rights reserved. 22 Apache Airflowの利用シーン • レポーティングでの利用イメージ • 機械学習での利用イメージ
  • 23. takemikami’s note – http://takemikami.com/ 追加部分 レポーティングでの利用イメージ • レポート追加は「タスク追加」「依存関係追加」で ワークフローを実現 23Copyright (C) 2017 Takeshi Mikami. All rights reserved. Apache Airflowの利用シーン レポーティングでの適用イメージを示します。 広告費 集計 媒体商品別 広告費 広告効果 集計 広告効果 レポート 売上 商品原価 媒体B 広告費 媒体A 広告費 利益計算 商品別 利益 キャンペーン 効果集計 キャンペーン 効果レポート キャンペーン コスト 依存関係追加 タスク追加
  • 24. takemikami’s note – http://takemikami.com/ 機械学習での利用イメージ 1/3 • 例えば、商品カテゴリ毎の購入商品点数で性別を予測したい。 – 特徴量(説明変数): 商品カテゴリ毎の購入商品点数 – 目的変数: 性別 24Copyright (C) 2017 Takeshi Mikami. All rights reserved. Apache Airflowの利用シーン 機械学習での適用イメージを示します。 性別 電化製品 キッチン 用品 ベビー用 品 アパレル カー用品 食品 男性 3 0 0 2 8 0 女性 0 5 5 0 0 0 ? 3 1 0 1 1 4 ? 1 0 0 0 0 8 目的変数 商品カテゴリ毎の購入商品点数 特徴量
  • 25. takemikami’s note – http://takemikami.com/ 機械学習での利用イメージ 2/3 • 配達希望日も特徴に加えた方が予測精度が上がるのでは? – 特徴量(説明変数): 商品カテゴリ毎の購入商品点数+配達希望日 – 目的変数: 性別 25Copyright (C) 2017 Takeshi Mikami. All rights reserved. Apache Airflowの利用シーン 機械学習での適用イメージを示します。 性別 電化製品 キッチン 用品 ベビー用 品 アパレル カー用品 食品 平日 休日 男性 3 0 0 2 8 0 0 9 女性 0 5 5 0 0 0 5 1 ? 3 1 0 1 1 4 1 8 ? 1 0 0 0 0 8 7 1 目的変数 商品カテゴリ毎の購入商品点数 配達希望日 特徴量
  • 26. takemikami’s note – http://takemikami.com/ 追加部分 機械学習での利用イメージ 3/3 • 特徴量の追加もレポート追加同様に、 「タスク追加」「依存関係追加」で、動的にワークフローを生成 26Copyright (C) 2017 Takeshi Mikami. All rights reserved. Apache Airflowの利用シーン 機械学習での適用イメージを示します。 売上 顧客 購入点数 集計 顧客別 購入点数 予測用 データ 予測用 データ集計 学習と予測 性別予測済み 顧客 配送 配達日 集計 顧客別 配達日数 依存関係追加タスク追加