Large-scale data processing with Cloud Dataflow for Python

0a263e3c114aa0f8d57b612c628bbd69?s=47 masahito
February 29, 2020

Large-scale data processing with Cloud Dataflow for Python

Large-scale data processing with Cloud Dataflow for Python

1. What is the Data Infrastructure?
2. What are the benefits of Cloud Dataflow?
3. How to use Apache Beam SDK with Python?

0a263e3c114aa0f8d57b612c628bbd69?s=128

masahito

February 29, 2020
Tweet

Transcript

  1. Cloud DataFlow / Pythonで 大規模データ処理 @masahito 2020年2月29日(土) PyCon mini Shizuoka@Online

  2. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online 謝辞 1. PyCon

    mini Shizuokaのスタッフの皆様 a. オンラインカンファレンスへの切り替えなど対応お疲れ様 でした。 2. オンラインで発表をみてくださっている皆様 2
  3. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online 自己紹介 { “name”:”Masato

    Nakamura”, “SNS”: { “Twitter”: “@masahito”, “Github”: “masahitojp” }, “Loves”: [ “Python”, “JS”, “Java/Scala”, “Coffee☕ ” ] } 3
  4. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online テーマ:「あなたの知らないPython」 今回はテーマとして データ基盤で使われるPython

    をお話させていただきます。 4
  5. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online まとめ 1. データ分析を行うときには大規模データをスムーズに処理す

    ることが大事 2. できれば手がかからないようにしていくことも大事 3. GCP(特にBigQuery)をデータ分析基盤に使う場合にはCloud Dataflowの活用をおすすめしたい 5
  6. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online 本日お話すること 1. データ基盤とは

    2. Cloud Dataflowの利点 3. Apache Beam SDK with Python 6
  7. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online 本日お話しないこと 1. データ基盤の選び方

    2. 具体的な業務 3. 日々の運用の話 4. GCP(BigQuery) 7
  8. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online 本日お話すること 1. データ集計基盤とは

    2. Cloud Dataflowの利点 3. Apache Beam SDK with Python 8
  9. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online 本日お話すること 1. データ集計基盤とは

    2. Cloud Dataflowの利点 3. Apache Beam SDK with Python 9
  10. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online データ基盤 データ基盤とは、分析などに利用するデータを蓄積し、必要に応じて取り出すことができ る処理システム群のことを言います。

    データを蓄積するデータベースだけではなく、データの解析や可視化といった利用にい たるまでの一連の処理を自動化するうえでも、柔軟性の高いデータ基盤を作ることが業 務の効率化に繋がります。 https://www.bigdata-navi.com/aidrops/1183/ 10
  11. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online データ基盤 データ基盤 データソース

    ユーザー 11
  12. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online データ基盤 Source 形式に関わらずデー

    タを集約して保存す るストレージ ≒データレイク Warehouse 目的に応じて定義され た形に統合して格納し たデータベース ≒データウェアハウス App 利用者向けのイン ターフェース ≒データウェアマート Amazon S3 Google Cloud Storage Hadoop/Spark Dataflow Tableu DataStudio Looker 12
  13. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online データ基盤 Input Transform

    Input Input Output データ集計 ログ、 DataBase 成果物となるデータ 13
  14. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online データ基盤 目指すべきこと •

    データを活用したい人に開放する ◦ データどこ問題 ◦ データを触れない問題 • データの鮮度をなるべく揃える 14
  15. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online データ基盤 気をつけるべきこと •

    エラー ◦ 変換 ▪ 構造変更 • 入力/出力 ▪ 処理づまり ◦ ソース ▪ データが取得できない ◦ 全体 ▪ データもとが増えてきたときに全体の負荷が読めない ▪ そもそもどこか一部分の処理が動いていない 15
  16. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online データ集計基盤 あるある •

    データ変換バッチが途中で止まる ◦ いろいろな要因がありますよね • エラーログがおいづらい ◦ エラーの切り分け • データ量起因の問題が起こりがち ◦ データシンクが終わらない問題 16
  17. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online データ基盤 あるある •

    マネージドサービス使いたい ◦ なるべく自分で運用するポイントを減らしたい • エラーをいい感じに出したい ◦ 例外等でバッチが止まったときにどこで落ちたかわかるようにしたい ◦ 突貫でつくるとサービスインまでに漏れがち 17
  18. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online データ基盤(個人の意見) • 導入を考える場合にBigQueryをまずはおすすめしたい

    a. 標準のSQLが使える i. テーブルの概念がほぼ RDBMSと同じ様に使える b. Googleのアカウントに紐づけて誰にどのデータを見せるかの管理ができる c. PB級のデータの格納/クエリ実行が可能 i. 価格もそれほど高くない • アクティブストレージ $0.023/GiB • クエリ(オンデマンド) $6/TiB(月額、年額固定プランも ) 18 BigQuery
  19. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online 本日おはなしすること 1. データ集計基盤とは

    2. Cloud Dataflowの利点 3. Apache Beam SDK with Python 19
  20. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online Cloud Dataflow •

    GCP(Google Cloud Platform)のサービスでバッチ処理及び、ストリームでのデー タ変換処理が可能。マネージドサービス(自力でのインフラ運用がいらない) • ETLツールと呼ばれることもある ◦ Extract、Transform、Loadの略で、数のシステムからデータを抽出し、抽出したデータを変換/加 工した上でデータウェアハウス等へ渡す処理、およびそれを支援するソフトウェアのこと 20 Cloud Dataflow
  21. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online Cloud Dataflow •

    GCP(Google Cloud Platform)のサービスでバッチ処理及び、ストリームでのデー タ変換処理が可能。マネージドサービス(自力でのインフラ運用がいらない) • ETLツールと呼ばれることもある ◦ Extract、Transform、Loadの略で、数のシステムからデータを抽出し、抽出したデータを変換/加 工した上でデータウェアハウス等へ渡す処理、およびそれを支援するソフトウェアのこと 21 Cloud Dataflow
  22. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online Cloud Dataflowという選択肢 •

    GCPの主要サービスと連携 • フルマネージドな実行環境で、 負荷状況に応じて自動スケールアウト (CPUを上手 に使ってくれる) ◦ 処理内でスループットが上がるとそれに応じて処理台数を増やせる • ログ出力が可能 ◦ 例外がでたときにログに出力してくれる ◦ 例外が起きたときにリトライ処理も可能 22
  23. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online Cloud Dataflowという選択肢 •

    サーバー台数の調整が削減できる • 運用コストの削減 ◦ 自前でHadoop/Sparkクラスタを運用する必要がなくなる ◦ ログ出力ストレージの運用コスト 23
  24. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online Cloud Dataflowのさらなる参考資料 The

    world beyond batch: Streaming 101 , 102 • Google の方が書いた、既存のバッチ処理から、ストリーミング処理に移行していくための解説記事。 • 101 は基本的な概念の話 • 102 はDataflowに踏み込んだ話 24
  25. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online Cloud Dataflowという選択肢 イメージ

    25
  26. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online Cloud Dataflowという選択肢 パイプライン処理になっていてどこで

    どれくらいのスループットが出ているか 確認可能 26
  27. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online 自動スケール 27

  28. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online Dataflowという選択肢 テンプレートが用意されていてプログラムなしでデータ変換可能 28

  29. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online Dataflowという選択肢 テンプレートが用意されていてプログラムなしでデータ変換可能 29

    Cloud Dataflow BigQuery Cloud Datastore
  30. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online Dataflowテンプレート 他にもたくさん用意されています。githubで公開されていてカスタマイズも可能です (Java).

    • Pub/Sub to BigQuery • JDBC to BigQuery • Cloud Storage Text to Pub/Sub • Datastore to Cloud Storage Text • Cloud Storage Text to Datastore • Bulk Compress Cloud Storage 30
  31. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online あれあれ?Pythonの話は??? 31

  32. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online 本日おはなしすること 1. データ集計基盤とは

    2. Cloud Dataflowの利点 3. Apache Beam SDK with Python 32
  33. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online データ変換あるある • テンプレートで用意されていないことがやりたくなる

    ◦ 例) Logのフォーマットが独自だったりとか • 〇〇(好きなサービス名を入れよう)に書き込みたいとか 33
  34. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online Apache Beam? 1.

    DataflowをGCP(Google cloud Platform)以外のプラットフォームでも扱うための SDK 2. GoogleのソースコードがOSSとして寄付され、Apache Beamプロジェクトとして開 発されている 3. ちなみにBeamとはBatch + Stream 4. 対応言語 a. Java b. Python c. Go(experimental) 34
  35. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online Apache Beam? 1.

    ながらくPython2でしかうごかなかった 2. でも2019/11についにPython3(3.5 ~3.7)対応 a. Python 3 and Python streaming now available 35
  36. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online Apach Beam/Pythonが対応している入出力 変換元

    • Apache HDFS • Google Cloud Storage • Google Cloud Pub/Sub 36
  37. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online Apach Beam/Pythonが対応している入出力 変換先

    • Google BigQuery • Google Cloud Datastore • Google Cloud Bigtable (Write) • MongoDB 37
  38. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online Apache Beam? 38

  39. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online インストール・実行 ローカルでの実行 $

    pip install apache-beam $ python -m apache_beam.examples.wordcount --input /path/to/inputfile --output /path/to/write/counts Cloud Dataflowでの実行 $ pip install apache-beam[gcp] $ python -m apache_beam.examples.wordcount --input gs://dataflow-samples/shakespeare/kinglear.txt \ --output gs://<your-gcs-bucket>/counts \ --runner DataflowRunner \ --project your-gcp-project \ --temp_location gs://<your-gcs-bucket>/tmp/ 39
  40. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online パイプライン処理の書き方 40

  41. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online Apache Beam ♥

    Logging 41 Logging moduleからStackDriver Loggingにログを出力できる # import Python logging module. import logging class ExtractWordsFn(beam.DoFn): def process(self, element): words = re.findall(r'[A-Za-z\']+', element) for word in words: yield word if word.lower() == 'love': # Log using the root logger at info or higher levels logging.info('Found : %s', word.lower())
  42. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online Apache Beamを扱う際に気をつけるべきこと 42

    • 思った以上に自動スケールアウトすることがある ◦ 最大ワーカー数の設定ができるのでこちらは必ず設定するべき ◦ または自動スケールアウトをオフにするなどの運用も考えたほうがいいかも • ロギング ◦ 大規模データでデバッグログを出し始めると簡単に 1TiB以上のログになることがあります。 ◦ 本番で使うときにはログの量も調整が必要です • リトライ ◦ リトライが増えすぎるとスループットが上がらず自動スケールアウトがおきないこともあります。 ◦ 例外等はきちんとキャッチして自分でログを出すようにするべきです。
  43. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online 気をつけるべきこと 43 •

    Java のSDKのほうが開発が活発 ◦ 特にGoogleサービス以外への接続 , Amazon S3などのAmazon系のサービスや、AMQP, Kafka、 データベース接続などをためしたい場合はまずは Java SDKを試すのもおすすめです ◦ Built-in I/O Transforms
  44. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online 個人的な意見 • データ変換処理を自分で書くのは難しくない

    • データ変換処理は増えがち、できるならテンプレートを使うべき • どうしてもかかなくてはならないなら、ある程度フレームワーク化するなど型にはめ ていったほうが後々メンテナンスしやすい • 自分で作るのもありです(楽しいですしね!) • まずはすでにある良いものを使う、そこから漏れる部分を自分たちで構築していく のはありだと思います 44
  45. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online 本日おはなししたこと 1. データ集計基盤とは

    2. Cloud Dataflowの利点 3. PythonでApache Beam SDK 45
  46. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online 参考 1. なぜ

    Apache Beam なのか : Dataflow のライバル参入を促す理由 2. Google Cloud Dataflow 3. Apache Beam 4. データ集計基盤のいままでとこれから 〜Hadoopからdataflowまで使い込んだ経験を徹底共有〜 5. データ基盤とは?種類と用途、データパイプラインとワークフロー管理 | AIdrops 6. Google Cloud Dataflow ってなんだ? 7. 株式会社MonotaRO の導入事例:BigQuery を駆使した新しいデータ分析基盤構築で、全社的にさらな るデータ活用を推進 8. monotaro_devsumi2020winter 46
  47. DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online まとめ 1. データ分析を行うときに大規模データをスムーズに処理するこ

    とが大事 2. できれば手がかからないようにしていくことも大事 3. GCP(特にBigQuery)をデータ基盤に使う場合にはCloud Dataflowの活用をおすすめしたい 47