dataflow(python)を触った所感

20
GCP Dataflow (Python) を触った所感 (株)エーピーコミュニケーションズ 山岡 亮 2017/11/28

Upload: ryo-yamaoka

Post on 22-Jan-2018

412 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Dataflow(python)を触った所感

GCP Dataflow (Python) を触った所感

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

2017/11/28

Page 2: Dataflow(python)を触った所感

自己紹介

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

• (株)エーピーコミュニケーションズ

• 新規自社サービス立ち上げ部隊に所属(5人)

• Webアプリのバックエンド、自動化周りを担当中

• 前職は新潟県の温泉旅館で経理事務担当

Qiitahttps://qiita.com/ryo-yamaoka

Twitterhttps://twitter.com/mountainhill14

Page 3: Dataflow(python)を触った所感

背景

• ここ最近はWebサービスの開発を担当しています

• AppEngine SE + Golang

• まだ未発表のプロダクトなのですが、今後ユーザー数が増えた場合にアクセスログの分析等でサービスの改善や収益化に役立てて行こうという野望を抱いています

• その処理基盤の候補としてDataflowを触ってみましたので、内容と所感についてお話します

Page 4: Dataflow(python)を触った所感

やってみたこと

• WordCount

•巨大なリストを生成して大量の乱数生成結果をカウント

• Datastoreに格納されている大量のデータをJanomeで形態素解析してJSONに変換しGCSに結果を出力する

Page 5: Dataflow(python)を触った所感

WordCount

•言わずと知れた分散処理界隈のHello, World

Page 6: Dataflow(python)を触った所感

朝飯前

Page 7: Dataflow(python)を触った所感

乱数カウント

• 10億行の配列を生成してrandom.choice()の結果を格納しカウントする

Page 8: Dataflow(python)を触った所感

昼飯前

Page 9: Dataflow(python)を触った所感

躓いたところ、解決法、活用方法

• いきなり beam.Create([0] * 1000000000) とやってOOMで死亡(そりゃそうだ)

• FlatMapで1000倍ずつ増やすことを2回繰り返して回避

Page 10: Dataflow(python)を触った所感

躓いたところ、解決法、活用方法

• いきなり beam.Create([0] * 1000000000) とやってOOMで死亡(そりゃそうだ)

• FlatMapで1000倍ずつ増やすことを2回繰り返して回避

• お昼ご飯のメニューに迷った場合のソリューションとして使える

• 蒙古タンメン中●にするか、それともラーメン●郎にするか

Page 11: Dataflow(python)を触った所感

大量のデータを形態素解析

• Datastoreに格納されているデータをJanomeで形態素解析してGCSに結果を出力する

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

• それを結合して単語毎に区切ったJSONに変換

• n1-highcpu-4指定で約1時間かかった(ピーク時10台までオートスケールした)

URL タイトル 概要 日時

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

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

Page 12: Dataflow(python)を触った所感

夕飯前

Page 13: Dataflow(python)を触った所感

躓いたところ、解決法

• ある程度までオートスケーリングが大きくなると起動失敗を繰り返す事象が発生

• グローバルアドレスとCPUコア数がソフトリミットに引っかかっていた

• 申請直後に拡大されたので一定数以下は恐らく自動対応

• requirements.txtを使った環境構築に失敗する

• pkg-resources==0.0.0 が無いというエラーが発生

• その原因は……

Page 14: Dataflow(python)を触った所感

Ubuntuのバグでした

https://github.com/twitter/twemoji

Page 15: Dataflow(python)を触った所感

バグでした

• Ubuntu16.04が変なメタデータを渡してくるのが原因

• https://github.com/pypa/pip/issues/4022

pip freeze includes "pkg-resources==0.0.0" (Ubuntu Server 16.04 LTS)

• pip freeze > requirements.txt で出力したら

pkg-resources==0.0.0

の行を削除して再度実行すれば無事に動きます

Page 16: Dataflow(python)を触った所感

Apache Beamの所感

• ここが良い

• 初学者でも手軽に分散処理を書ける

• 後から知りましたがPySparkに類似な雰囲気のコードです

• 開発が活発(GitHubの通知は切った方がいいです)

• ここがイマイチ

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

• Streamingを始め未対応機能がチラホラ……

• 特に是非Python3系へ対応を……(切実

Page 17: Dataflow(python)を触った所感

GCP Dataflowの所感

• ここが良い

• Dataprocより尚手軽に使える分散処理基盤で揺り籠から墓場までVMの運用管理を全く気にする必要が無く非常に楽

• ここがイマイチ

• Dataflowを使ったフローをどう組むか?

• AppEngineからKick……?

• Apache Airflow!

• PreemptibleVMに非対応なのでお金が嵩みやすい

Page 18: Dataflow(python)を触った所感

一番ハマったところ

Page 19: Dataflow(python)を触った所感

公式日本語ドky(以下略

Page 20: Dataflow(python)を触った所感

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