spark shark

35

Click here to load reader

Upload: tsuyoshi-ozawa

Post on 10-May-2015

6.066 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Spark shark

Spark/Shark@oza_x86

Tuesday, October 22, 13

Page 2: Spark shark

?

Tuesday, October 22, 13

Page 3: Spark shark

?

Tuesday, October 22, 13

Page 4: Spark shark

Tuesday, October 22, 13

Page 5: Spark shark

Tuesday, October 22, 13

Page 6: Spark shark

おまえだれよ?Tsuyoshi Ozawa @oza_x86

OSS developerApache Hadoop の開発をしてます

github : oza

←の22章を書いたよ!

Tuesday, October 22, 13

Page 7: Spark shark

アジェンダ

• Hadoop/MapReduce の復習

• Spark の概要

• Shark の概要

Tuesday, October 22, 13

Page 8: Spark shark

• 分散処理基盤

• たくさんの計算機を使って高速に処理

• Open Source!

HDFS

MapReduce 処理部

データ保存部

1台辺りの構成Hadoop の構成

Tuesday, October 22, 13

Page 9: Spark shark

MapReduce が提供するもの

• MapReduce

• 処理の分散並列化

• 耐障害性

• ジョブ監視のための基盤

• 開発者のための抽象化されたインタフェース(Map/Reduce)

• 引用元

• http://www.slideshare.net/shiumachi/impala-15324018

Tuesday, October 22, 13

Page 10: Spark shark

MapReduce 概要

HDFS

map

map

map

reduce

reduce

HDFS

入力読み込み

処理結果書き込み

Shuffle

並列処理 集約処理

Tuesday, October 22, 13

Page 11: Spark shark

ところで...• HDFS ためたデータに対して,機械学習を行い,高度な解析を行うということが色々な場所で行われている

•Mahout (Hadoop 上のライブラリ)

• Jubatus (オンライン学習基盤)

Tuesday, October 22, 13

Page 12: Spark shark

MapReduce の問題点• 機械学習のような繰り返し処理を行うようなものでは,性能が出ない

• なぜ?

• リソース割り当てに起因する問題

• プログラムの起動に 15 sec 程度かかる

• ディスク書き込みに起因する問題

• HDFS への書き込みオーバヘッドが大きいため

• Shuffle でローカルディスクに書き出すため

Spark の出番Tuesday, October 22, 13

Page 13: Spark shark

Spark とは?• 繰り返し処理を高速化するために HDFS に

特殊なキャッシュを乗っけた

• 機械学習を書くために DSL を提供

• Map/Reduce 以外にも色々と API が定義されている

• DSL は勝手に分散処理される

• 実装をがんばっているため,起動に15secもかからない

• Apache Incubator

• http://spark-project.org/

• Scala で 20k

Tuesday, October 22, 13

Page 14: Spark shark

なぜキャッシュ?

HDFS

map

map

map

reduce

reduce

HDFS

入力読み込み

処理結果書き込み

Shuffle

並列処理 集約処理

Tuesday, October 22, 13

Page 15: Spark shark

なぜキャッシュ?

HDFS

map

map

map

reduce

reduce

HDFS

入力読み込み

処理結果書き込み

並列処理 集約処理

Tuesday, October 22, 13

Page 16: Spark shark

なぜ特殊なキャッシュ?

•キャッシュは揮発性→プロセスが落ちたら,再構築が必要

•全体の処理をやり直す羽目に...

Tuesday, October 22, 13

Page 17: Spark shark

100回の繰り返し処理を考える

HDFS

map

map

map

reduce

reduce

HDFS

並列処理 集約処理

99回目

99回目の結果

Tuesday, October 22, 13

Page 18: Spark shark

100回の繰り返し処理を考える

HDFS map

map

reduce

reduce

HDFS

並列処理 集約処理

99回目

99回目の結果

Tuesday, October 22, 13

Page 19: Spark shark

100回の繰り返し処理を考える

HDFS map

map

reduce

reduce

HDFS

並列処理 集約処理

99回目

99回目の結果

キャッシュが壊れる

Tuesday, October 22, 13

Page 20: Spark shark

100回の繰り返し処理を考える

HDFS

map

map

map

reduce

