Upload
ryo-yamaoka
View
788
Download
2
Embed Size (px)
Citation preview
Apache Beam と GCP Dataflowの紹介
(株)エーピーコミュニケーションズ 山岡亮
2017/10/20
自己紹介
• 山岡 亮(やまおか りょう)
• 2013年エーピーコミュニケーションズ入社
• 顧客システム開発(主にベンダーコントロール)を担当
• 2016年より自社サービスの開発を担当
Qiitahttps://qiita.com/ryo-yamaoka
Twitterhttps://twitter.com/mountainhill14
始めに
• 近年、データサイエンスや機械学習の需要拡大によりビッグデータの処理需要は増える一方です。
• そのためには一般に大規模なインフラ調達が必要ですが、クラウドサービスを上手く使えば個人であってもそう難しくない時代になりました。
• 今日は書きやすい Apache Beam with Python での実装をGCP上で試してみた結果を紹介しますので、選定時の参考にして頂ければと思います。
質問
•ビッグデータ処理をやったことありますか?
•GCPを使ったことありますか?
目次
• Apache Beam
• GCP Dataflow
• デモ
• まとめ
• Apache Beam
• GCP Dataflow
• デモ
• まとめ
Apache Beamとは?
• 分散処理を定義するためのプログラミングモデル
• Beam …… Batch + Stream (カバン語)
• バッチ・ストリーム両対応
• 対応言語(現状)
• Java, Python(2系)
• 異なるエンジン上でもコードの変更が不要
• Dataflow, Spark, 他3つ
• ポータビリティは高いが、プロダクト固有のライブラリーは使えなくなる
https://beam.apache.org/
歴史・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扱い
Google Trends
爆発的というわけではないが、着実に浸透している
エンジン側の対応状況(2017/10/20現在)
言語 Dataflow Spark Apex Flink Gearpump
Java ○ ○ ○ ○ ○
Python ○ × × × ×
エンジン側の対応状況(2017/10/20現在)
言語 Dataflow Spark Apex Flink Gearpump
Java ○ ○ ○ ○ ○
Python ○ × × × ×
https://github.com/twitter/twemoji
Pythonが色々辛いですが、今後に期待しています
Beamの概念・コードの書き方
概念その1 PCollection
• データの集合体
• データサイズの表現として有限なもの、無限なものがある
• 有限(Bounded)……入力に終わりがあるもの、つまりバッチ処理
• 無限(Unbounded)……入力に終わりが無いもの、つまりストリーミング処理
• これに対して処理(変換)を適用していくイメージ
概念その2 PTransform
• PCollectionに適用する処理(変換)のこと
• PTransform同士は完全に独立した並列処理で、通信を行ったり同期を取ったり等はできない
• 入力や出力の処理もこれに含まれる
概念その3と4 Pipeline, Runner
• Pipeline
• PCollectionとPTransformをセットにした一連のフロー
• Runner
• Pipelineの実行エンジンのこと
• Dataflow, Spark等々……
• ローカル環境も含まれる
https://beam.apache.org/get-started/wordcount-example/
※WordCount(バッチ処理)の例
コードの書き方(Python, WordCountの例)
コードの書き方(Python, WordCountの例)
まずはパイプラインを定義(空のPCollectionが返却される)
コードの書き方(Python, WordCountの例)
GCSに配置したテキストをインポートするPTransformを適用する
コードの書き方(Python, WordCountの例)
正規表現で単語単位に分割する
コードの書き方(Python, WordCountの例)
単語ごとの数を集計する
コードの書き方(Python, WordCountの例)
人間が見やすい形に整える
コードの書き方(Python, WordCountの例)
GCSに出力する
Apache Beam のまとめ
•Google主導のOSS
•分散処理フレームワーク
•マルチプラットフォーム対応
目次
• Apache Beam
• GCP Dataflow
• デモ
• まとめ
GCP Dataflowとは?
• GCP提供のフルマネージドな分散処理基盤
• バッチ、ストリーミング両方に対応可能
• オートスケール対応
• ライブラリーの持ち込みが可能
• 起動すると裏でGCEのグループが立ち上がる
• AppEngineからバッチをKickできる
• 定時バッチはAppEngineのcronと組み合わせてどうぞ
他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
形態素解析
大規模データ変換
ストリーミング処理
Dataprocとの違い
言語 フレームワークPreemptible
VMAutoScaling 自動チューニング 自由度
DataprocHadoop,Spark
○ × × 高
Dataflow Beam × ○ ○ 低
・DataprocはHive等いわゆるHadoopファミリー系の対応が結構厚い・Preemptible……24時間以内に必ずシャットダウンされてしまう代わりに安いインスタンス(8割引きくらい、GCPの余りリソースを格安で使わせて貰っている)・最初から使い捨てる前提のバッチ処理では大きく費用削減できるのに使えないのは痛い・自動チューニングは処理の内容を解析して自動的にアウト・オブ・オーダー実行をしてくれる・Dataprocは各ファミリーのプロパティを細かく設定可能・総括すると、Dataprocは設定の自由度と既存資産活用、Dataflowはお任せ後ヨロ系
GCP Dataflow のまとめ
• フルマネージド分散処理基盤
• Beam利用が前提
•スケーリング、最適化が自動的
目次
• Apache Beam
• GCP 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": ["本日", "は", "晴天", "なり", "この", "記事", "は", "云々"]}
目次
• Apache Beam
• GCP Dataflow
• デモ
• まとめ
まとめ
• Apache Beam
• 同じコードで様々な分散処理基盤を利用できる
• が、Python対応はまだちょっと弱いので今後に期待
• GCP Dataflow
• とても簡単に扱えるスケーラブルな分散処理基盤
• Apache Beamの利用が前提
所感
• 簡易なコード(環境構築等含め)、運用不要、スケーラブルな処理基盤で分散処理を記述することができてとても楽だった。
• 私個人としてはBeamのPython3系対応と、DataflowのPreemptible VM対応を心待ちにしています。これが実現すると爆発的に広まる(……はず)
最後に1つだけ注意喚起
• Beam, Dataflowの情報はググると日本語の情報がいくつかでてきますが、高確率で情報が古いです。
• 特にGCP公式ドキュメントの日本語版はBeam移行前の旧SDKについて記載された情報ばかりで全くアテになりません。
• なので原文(英語)を調べるか、せめてつい最近書かれたブログ等を当たるようにしましょう
例:Pythonはオートスケール非対応 → 対応済みです
ご清聴ありがとうございました