Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

6,177 views

Published on

Apache Airflowとは、
「Python言語で定義したワークフローを、スケジュール・モニタリングするためのプラットフォーム」です。

この勉強会では、Apache Airflowの概要と特徴を紹介し。
Airflowをセットアップし簡単なワークフローを実行する方法を説明します。

ジョブの依存関係解決・再実行が行いやすいというAirflowの特徴が活かせる利用シーンとして、
レポーティングや機械学習での利用イメージについても紹介します。

Published in: Software
  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

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

  1. 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. 2. takemikami’s note – http://takemikami.com/ はじめに • 本勉強会では、Airflowの以下の点についてお話しします。 – Apache Airflowの概要と特徴の紹介 – Airflowでの簡単なワークフローを実行方法 – Airflowの特徴を活かせる利用シーンの紹介 2Copyright (C) 2017 Takeshi Mikami. All rights reserved. 本勉強会で説明する内容の概要を示します。 Python言語で定義したワークフローを スケジュール・モニタリングするプラットフォーム Apache Airflowとは
  3. 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. 4. takemikami’s note – http://takemikami.com/Copyright (C) 2017 Takeshi Mikami. All rights reserved. 4 Apache Airflowとは • Apache Airflowとは • Apache Airflowの特徴 • いわゆるジョブ管理ツールとの違い • 類似ツールの紹介
  5. 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. 6. takemikami’s note – http://takemikami.com/ Apache Airflowの特徴 • タスクの依存関係をPython言語で定義・管理 – 特別な記法の習得が不要 – ワークフローの定義を、SCMで管理しやすい • タスクの依存関係に基づいたワークフローの動的生成 – タスクの要求変換の対応が容易 • タスクの実行ログの管理と再実行 – 未実行のタスクのみ実行するスケジュールが可能 6Copyright (C) 2017 Takeshi Mikami. All rights reserved. Apache Airflowとは Airflowの主な特徴について説明します。
  7. 7. takemikami’s note – http://takemikami.com/ タスクの依存関係の考え方 • 「売上」「商品原価」「媒体別広告費」→「広告効果レポート」 ワークフローの依存関係は、以下の2つになる 7Copyright (C) 2017 Takeshi Mikami. All rights reserved. Apache Airflowとは タスクの依存関係の考え方の整理します。 広告費 集計 媒体商品別 広告費 広告効果 集計 広告効果 レポート 売上 商品原価 媒体B 広告費 媒体A 広告費 利益計算 商品別 利益 依存関係 依存関係
  8. 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. 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. 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. 11. takemikami’s note – http://takemikami.com/ いわゆるジョブ管理ツールとの違い • もっとも大きな違いは、 「タスクの依存関係に基づいてワークフローを動的に生成」 • メリット:要求出力ごとのワークフローの定義が不要 →要求出力の変化が激しい処理に対応しやすい ※レポーティングや機械学習の前処理など • デメリット:ワークフローを事前に計画しにくい →処理完了時間の要求がシビアなものに適用しにくい インフラのリソースプランニングが難しい 11Copyright (C) 2017 Takeshi Mikami. All rights reserved. Apache Airflowとは WebSAM JobCenterやJP1などのジョブ管理ツールとの違いを説明します。
  12. 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. 13. takemikami’s note – http://takemikami.com/Copyright (C) 2017 Takeshi Mikami. All rights reserved. 13 Apache Airflowでのジョブ実行 • Airflowのセットアップ • AirflowのUI • DAGと依存関係の定義 • サンプルワークフローの実行
  14. 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
  15. 15. takemikami’s note – http://takemikami.com/ AirflowのUI 15Copyright (C) 2017 Takeshi Mikami. All rights reserved. Apache Airflowでのジョブ実行 AirflowのUIを紹介します。 依存関係の定義一覧: DAG: 処理結果ツリー: 処理結果 ガントチャート:
  16. 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. 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. 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. 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. 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. 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. 22. takemikami’s note – http://takemikami.com/Copyright (C) 2017 Takeshi Mikami. All rights reserved. 22 Apache Airflowの利用シーン • レポーティングでの利用イメージ • 機械学習での利用イメージ
  23. 23. takemikami’s note – http://takemikami.com/ 追加部分 レポーティングでの利用イメージ • レポート追加は「タスク追加」「依存関係追加」で ワークフローを実現 23Copyright (C) 2017 Takeshi Mikami. All rights reserved. Apache Airflowの利用シーン レポーティングでの適用イメージを示します。 広告費 集計 媒体商品別 広告費 広告効果 集計 広告効果 レポート 売上 商品原価 媒体B 広告費 媒体A 広告費 利益計算 商品別 利益 キャンペーン 効果集計 キャンペーン 効果レポート キャンペーン コスト 依存関係追加 タスク追加
  24. 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. 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. 26. takemikami’s note – http://takemikami.com/ 追加部分 機械学習での利用イメージ 3/3 • 特徴量の追加もレポート追加同様に、 「タスク追加」「依存関係追加」で、動的にワークフローを生成 26Copyright (C) 2017 Takeshi Mikami. All rights reserved. Apache Airflowの利用シーン 機械学習での適用イメージを示します。 売上 顧客 購入点数 集計 顧客別 購入点数 予測用 データ 予測用 データ集計 学習と予測 性別予測済み 顧客 配送 配達日 集計 顧客別 配達日数 依存関係追加タスク追加

×