SlideShare ist ein Scribd-Unternehmen logo
1 von 26
Downloaden Sie, um offline zu lesen
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の利用シーン
機械学習での適用イメージを示します。
売上
顧客
購入点数
集計
顧客別
購入点数
予測用
データ
予測用
データ集計 学習と予測
性別予測済み
顧客
配送
配達日
集計
顧客別
配達日数
依存関係追加タスク追加

Weitere ähnliche Inhalte

Was ist angesagt?

Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Akihiro Suda
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことAmazon Web Services Japan
 
Azure API Management 俺的マニュアル
Azure API Management 俺的マニュアルAzure API Management 俺的マニュアル
Azure API Management 俺的マニュアル貴志 上坂
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」Masahito Zembutsu
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法についてYuji Otani
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話Koichiro Matsuoka
 
20200826 AWS Black Belt Online Seminar AWS CloudFormation
20200826 AWS Black Belt Online Seminar AWS CloudFormation 20200826 AWS Black Belt Online Seminar AWS CloudFormation
20200826 AWS Black Belt Online Seminar AWS CloudFormation Amazon Web Services Japan
 
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
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Masahito Zembutsu
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門Kohei Tokunaga
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計Yoshinori Matsunobu
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)NTT DATA Technology & Innovation
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーToru Makabe
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021Hiroshi Tokumaru
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugMasatoshi Tada
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかShogo Wakayama
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -onozaty
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!Tetsutaro Watanabe
 
がっつりMongoDB事例紹介
がっつりMongoDB事例紹介がっつりMongoDB事例紹介
がっつりMongoDB事例紹介Tetsutaro Watanabe
 

Was ist angesagt? (20)

Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
 
Azure API Management 俺的マニュアル
Azure API Management 俺的マニュアルAzure API Management 俺的マニュアル
Azure API Management 俺的マニュアル
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 
20200826 AWS Black Belt Online Seminar AWS CloudFormation
20200826 AWS Black Belt Online Seminar AWS CloudFormation 20200826 AWS Black Belt Online Seminar AWS CloudFormation
20200826 AWS Black Belt Online Seminar AWS CloudFormation
 
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
 
がっつりMongoDB事例紹介
がっつりMongoDB事例紹介がっつりMongoDB事例紹介
がっつりMongoDB事例紹介
 

Andere mochten auch

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
 

Andere mochten auch (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とデータ分析基盤と
 

Ähnlich wie 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
 

Ähnlich wie 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 入門
 

Mehr von 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
 

Mehr von 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の利用シーン 機械学習での適用イメージを示します。 売上 顧客 購入点数 集計 顧客別 購入点数 予測用 データ 予測用 データ集計 学習と予測 性別予測済み 顧客 配送 配達日 集計 顧客別 配達日数 依存関係追加タスク追加