Google が描く、MapReduce を
超えたビッグデータの世界
+Kazunori Sato
@kazunori_279
佐藤 一憲
デベロッパー アドボケイト
Cloud Platform, Google Inc.
クラウド コミュニティ支援
クラウド製品ローンチ支援
Dremel
MapReduce
2012 20132002 2004 2006 2008 2010
GFS
MillWheelFlume
Cloud Dataflow
MapReduceを超えた世界
BigQuery
Google BigQuery
Dremel
MapReduce
2012 20132002 2004 2006 2008 2010
GFS
MillWheelFlume
Google BigQuery
BigQuery
BigQuery: 超並列クエリ サービス
Googleでは簡単な
データ解析にMapReduce
は使いません
使うのはDremel
= Google BigQuery
SELECT
top(appId, 20) AS app,
count(*) AS count
FROM installlog.2012
ORDER BY
count DESC
20秒で1000億行をスキャン可能
インデックスは不使用
BigQueryのデモ
例: 1000億行に対するRegEx + GROUP BY
SELECT language, SUM(views) as views
FROM (
SELECT title, language, MAX(views) as views
FROM [helixdata2:benchmark.Wiki100B]
WHERE REGEXP_MATCH(title, "G.*o.*")
GROUP EACH BY title, language
)
GROUP EACH BY language
ORDER BY views desc
実行時間: ~30秒*
● 4 TBのデータを読み込み
● 1000億の正規表現を実行
● 278 GBをシャッフル
1台のサーバーだと (推定数値):
● ディスクから4 TBを読み込むのに11.6時間
● 1000億の正規表現を実行するのに27時間
● 278 GBをシャッフルするのに37分
例: 1000億行に対するRegEx + GROUP BY
*これらの数字は特定のケースにおけるGoogle BigQuery の性能の一例であり、性能を保証するものでは
ありません。
カラム指向ストレージ
レコード指向ストレージ カラム指向ストレージ
低帯域、高圧縮
超並列処理
select top(title), count(*)
from publicdata:samples.wikipedia
1 TBを1秒でスキャンするには
5,000台のディスクが必要
個々のクエリを数千のサーバー上で実行
ミキサー0
ミキサー1 ミキサー1
シャード シャード シャード シャード
ColumnIO on Colossus SELECT state, year
COUNT(*)
GROUP BY state
WHERE year >= 1980 and year < 1990
ORDER BY count_babies DESC
LIMIT 10
COUNT(*)
GROUP BY state
ツリー構造による高速アグリゲーション
BigQuery Analytic Service in the Cloud
BigQuery
Google
アナリティクス
解析 エクスポートインポート
インポート、解析、エクスポート
ETLツール
コネクター
BIツールと可視化
Googleクラウド Googleクラウド
スプレッドシート、R、
Hadoop
驚くほど高速
20秒で1000億行のスキャンが可能
SQL
シンプルかつ直感的なSQL
低コスト
ストレージ: 1カ月 $0.020/GB
クエリ: $5/TB
フルマネージド
運用コストなしで数千のサーバーを利用
BigQueryのメリット
Google Cloud Dataflow
Dremel
MapReduce
2012 20132002 2004 2006 2008 2010
GFS
MillWheelFlume
Cloud Dataflow
Cloud Dataflow
BigQuery
2014年6月24日: Google I/Oで発表
2014年12月17日: アルファ
2015年4月15日: ベータ
次のマイルストーン: 一般向け提供開始
Cloud Dataflowのリリーススケジュール
ETL
フィルタリング
エンリッチメント
シェーピング
バッチ
ストリーム処理
コンポジション
オーケストレーション
Cloud Dataflowの用途
Google Cloud Platform
におけるCloud Dataflow
ストリーム
バッチ
Cloud
Pub/Sub
Cloud
Logging
Cloud
Dataflow
BigQuery
Cloud
Storage
Cloud
Dataflow
Bigtable
Google
Cloud
Storage
関数型プログラミング モデル
バッチ処理とストリーム処理を統一
オープンソースのSDK
フルマネージドの実行環境を提供
Cloud Dataflowの特長
Cloud Dataflow SDK for Java and Python
Cloud Dataflowのコンセプト
Pipelineはデータの流れを表す有向非循
環グラフ (DAG) :
MapReduce/Hadoopジョブ
Apache Sparkジョブ
複数の入力と出力
Google Cloud Storage
Google BigQuery tables
Google Pub/Sub
Google Cloud Bigtable
… およびあらゆる外部システム
Pipeline
Pipeline内のデータの集まり
任意のサイズのデータを扱える
BoundedとUnbounded (Stream)
Key-Valueペアも扱える
{Seahawks, NFC,
Champions,
Seattle, ...}
{KV<S, {Seahawks, Seattle, …},
KV<N, {NFC, …}
KV<C, {Champion, …}}
PCollection
Transforms
M M M
R R
GroupByKey
ParDo
Combine.GroupedValues
オートコンプリートの例
ツイート
予測
読み
込み
#argentina scores, my #art project,
watching #armenia vs #argentina
タグの抽出 #argentina #art #armenia #argentina
カウント (argentina, 5M) (art, 9M) (armenia, 2M)
プレフィクス対応
a->(argentina,5M) ar->(argentina,5M)
arg->(argentina,5M) ar->(art, 9M) ...
上位3件抽出
書き
出し
a->[apple, art, argentina]
ar->[art, argentina, armenia]
.apply(TextIO.Read.from(...))
.apply(ParDo.of(new ExtractTags()))
.apply(Count.create())
.apply(ParDo.of(new ExpandPrefixes())
.apply(Top.largestPerKey(3)
Pipeline p = Pipeline.create();
p.begin();
.apply(TextIO.Write.to(...));
p.run()
時間
#ar*
順位
試合開始 アルメニアの
勝利!
#argyle
#armeniarocks
古いデータをエージアウト
#argentinagoal
バッチ処理からストリーム処理へ
Cloud PubSubでストリーム処理
Pipeline p = Pipeline.create(new PipelineOptions());
p.begin()
.apply(PubsubIO.Read.topic(“input_topic”))
.apply(Window.into(SlidingWindows.of(
Duration.standardMinutes(60)))
.apply(ParDo.of(new ExtractTags()))
.apply(Count.perElement())
.apply(ParDo.of(new ExpandPrefixes())
.apply(Top.largestPerKey(3))
.apply(PubsubIO.Write.topic(“output_topic”));
p.run();
Windowとは:
Pcollectionのタイムスライス
Fixed: 毎時間、毎日…
Sliding: 最後の1分...
Session: 各セッション
夜間 日中 夜間
Window
Cloud Dataflow:
フルマネージドの実行環境
Google Cloud Dataflow
最適化
スケジューリ
ング
GCS GCS
ユーザーコード & SDK モニタリング UI
パイプラインの
流れ
実行グラフ
IN1
IN2
IN3
IN4
join
OUT1
OUT2
C
A
Dflatten
F
B
= ParallelDo
count E
最適化された実行グラフ
IN1
IN2
IN3
IN4
OUT1
OUT2
GBK
= ParallelDo
GBK = GroupByKey
+ = CombineValues
J2
+F+
Cnt GBK +
C+D+J1
B+D+J1
A+J1
E+J1
リアルタイム監視用UI
800 RPS 1,200 RPS 5,000 RPS 50 RPS
ワーカーのスケーリング
フルマネージド
何百というノードに対して運用コストゼロ
スケーラビリティ、フォールトトレランス、最適化
バッチ + ストリーム処理
単一論理で2つのパラダイムを統合
容易なパイプライン設計
Java/Pythonを使用してパイプラインを定義
Cloud Dataflowのメリット
時間の最適化
プログラミング
データを掘り下げる
時間の拡大
Cloud Dataflow を活用するデータ処理通常のデータ処理
プログラミング
リソース
プロビジョニング
拡大する規模
への対応
信頼性
デプロイメント/設
定
活用の改善
パフォーマンスの
微調整
監視
cloud.google.com/bigquery
cloud.google.com/dataflow
始めてみよう
ありがとうございました

6 月 18 日 Next - Google が描く、MapReduce を超えたビッグデータの世界