37
Apache Beam GCP Dataflow の紹介 (株)エーピーコミュニケーションズ 山岡 亮 2017/10/20

Apache beamとdataflow紹介

Embed Size (px)

Citation preview

Page 1: Apache beamとdataflow紹介

Apache Beam と GCP Dataflowの紹介

(株)エーピーコミュニケーションズ 山岡亮

2017/10/20

Page 2: Apache beamとdataflow紹介

自己紹介

• 山岡 亮(やまおか りょう)

• 2013年エーピーコミュニケーションズ入社

• 顧客システム開発(主にベンダーコントロール)を担当

• 2016年より自社サービスの開発を担当

Qiitahttps://qiita.com/ryo-yamaoka

Twitterhttps://twitter.com/mountainhill14

Page 3: Apache beamとdataflow紹介

始めに

• 近年、データサイエンスや機械学習の需要拡大によりビッグデータの処理需要は増える一方です。

• そのためには一般に大規模なインフラ調達が必要ですが、クラウドサービスを上手く使えば個人であってもそう難しくない時代になりました。

• 今日は書きやすい Apache Beam with Python での実装をGCP上で試してみた結果を紹介しますので、選定時の参考にして頂ければと思います。

Page 4: Apache beamとdataflow紹介

質問

Page 5: Apache beamとdataflow紹介

•ビッグデータ処理をやったことありますか?

•GCPを使ったことありますか?

Page 6: Apache beamとdataflow紹介

目次

• Apache Beam

• GCP Dataflow

• デモ

• まとめ

Page 7: Apache beamとdataflow紹介

• Apache Beam

• GCP Dataflow

• デモ

• まとめ

Page 8: Apache beamとdataflow紹介

Apache Beamとは?

• 分散処理を定義するためのプログラミングモデル

• Beam …… Batch + Stream (カバン語)

• バッチ・ストリーム両対応

• 対応言語(現状)

• Java, Python(2系)

• 異なるエンジン上でもコードの変更が不要

• Dataflow, Spark, 他3つ

• ポータビリティは高いが、プロダクト固有のライブラリーは使えなくなる

https://beam.apache.org/

Page 9: Apache beamとdataflow紹介

歴史・Dataflowとの関係

• DataflowはBeamを使うことが前提になっている

• 2016年にGoogleがDataflow向けのSDKをASFに寄贈したのがBeamの発端

https://en.wikipedia.org/wiki/Apache_Beam

・2017年1月にIncubator -> TLP・2017年5月の2.0.0からStable扱い

Page 10: Apache beamとdataflow紹介

Google Trends

爆発的というわけではないが、着実に浸透している

Page 11: Apache beamとdataflow紹介

エンジン側の対応状況(2017/10/20現在)

言語 Dataflow Spark Apex Flink Gearpump

Java ○ ○ ○ ○ ○

Python ○ × × × ×

Page 12: Apache beamとdataflow紹介

エンジン側の対応状況(2017/10/20現在)

言語 Dataflow Spark Apex Flink Gearpump

Java ○ ○ ○ ○ ○

Python ○ × × × ×

https://github.com/twitter/twemoji

Pythonが色々辛いですが、今後に期待しています

Page 13: Apache beamとdataflow紹介

Beamの概念・コードの書き方

Page 14: Apache beamとdataflow紹介

概念その1 PCollection

• データの集合体

• データサイズの表現として有限なもの、無限なものがある

• 有限(Bounded)……入力に終わりがあるもの、つまりバッチ処理

• 無限(Unbounded)……入力に終わりが無いもの、つまりストリーミング処理

• これに対して処理(変換)を適用していくイメージ

Page 15: Apache beamとdataflow紹介

概念その2 PTransform

• PCollectionに適用する処理(変換)のこと

• PTransform同士は完全に独立した並列処理で、通信を行ったり同期を取ったり等はできない

• 入力や出力の処理もこれに含まれる

Page 16: Apache beamとdataflow紹介

概念その3と4 Pipeline, Runner

• Pipeline

• PCollectionとPTransformをセットにした一連のフロー

• Runner

• Pipelineの実行エンジンのこと

• Dataflow, Spark等々……

• ローカル環境も含まれる

Page 17: Apache beamとdataflow紹介

https://beam.apache.org/get-started/wordcount-example/

※WordCount(バッチ処理)の例

Page 18: Apache beamとdataflow紹介

コードの書き方(Python, WordCountの例)

Page 19: Apache beamとdataflow紹介

コードの書き方(Python, WordCountの例)

まずはパイプラインを定義(空のPCollectionが返却される)

Page 20: Apache beamとdataflow紹介

コードの書き方(Python, WordCountの例)

GCSに配置したテキストをインポートするPTransformを適用する

Page 21: Apache beamとdataflow紹介

コードの書き方(Python, WordCountの例)

正規表現で単語単位に分割する

