2019-06-10 weeklyまとめ
株式会社FiNC Technologiesを退職した
株式会社FiNC Technologiesを退職しますに予告を書きましたが、退職しました。
最後にぼくがかんがえたさいきょうのSparkアーキテクチャが無事出来たので、とりあえず満足いく終わりになりました。
Sparkと戯れていた
先週に引き続き、AWS Glueを使ってPySparkで開発をしてました。
様々なテーブルをjoinし、ユーザごとにデータを集計して /user_id/output_name
といったパスに一人づつJSONファイルに出力していましたが、これが遅くなった原因でした。
ユーザを何人かのパーティションにまとめ、 /output_name/partition_key
といった複数人をまとめて1つのJSONファイルに出力したところ、数時間かかってた出力処理が数分で終わるようになりました。
書き出し対象はS3なので、ネットワーク越しのI/Oが想像以上にめちゃくちゃ重かったのが原因でした。
Sparkで処理してRailsアプリケーションから読む都合で、数時間かけてユーザ一人づつのcsvを書き出してたけど、複数人まとめて書き出ししたら数分で終わった…ここまでI/O処理が重いとは… (s3に大量のファイルを作るので確かに…といったところ)
— おおた@RubyKaigi登壇done (@ota42y) 2019年6月8日
この書き出したデータはさらにRailsアプリケーション側で読み込んで使うため、ユーザごとにファイルが別れている方がかなり楽で、それもあって複数ファイルに分割する方針をとっていたのですが、 複雑性を寄せる場所を間違えましたね… とはいえ、Sparkになれた今なら簡単に受け取り処理側を書き換えられたので、結果的には最高の状態に仕上がりました。 ただ、最終的なSparkの処理をexplainすると80行ぐらいになるんですが、はたして他にメンテできる人がいるのか…(PySparkのコードはそこそこきれいなはず)
この問題はSpark UIを見ると一瞬でわかるんですが、GlueだとSpark UIを見るのにかなり苦戦したのであとでまとめようと思います。 AWS Glueだとメトリクスは見れるんですが、各stageの処理内容とかは見られないので…
Repro Tech: 実践・並列分散処理基盤に参加した
https://repro-tech.connpass.com/event/131612/
ちょうどまさにSparkをやっている時にドンピシャの話題があったので⊂(・8・)⊃
実際Sparkだとこれが普通なのかな?と思っていたところに、全然もっと行けそうな話をきいたので調査し直したところ上の結果になったので、間接的にかなり効果がありました( ゚∀゚)o彡゜
ポッドキャストに出ます
きのこるエフエムというポッドキャストにお呼ばれしたので出ます( ゚∀゚)o彡゚
ポッドキャストに出ます⊂(・8・)⊃ https://t.co/snTzNX4bhn
— おおた@RubyKaigi登壇done (@ota42y) 2019年6月9日