Weitere ähnliche Inhalte
Ähnlich wie No-Ops で大量データ処理基盤を簡単に実現する (20)
No-Ops で大量データ処理基盤を簡単に実現する
- 1. 福田 潔
Google Cloud Platform カスタマーエンジニア
Google Cloud
No-Ops で大量データ処理基盤を
簡単に実現する
BigQuery と Cloud Dataflow で実現する次世代データ処理基盤
- 15. 2016
Google
Research
20082002 2004 2006 2010 2012 2014 2015
Open
Source
2005
Google
Cloud
Products BigQuery Pub/Sub Dataflow Bigtable ML
GFS
Map
Reduce
BigTable Dremel
Flume
Java Millwheel Tensorflow
Apache Beam
PubSub
15年以上、データの問題に向き合ってきた
- 18. リファレンスアーキテクチャ : データを収集する
Cloud Pub/Sub
At Leaast One の信頼性を持つ、スケーラブルなNo-Opsグローバル分散
メッセージ・キュー
Cloud Storage
オブジェクトストレージ。外部システムが出力するファイルの
GCPへのエントリーポイントとなる
生ログ、ファイル、外
部システムからのア
ウトプット 等
イベント、
メトリック等
Stackdriver Logging
GCP および AWS(EC2) からログイベントを収集
APIを介して任意のアプリケーションログも収集
GCPのシステムロ
グ、アプリケーション
ログ 等
Transfer Service
- 30. 継続的な改善
2010 2011 2012 2013 2014
公開
大規模なクエリ結果
2015 2016
900
300
0
1,200
Google I/O でベータリリース
Dremel X
Big JOIN サポート
ダイナミック
エグゼキューション
Capacitor
シャッフル高速化
100k qps のストリーミン
グ
ユーザー定義関数
100k qps の
ストリーミング
Code Submits
- 34. 20122002 2004 2006 2008 2010
MapReduce
GFS Big Table
Dremel
Pregel
FlumeJava
Colossus
Spanner
2014
MillWheel
Dataflow
2016
Dataflow は新しいデフォルト
- 35. Dataflow モデル および Cloud Dataflow
Dataflow Model & SDKs
バッチおよびストリーム処理の
統合プログラムモデル
no-ops, フルマネージドサービス
(実行環境)
Google Cloud Dataflow
Apache
Beam
- 36. {a->[apple, art, argentina], ar->[art, argentina, armenia],...}
Count
ExpandPrefixes
Top(3)
Write
Read
ExtractTags
{a->(argentina, 5M), a->(armenia, 2M), …,
ar->(argentina, 5M), ar->(armenia, 2M), ...}
{#argentina scores!, watching #armenia vs
#argentina, my #art project, …}
{argentina, armenia, argentina, art, ...}
{argentina->5M, armenia->2M, art->90M, ...}
Tweets
Predictions
- 37. Count
ExpandPrefixes
Top(3)
Write
Read
ExtractTags
Tweets
Predictions
Pipeline p = Pipeline.create(new PipelineOptions());
p
p.run();
.apply(ParDo.of(new ExtractTags()))
.apply(Top.largestPerKey(3))
.apply(Count.perElement())
.apply(ParDo.of(new ExpandPrefixes())
.apply(TextIO.Write.to(“gs://…”));
.apply(TextIO.Read.from(“gs://…”))
class ExpandPrefixes … {
public void processElement(ProcessContext c) {
String word = c.element().getKey();
for (int i = 1; i <= word.length(); i++) {
String prefix = word.substring(0, i);
c.output(KV.of(prefix, c.element()));
}
}
}
- 50. 参考
● BigQuery
○ https://cloud.google.com/bigquery/
● Dataflow
○ https://cloud.google.com/dataflow/
● Google Big Data Blog
○ https://cloud.google.com/blog/big-data/
● NYC Taxi Tycoon Codelab
○ https://goo.gl/4g5eep
● Architecture: Optimized Large-Scale Analytics Ingestion
○ https://cloud.google.com/solutions/architecture/optimized-large-scale-a
nalytics-ingestion