Page 22: Apache beamとdataflow紹介

コードの書き方(Python, WordCountの例)

単語ごとの数を集計する

Page 23: Apache beamとdataflow紹介

コードの書き方(Python, WordCountの例)

人間が見やすい形に整える

Page 24: Apache beamとdataflow紹介

コードの書き方(Python, WordCountの例)

GCSに出力する

Page 25: Apache beamとdataflow紹介

Apache Beam のまとめ

•Google主導のOSS

•分散処理フレームワーク

•マルチプラットフォーム対応

Page 26: Apache beamとdataflow紹介

目次

• Apache Beam

• GCP Dataflow

• デモ

• まとめ

Page 27: Apache beamとdataflow紹介

GCP Dataflowとは?

• GCP提供のフルマネージドな分散処理基盤

• バッチ、ストリーミング両方に対応可能

• オートスケール対応

• ライブラリーの持ち込みが可能

• 起動すると裏でGCEのグループが立ち上がる

• AppEngineからバッチをKickできる

• 定時バッチはAppEngineのcronと組み合わせてどうぞ

Page 28: Apache beamとdataflow紹介

他GCPサービスとの連携

• メジャーなサービスとはほぼ全て連携できると思ってOK

• BeamライブラリのAPIという形でアクセス可

Cloud

Storage

Cloud

Pub/Sub

Cloud

Datastore

BigQuery

Cloud

Storage

Cloud

Dataflow

Cloud

Dataflow

Cloud

Storage

Cloud

DataflowBigQuery

Cloud

DataflowBigQuery

WordCount

形態素解析

大規模データ変換

ストリーミング処理

Page 29: Apache beamとdataflow紹介

Dataprocとの違い

言語 フレームワークPreemptible

VMAutoScaling 自動チューニング 自由度

DataprocHadoop,Spark

○ × × 高

Dataflow Beam × ○ ○ 低

・DataprocはHive等いわゆるHadoopファミリー系の対応が結構厚い・Preemptible……24時間以内に必ずシャットダウンされてしまう代わりに安いインスタンス(8割引きくらい、GCPの余りリソースを格安で使わせて貰っている)・最初から使い捨てる前提のバッチ処理では大きく費用削減できるのに使えないのは痛い・自動チューニングは処理の内容を解析して自動的にアウト・オブ・オーダー実行をしてくれる・Dataprocは各ファミリーのプロパティを細かく設定可能・総括すると、Dataprocは設定の自由度と既存資産活用、Dataflowはお任せ後ヨロ系

Page 30: Apache beamとdataflow紹介

GCP Dataflow のまとめ

• フルマネージド分散処理基盤

• Beam利用が前提

•スケーリング、最適化が自動的

Page 31: Apache beamとdataflow紹介

目次

• Apache Beam

• GCP Dataflow

• デモ

• まとめ

Page 32: Apache beamとdataflow紹介

デモ

• WordCount

• Datastore(GCPのNoSQL DB)に格納されているデータを形態素解析してGCSに出力する(コードと結果のみ)

• RSSフィードから収集したタイトルと概要、約31万件レコード

• n1-highcpu-4で約1時間

• pip freezeの結果をテキストに保存し実行時のオプションで指定するとその環境を構築することができる

URL タイトル 概要 日時

http://www.kiji.jp/xxx.html 本日は晴天なり…… この記事は云々…… 1508310060

{"http://www.kiji.jp/xxx.html": ["本日", "は", "晴天", "なり", "この", "記事", "は", "云々"]}

Page 33: Apache beamとdataflow紹介

目次

• Apache Beam

• GCP Dataflow

• デモ

• まとめ

Page 34: Apache beamとdataflow紹介

まとめ

• Apache Beam

• 同じコードで様々な分散処理基盤を利用できる

• が、Python対応はまだちょっと弱いので今後に期待

• GCP Dataflow

• とても簡単に扱えるスケーラブルな分散処理基盤

• Apache Beamの利用が前提

Page 35: Apache beamとdataflow紹介

所感

• 簡易なコード(環境構築等含め)、運用不要、スケーラブルな処理基盤で分散処理を記述することができてとても楽だった。

• 私個人としてはBeamのPython3系対応と、DataflowのPreemptible VM対応を心待ちにしています。これが実現すると爆発的に広まる(……はず)

Page 36: Apache beamとdataflow紹介

最後に1つだけ注意喚起

• Beam, Dataflowの情報はググると日本語の情報がいくつかでてきますが、高確率で情報が古いです。

• 特にGCP公式ドキュメントの日本語版はBeam移行前の旧SDKについて記載された情報ばかりで全くアテになりません。

• なので原文(英語)を調べるか、せめてつい最近書かれたブログ等を当たるようにしましょう

例:Pythonはオートスケール非対応 → 対応済みです

Page 37: Apache beamとdataflow紹介

ご清聴ありがとうございました