Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online 自己紹介 { “name”:”Masato Nakamura”, “SNS”: { “Twitter”: “@masahito”, “Github”: “masahitojp” }, “Loves”: [ “Python”, “JS”, “Java/Scala”, “Coffee☕ ” ] } 3

Slide 4

Slide 4 text

DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online テーマ:「あなたの知らないPython」 今回はテーマとして データ基盤で使われるPython をお話させていただきます。 4

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online データ基盤 データ基盤 データソース ユーザー 11

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online データ基盤 Input Transform Input Input Output データ集計 ログ、 DataBase 成果物となるデータ 13

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online データ基盤 あるある ● マネージドサービス使いたい ○ なるべく自分で運用するポイントを減らしたい ● エラーをいい感じに出したい ○ 例外等でバッチが止まったときにどこで落ちたかわかるようにしたい ○ 突貫でつくるとサービスインまでに漏れがち 17

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online Cloud Dataflowという選択肢 ● サーバー台数の調整が削減できる ● 運用コストの削減 ○ 自前でHadoop/Sparkクラスタを運用する必要がなくなる ○ ログ出力ストレージの運用コスト 23

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online Cloud Dataflowという選択肢 イメージ 25

Slide 26

Slide 26 text

DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online Cloud Dataflowという選択肢 パイプライン処理になっていてどこで どれくらいのスループットが出ているか 確認可能 26

Slide 27

Slide 27 text

DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online 自動スケール 27

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online あれあれ?Pythonの話は??? 31

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online データ変換あるある ● テンプレートで用意されていないことがやりたくなる ○ 例) Logのフォーマットが独自だったりとか ● 〇〇(好きなサービス名を入れよう)に書き込みたいとか 33

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online Apach Beam/Pythonが対応している入出力 変換先 ● Google BigQuery ● Google Cloud Datastore ● Google Cloud Bigtable (Write) ● MongoDB 37

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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:///counts \ --runner DataflowRunner \ --project your-gcp-project \ --temp_location gs:///tmp/ 39

Slide 40

Slide 40 text

DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online パイプライン処理の書き方 40

Slide 41

Slide 41 text

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())

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

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