dataflow(python)を触った所感
TRANSCRIPT
GCP Dataflow (Python) を触った所感
(株)エーピーコミュニケーションズ 山岡亮
2017/11/28
自己紹介
• 山岡 亮(やまおか りょう)
• (株)エーピーコミュニケーションズ
• 新規自社サービス立ち上げ部隊に所属(5人)
• Webアプリのバックエンド、自動化周りを担当中
• 前職は新潟県の温泉旅館で経理事務担当
Qiitahttps://qiita.com/ryo-yamaoka
Twitterhttps://twitter.com/mountainhill14
背景
• ここ最近はWebサービスの開発を担当しています
• AppEngine SE + Golang
• まだ未発表のプロダクトなのですが、今後ユーザー数が増えた場合にアクセスログの分析等でサービスの改善や収益化に役立てて行こうという野望を抱いています
• その処理基盤の候補としてDataflowを触ってみましたので、内容と所感についてお話します
やってみたこと
• WordCount
•巨大なリストを生成して大量の乱数生成結果をカウント
• Datastoreに格納されている大量のデータをJanomeで形態素解析してJSONに変換しGCSに結果を出力する
WordCount
•言わずと知れた分散処理界隈のHello, World
朝飯前
乱数カウント
• 10億行の配列を生成してrandom.choice()の結果を格納しカウントする
昼飯前
躓いたところ、解決法、活用方法
• いきなり beam.Create([0] * 1000000000) とやってOOMで死亡(そりゃそうだ)
• FlatMapで1000倍ずつ増やすことを2回繰り返して回避
躓いたところ、解決法、活用方法
• いきなり beam.Create([0] * 1000000000) とやってOOMで死亡(そりゃそうだ)
• FlatMapで1000倍ずつ増やすことを2回繰り返して回避
• お昼ご飯のメニューに迷った場合のソリューションとして使える
• 蒙古タンメン中●にするか、それともラーメン●郎にするか
大量のデータを形態素解析
• 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": ["本日", "は", "晴天", "なり", "この", "記事", "は", "云々"]}
夕飯前
躓いたところ、解決法
• ある程度までオートスケーリングが大きくなると起動失敗を繰り返す事象が発生
• グローバルアドレスとCPUコア数がソフトリミットに引っかかっていた
• 申請直後に拡大されたので一定数以下は恐らく自動対応
• requirements.txtを使った環境構築に失敗する
• pkg-resources==0.0.0 が無いというエラーが発生
• その原因は……
Ubuntuのバグでした
https://github.com/twitter/twemoji
バグでした
• 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
の行を削除して再度実行すれば無事に動きます
Apache Beamの所感
• ここが良い
• 初学者でも手軽に分散処理を書ける
• 後から知りましたがPySparkに類似な雰囲気のコードです
• 開発が活発(GitHubの通知は切った方がいいです)
• ここがイマイチ
• Python対応がまだちょっと弱いので今後に期待
• Streamingを始め未対応機能がチラホラ……
• 特に是非Python3系へ対応を……(切実
GCP Dataflowの所感
• ここが良い
• Dataprocより尚手軽に使える分散処理基盤で揺り籠から墓場までVMの運用管理を全く気にする必要が無く非常に楽
• ここがイマイチ
• Dataflowを使ったフローをどう組むか?
• AppEngineからKick……?
• Apache Airflow!
• PreemptibleVMに非対応なのでお金が嵩みやすい
一番ハマったところ
公式日本語ドky(以下略
ご清聴ありがとうございました