DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online
データ基盤(個人の意見)
● 導入を考える場合にBigQueryをまずはおすすめしたい
a. 標準のSQLが使える
i. テーブルの概念がほぼ RDBMSと同じ様に使える
b. Googleのアカウントに紐づけて誰にどのデータを見せるかの管理ができる
c. PB級のデータの格納/クエリ実行が可能
i. 価格もそれほど高くない
● アクティブストレージ $0.023/GiB
● クエリ(オンデマンド) $6/TiB(月額、年額固定プランも )
18
BigQuery
Slide 19
Slide 19 text
DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online
本日おはなしすること
1. データ集計基盤とは
2. Cloud Dataflowの利点
3. Apache Beam SDK with
Python
19
DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online
Dataflowテンプレート
他にもたくさん用意されています。githubで公開されていてカスタマイズも可能です
(Java).
● Pub/Sub to BigQuery
● JDBC to BigQuery
● Cloud Storage Text to Pub/Sub
● Datastore to Cloud Storage Text
● Cloud Storage Text to Datastore
● Bulk Compress Cloud Storage
30
Slide 31
Slide 31 text
DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online
あれあれ?Pythonの話は???
31
Slide 32
Slide 32 text
DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online
本日おはなしすること
1. データ集計基盤とは
2. Cloud Dataflowの利点
3. Apache Beam SDK with
Python
32
DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online
Apache Beam?
1. DataflowをGCP(Google cloud Platform)以外のプラットフォームでも扱うための
SDK
2. GoogleのソースコードがOSSとして寄付され、Apache Beamプロジェクトとして開
発されている
3. ちなみにBeamとはBatch + Stream
4. 対応言語
a. Java
b. Python
c. Go(experimental)
34
Slide 35
Slide 35 text
DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online
Apache Beam?
1. ながらくPython2でしかうごかなかった
2. でも2019/11についにPython3(3.5 ~3.7)対応
a. Python 3 and Python streaming now available
35
Slide 36
Slide 36 text
DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online
Apach Beam/Pythonが対応している入出力
変換元
● Apache HDFS
● Google Cloud Storage
● Google Cloud Pub/Sub
36
Slide 37
Slide 37 text
DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online
Apach Beam/Pythonが対応している入出力
変換先
● Google BigQuery
● Google Cloud Datastore
● Google Cloud Bigtable (Write)
● MongoDB
37
Slide 38
Slide 38 text
DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online
Apache Beam?
38
DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online
パイプライン処理の書き方
40
Slide 41
Slide 41 text
DataFlow + Pythonで大規模データ処理 PyCon mini Shizuoka 2020/02/29@Online
Apache Beam ♥ Logging
41
Logging moduleからStackDriver Loggingにログを出力できる
# import Python logging module.
import logging
class ExtractWordsFn(beam.DoFn):
def process(self, element):
words = re.findall(r'[A-Za-z\']+', element)
for word in words:
yield word
if word.lower() == 'love':
# Log using the root logger at info or higher levels
logging.info('Found : %s', word.lower())