Google Cloud Dataflowを理解する

Google Cloud Dataflowを理解する

0cf0e64940658884ce5d88e10dfb2409?s=128

GoogleCloudPlatformJapan

April 24, 2015
Tweet

Transcript

  1. 6.

    2012 2013 2002 2004 2006 2008 2010 Cloud Dataflow Googleのビッグデータ処理の歴史

    Why Cloud Dataflow? MapReduce GFS Big Table Dremel Pregel Flume Colossus Spanner MillWheel
  2. 7.

    保存する 集める 分析する BigQuery Larger Hadoop Ecosystem Hadoop Spark (on

    GCE) Pub/Sub Logs App Engine BigQuery streaming 処理する Dataflow (stream and batch) Cloud Storage (objects) Cloud Datastore (NoSQL) Cloud SQL (mySQL) BigQuery Storage (structured) Hadoop Spark (on GCE) Google Cloud Platformによるビッグデータ処理
  3. 9.

    Cloud Dataflowは 並列化された データ処理パイプラインを作 るためのSDK群 What is Cloud Dataflow? Cloud

    Dataflowは 並列化された データ処理パイプラインを 実行するための マネージドサービス
  4. 10.

    What is Cloud Dataflow? • 移動 • フィルタ • 加工

    • 整形 • 集約 • バッチ処理 • ストリーム処理 • 組み合わせ • 外部連携 • シミュレーション Cloud Dataflowは何に使えるか?
  5. 12.

    Cloud Dataflowのリリース スケジュール What is Cloud Dataflow? • June 24,

    2014: Google I/Oで発表 • Dec. 17, 2014: Alpha版 • Apr. 15, 2015: Beta版 • 次は: 一般公開
  6. 15.

    {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
  7. 16.

    Count ExpandPrefixes Top(3) Write Read ExtractTags Tweets Predictions Pipeline p

    = Pipeline.create(new PipelineOptions()); p.begin() 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())); } } }
  8. 17.

    • 異なるRunnerを使い、同じコードをさまざまな方法で実行可能 • Direct Runner • ローカル環境でインメモリ実行できる • 開発やテストに最適 •

    Cloud Dataflow Service Runner • フルマネージドのDataflowサービス上で動作 • 複数のGCEインスタンス上で分散実行 • コミュニティによる実装 • Spark runner @ github.com/cloudera/spark-dataflow • Flink runner coming soon from dataArtisans Cloud Dataflow Runners
  9. 25.

    Pipeline p = Pipeline.create(new PipelineOptions()); p.begin() .apply(TextIO.Read.from(“gs://…”)) .apply(ParDo.of(new ExtractTags())) .apply(Count.perElement())

    .apply(ParDo.of(new ExpandPrefixes()) .apply(Top.largestPerKey(3)) .apply(TextIO.Write.to(“gs://…”)); p.run();
  10. 26.

    Pipeline p = Pipeline.create(new PipelineOptions()); p.begin() .apply(TextIO.Read.from(“gs://…”)) .apply(ParDo.of(new ExtractTags())) .apply(Count.perElement())

    .apply(ParDo.of(new ExpandPrefixes()) .apply(Top.largestPerKey(3)) .apply(TextIO.Write.to(“gs://…”)); p.run();
  11. 27.

    Pipeline p = Pipeline.create(new PipelineOptions()); p.begin() .apply(PubsubIO.Read.topic(“input_topic”)) .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();
  12. 29.

    Pipeline p = Pipeline.create(new PipelineOptions()); p.begin() .apply(PubsubIO.Read.topic(“input_topic”)) .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();
  13. 30.

    Pipeline p = Pipeline.create(new PipelineOptions()); p.begin() .apply(PubsubIO.Read.topic(“input_topic”)) .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();
  14. 31.

    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();
  15. 35.

    ❯ Google Cloud Platformの各種データソー スから入力 • GCS, Pub/Sub, BigQuery, Datastore

    ❯ カスタム記述により任意のデータソースから の並列入力 • 現在はバッチ処理のみ対応 ❯ GCS, BigQuery, Pub/Subへの出力 • 今後も追加予定 ❯ テキスト、JSON、XML、Avro等のフォーマッ トを利用可能 Your Source/Sink Here 入力と出力
  16. 46.