Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
1IBM Spark 1
Beyond Shuffling
Apache Spark のスケールアップのためのヒントとコツ
自己紹介
名前は Holden Karau です
女性
IBM のソフトウェア・エンジニア
Alpine、Databricks、Google、Foursquare、および Amazon での勤務経験があります
「Learning Spark &...
3
3IBM Spark 3
本日のアジェンダ
皆さんについて
RDD の再利用 (キャッシング、永続化レベル、およびチェックポイント機能)
キー・バリュー・データの処理
group キーの使用が危険な理由と対処方法
Spark アキュムレータ...
4
4IBM Spark 4
本日参加されたすばらしい皆さんについて
すばらしい人々
Apache Spark に関する知識がある
Apache Spak のジョブをスケールアップしたい
Lori Erickson
5
5IBM Spark 5
猫の写真は以下から取ったものです。 http://galato901.deviantart.com/art/Cat-on-Work-Break-173043455
Cocoa Dream による写真
6
6IBM Spark 6
RDD の再利用について (標準機能として利用
できるようになりました)
RDD を再利用する予定がある場合は、どうすべきでしょうか?
メモリーにうまく収まる場合は、メモリー上にキャッシングする
別のレベルで永続化...
7
7IBM Spark 7
キー・バリュー・データに関する考慮ポイント
キーはどのように分散しているのか?
どのような集計機能を使用する必要があるのか?
データを特定の順序で並べる必要があるのか?
他の RDD を結合を行うのか?
どのような...
8
8IBM Spark 8
キーの不均衡とその問題点
キーが均等に分散していない
郵便番号ごとの売上データや都市ごとのレコードなど
groupByKey によって大量の処理が発生する (簡単に処理が中断する)
非常にアンバランスなパーティショ...
9
9IBM Spark 9
groupByKey によって発生する問題
非常に大きな問題を引き起こします
同じキーを持つすべてのレコードを単一のレコードにグループ化
すぐに reduce 演算 (集計処理など) を行った場合でも、上記が発生
...
10
10IBM Spark 10
groupByKey を使用した単語数計算のプログラムの再確認
val words = rdd.flatMap(_.split(" "))
val wordPairs = words.map((_, 1))
...
11
11IBM Spark 11
その後、「通常」版のプログラムを確認
val words = rdd.flatMap(_.split(" "))
val wordPairs = words.map((_, 1))
val wordCount...
12
12IBM Spark 12
どのような変更を行ったのでしょうか?
reduceByKey
データ型が同じ場合にうまく機能する (この集計を行うプログラムの場合など)
aggregateByKey
データ型が同じである必要がない (統計情...
13
13IBM Spark 13
問題を引き起こすのはシャッフルだけでしょうか?
キー順にソートすると、すべてのレコードが同じパーティションに配置される場合がある
パーティション・サイズの制限 (2 GB 程度) の問題が発生することがある
...
14
14IBM Spark 14
Spark のアキュムレーター
障害が発生したレコードをトラッキングするための卓越した方法を提供
ダブルカウントによって、正確な結果が得られなくなる
小さな変更が発生すると、これまでうまく機能して機能がうまく...
15
15IBM Spark 15
アキュムレーターを使用して検証を行う
val (ok, bad) = (sc.accumulator(0), sc.accumulator(0))
val records = input.map{ x => ...
16
16IBM Spark 16
Spark SQL によってパフォーマンスが改善するケースとは?
構造化データまたは半構造化データを処理する場合
それほど複雑でない*処理が利用できれば、それでも構わない場合
データのサブセットに対してのみ処...
17
17IBM Spark 17
このようなケースで Spark SQL を活用するメリット
スペースを効率的に使用するカラムナー処理とキャッシングによってデータの表示が可能
処理をデータ・ストアにプッシュダウン可能
オプティマイザーが処理の...
18
18IBM Spark 18
レビュー: Spark の機械学習に codegen を組み込む
Spark SQL のコード生成に基づく
最初のドラフトには Quasiquote を使用
Janino に切り替えることで Java でのコ...
19
19IBM Spark 19
すべての人*にとって reduce 処理は必須であるため、さら
に処理を迅速化するには
reduce と aggregate にはツリー構造のバージョンがある
無償の map サイドの reduce 機能は既...
20
20IBM Spark 20
@Override
public double call(Vector input) throws
Exception {
if (input.apply(1) <= 1.0) {
return 0.1;
}...
21IBM Spark 21
追加のリソース
プログラミング・ガイド (Java、Python、Scala に関する資料もあります)
http://spark.apache.org/docs/latest/
書籍
ビデオ
次のイベントに参加くだ...
22IBM Spark 22
Learning Spark
Fast Data
Processing with
Spark
(内容は多少古い)
Fast Data
Processing with
Spark
(第 2 版)
Advanced
A...
23IBM Spark 23
Spark のビデオ
Apache Spark の Youtube チャンネル
YouTube 上の Spark のビデオ -
http://bit.ly/holdenSparkVideos
Spark Summi...
24
24IBM Spark 24
Quinn Dombrowski による猫の写真
ありがとうございました!
Spark のテストを現在実施中です。
以下からぜひアンケートにご協力ください。
http://bit.ly/holdenTesti...
Upcoming SlideShare
Loading in …5
×

JP version - Beyond Shuffling - Apache Spark のスケールアップのためのヒントとコツ

1,281 views

Published on

The Japanese version of "Beyond Shuffling - Apache Spark のスケールアップのためのヒントとコツ"
皆さんについて
RDD の再利用 (キャッシング、永続化レベル、およびチェックポイント機能)
キー・バリュー・データの処理
group キーの使用が危険な理由と対処方法
Spark アキュムレーターに関するベスト・プラクティス*
Spark SQL がすばらしい理由
Spark MLLib のパフォーマンスを高めるための将来の機能強化に関する説明

Published in: Technology
  • Be the first to comment

JP version - Beyond Shuffling - Apache Spark のスケールアップのためのヒントとコツ

  1. 1. 1IBM Spark 1 Beyond Shuffling Apache Spark のスケールアップのためのヒントとコツ
  2. 2. 自己紹介 名前は Holden Karau です 女性 IBM のソフトウェア・エンジニア Alpine、Databricks、Google、Foursquare、および Amazon での勤務経験があります 「Learning Spark & Fast Data processing with Spark」の共著者 来年出版される Spark のパフォーマンスに関する最新の書籍*の共著者 @holdenkarau Slideshare http://www.slideshare.net/hkarau Linkedin https://www.linkedin.com/in/holdenkarau
  3. 3. 3 3IBM Spark 3 本日のアジェンダ 皆さんについて RDD の再利用 (キャッシング、永続化レベル、およびチェックポイント機能) キー・バリュー・データの処理 group キーの使用が危険な理由と対処方法 Spark アキュムレーターに関するベスト・プラクティス* Spark SQL がすばらしい理由 Spark MLLib のパフォーマンスを高めるための将来の機能強化に関する説明
  4. 4. 4 4IBM Spark 4 本日参加されたすばらしい皆さんについて すばらしい人々 Apache Spark に関する知識がある Apache Spak のジョブをスケールアップしたい Lori Erickson
  5. 5. 5 5IBM Spark 5 猫の写真は以下から取ったものです。 http://galato901.deviantart.com/art/Cat-on-Work-Break-173043455 Cocoa Dream による写真
  6. 6. 6 6IBM Spark 6 RDD の再利用について (標準機能として利用 できるようになりました) RDD を再利用する予定がある場合は、どうすべきでしょうか? メモリーにうまく収まる場合は、メモリー上にキャッシングする 別のレベルで永続化する 「MEMORY」、「MEMORY_ONLY_SER」、「MEMORY_AND_DISK」、「 MEMORY_AND_DISK_SER」 チェックポイント機能を使用 ノイズを多く含むデータのクラスター _2 & checkpointing」が役立つ場合があります Richard Gillin
  7. 7. 7 7IBM Spark 7 キー・バリュー・データに関する考慮ポイント キーはどのように分散しているのか? どのような集計機能を使用する必要があるのか? データを特定の順序で並べる必要があるのか? 他の RDD を結合を行うのか? どのようなパーティショナーを使用するのか? eleda 1
  8. 8. 8 8IBM Spark 8 キーの不均衡とその問題点 キーが均等に分散していない 郵便番号ごとの売上データや都市ごとのレコードなど groupByKey によって大量の処理が発生する (簡単に処理が中断する) 非常にアンバランスなパーティションが発生することがある かなりのキーの不均衡が発生すると、sortByKey であっても障害が発生することがある 遅延ノード (不均衡なシャーディングによって一部のタスクの処理時間が他に比べてずっと長くなる場合がある) Mitchell Joyce
  9. 9. 9 9IBM Spark 9 groupByKey によって発生する問題 非常に大きな問題を引き起こします 同じキーを持つすべてのレコードを単一のレコードにグループ化 すぐに reduce 演算 (集計処理など) を行った場合でも、上記が発生 データのサイズが大きすぎてメモリーに収まらないため、ジョブで障害が発生する SQL 環境を使用すればこの問題を解決できる PROgeckoam
  10. 10. 10 10IBM Spark 10 groupByKey を使用した単語数計算のプログラムの再確認 val words = rdd.flatMap(_.split(" ")) val wordPairs = words.map((_, 1)) val grouped = wordPairs.groupByKey() grouped.mapValues(_.sum)
  11. 11. 11 11IBM Spark 11 その後、「通常」版のプログラムを確認 val words = rdd.flatMap(_.split(" ")) val wordPairs = words.map((_, 1)) val wordCounts = wordPairs.reduceByKey(_ + _) wordCounts
  12. 12. 12 12IBM Spark 12 どのような変更を行ったのでしょうか? reduceByKey データ型が同じ場合にうまく機能する (この集計を行うプログラムの場合など) aggregateByKey データ型が同じである必要がない (統計情報のモデルを計算する場合など) Spark が reduce 演算を実施し、リストの作成をスキップすることができる
  13. 13. 13 13IBM Spark 13 問題を引き起こすのはシャッフルだけでしょうか? キー順にソートすると、すべてのレコードが同じパーティションに配置される場合がある パーティション・サイズの制限 (2 GB 程度) の問題が発生することがある または、パフォーマンスが悪化する そのため、上記のとおりデータを処理し、キーに無意味な値を追加することが可能 (94110, A, B) (94110, A, C) (10003, D, E) (94110, E, F) (94110, A, R) (10003, A, R) (94110, D, R) (94110, E, R) (94110, E, R) (67843, T, R) (94110, T, R) (94110, T, R) PROTodd Klassy
  14. 14. 14 14IBM Spark 14 Spark のアキュムレーター 障害が発生したレコードをトラッキングするための卓越した方法を提供 ダブルカウントによって、正確な結果が得られなくなる 小さな変更が発生すると、これまでうまく機能して機能がうまく機能しなくなる 特定の条件において、相対ルールで問題を解決できる場合がある* Found Animals Foundation Follow
  15. 15. 15 15IBM Spark 15 アキュムレーターを使用して検証を行う val (ok, bad) = (sc.accumulator(0), sc.accumulator(0)) val records = input.map{ x => if (isValid(x)) ok +=1 else bad += 1 // Actual parse logic here } // An action (e.g. count, save, etc.) if (bad.value > 0.1* ok.value) { throw Exception("bad data - do not use results") // Optional cleanup } // Mark as safe P.S: If you are interested in this check out spark-validator (still early stages). Found Animals Foundation Follow
  16. 16. 16 16IBM Spark 16 Spark SQL によってパフォーマンスが改善するケースとは? 構造化データまたは半構造化データを処理する場合 それほど複雑でない*処理が利用できれば、それでも構わない場合 データのサブセットに対してのみ処理を行う必要がある場合 処理対象の最も高速なデータでさえ読み取りが行われない この手法については標準の手法であると説明しましたが、一部卓越した手法**が利用できる ようになりました。 内部機能を活用することで実現 ** この卓越した手法を活用すると、スタックのオーバーフローが発生することがあります。すべての状態でこの手法が有効と は限りません。この手法を試す前には、最寄りの Spark の担当部門までご相談ください。 Matti Mattila
  17. 17. 17 17IBM Spark 17 このようなケースで Spark SQL を活用するメリット スペースを効率的に使用するカラムナー処理とキャッシングによってデータの表示が可能 処理をデータ・ストアにプッシュダウン可能 オプティマイザーが処理の内部を検証することが可能 通常の Spark では、処理の内部を検証することで (min(_, _)) と (append(_, _)) の違いを検出することは できない Matti Mattila
  18. 18. 18 18IBM Spark 18 レビュー: Spark の機械学習に codegen を組み込む Spark SQL のコード生成に基づく 最初のドラフトには Quasiquote を使用 Janino に切り替えることで Java でのコンパイルに対応 最初のドラフトは Gradient Boosted Tree を使用 データベースの処理に基づく 最初のドラフトは Quasiquote を使用 スピーディーな処理のために Java を採用 詳細については、SPARK-10387 を参照 Jon
  19. 19. 19 19IBM Spark 19 すべての人*にとって reduce 処理は必須であるため、さら に処理を迅速化するには reduce と aggregate にはツリー構造のバージョンがある 無償の map サイドの reduce 機能は既に提供済み しかし、さらに処理を迅速化するこが可能** ** さらに先進的なバージョンを作成することも可能
  20. 20. 20 20IBM Spark 20 @Override public double call(Vector input) throws Exception { if (input.apply(1) <= 1.0) { return 0.1; } else { if (input.apply(0) <= 0.5) { return 0.0; } else { return 2.0; } } } (1, 1.0) 0.1 (0, 0.5) 0.0 2.0 生成されたコードの例 Glenn Simmons
  21. 21. 21IBM Spark 21 追加のリソース プログラミング・ガイド (Java、Python、Scala に関する資料もあります) http://spark.apache.org/docs/latest/ 書籍 ビデオ 次のイベントに参加ください Spark に関するお問い合わせへの対応 今後のイベントを確認するには、Twitter で私をフォローしてください https://twitter.com/holdenkarau このアンケートに回答して、次の日付を選択してください http://bit.ly/spOffice1 raider of gin
  22. 22. 22IBM Spark 22 Learning Spark Fast Data Processing with Spark (内容は多少古い) Fast Data Processing with Spark (第 2 版) Advanced Analytics with Spark 近日中に発売: Spark in Action
  23. 23. 23IBM Spark 23 Spark のビデオ Apache Spark の Youtube チャンネル YouTube 上の Spark のビデオ - http://bit.ly/holdenSparkVideos Spark Summit 2014 のトレーニング Paco の Introduction to Apache Spark
  24. 24. 24 24IBM Spark 24 Quinn Dombrowski による猫の写真 ありがとうございました! Spark のテストを現在実施中です。 以下からぜひアンケートにご協力ください。 http://bit.ly/holdenTestingSpark 最終的な結果は、@holdenkarau からツイートします。

×