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