reduce

HDFS

並列処理 集約処理

99回目

99回目の結果

Tuesday, October 22, 13

Page 21: Spark shark

100回の繰り返し処理を考える

HDFS

map

map

map

reduce

reduce

HDFS

並列処理 集約処理

99回目

99回目の結果

読み直してやり直し!!

Tuesday, October 22, 13

Page 22: Spark shark

特殊なキャッシュ• Resillient Distributed Datasets

• チェックポイントから処理の依存関係を見て最小限で復帰する仕組み

• ナイーブにキャッシュすると性能が出ないので Java のオブジェクトをそのまま保存

• https://www.usenix.org/system/files/conference/nsdi12/nsdi12-final138.pdf

Tuesday, October 22, 13

Page 23: Spark shark

DSL

• http://spark-project.org/examples/

file = spark.textFile("hdfs://...") file.flatMap(line => line.split(" "))    .map(word => (word, 1))    .reduceByKey(_ + _)

Tuesday, October 22, 13

Page 24: Spark shark

起動が速い• 1秒以内で立ち上がる

• 仕組み

• Spark avoids this problem by using a fast event-driven RPC library to launch tasks and by reusing its worker processes. It can launch thousands of tasks per second with only about 5 ms of over- head per task, making task lengths of 50–100 ms and MapReduce jobs of 500 ms viable. What surprised us is how much this affected query performance, even in large (multi-minute) queries[2].

• 意訳: 実装がんばったら,5msec で 1タスク立ち上がるようになったよ

• [2]Shark: SQL and Rich Analytics at Scale

Tuesday, October 22, 13

Page 25: Spark shark

Spark と MapReduce の比較

• Hadoop/MapReduce

• ユーザは Map/Reduce という関数を書く

• チェックポイントは勝手にとってくれる

• 起動に15secくらいかかる

• お気軽に色々書ける

HDFS

MapReduce

HDFS

Spark (Spark の中にキャッシュ!!)

• Spark

• ユーザは DSL を書く

• チェックポイントは自分で取る

• 起動は1sec以内

• お気軽に色々書ける...??

Tuesday, October 22, 13

Page 27: Spark shark

?

Tuesday, October 22, 13

Page 28: Spark shark

?

Tuesday, October 22, 13

Page 29: Spark shark

Apache HiveSQL っぽいものを書くと MapReduce

プログラムにコンパイル

Tuesday, October 22, 13

Page 30: Spark shark

Spark DSL...?• 集計の度に

• 厳しいのでは...?

Shark の出番

file = spark.textFile("hdfs://...") file.flatMap(line => line.split(" "))    .map(word => (word, 1))    .reduceByKey(_ + _)

Tuesday, October 22, 13

Page 31: Spark shark

Shark とは?• Spark 上で SQL はじめました

HDFS

Spark

Shark(SQL)

CREATE TABLE logs_last_month_cached AS SELECT * FROM logs WHERE time > date(...);

SELECT page, count(*) c FROM logs_last_month_cached GROUP BY page ORDER BY c DESC LIMIT 10;

Tuesday, October 22, 13

Page 32: Spark shark

Shark のポイント• SQL を Spark の DSL にコンパイル

• Apache Hive の Spark 版(フォーク)

• 性能が出るようにキャッシュをうまく管理

• ストレージフォーマットを工夫

• キャッシュの置き場所を工夫

• Spark との親和性を重視

Tuesday, October 22, 13

Page 33: Spark shark

もうちょっと詳しく

• [2]Shark: SQL and Rich Analytics at ScaleTuesday, October 22, 13

Page 34: Spark shark

Shark のベンチマークselection query:SELECT pageURL, pageRankFROM rankings WHERE pageRank > X;

同条件のシンプルなクエリで速い理由 Spark の起動時間が高速 タスク割り当てが高速

Tuesday, October 22, 13

Page 35: Spark shark

まとめ• 機械学習用の処理基盤 Spark

• 繰り返し処理にてHadoop の最大100倍高速

• Spark のSQLインタフェース Shark

• キャッシュの速さと足回りの速さ,クエリの最適化により Hive の数倍高速

• select のような基本的なクエリでHive よりも高速に動作

Tuesday, October 22, 13