28
Copyright © 2015 NTT DATA Corporation Copyright © 2015 NTT DATA Corporation 2015623株式会社NTTデータ 基盤システム事業本部 OSSプロフェッショナルサービス 猿田 浩輔/土橋 メキメキ開発の進む Apache Sparkのいまとこれから OSS Professional Service Team Spark Casual Talk #1 2015/06/23発表資料

メキメキ開発の進む Apache Sparkのいまとこれから (Spark Casual Talk #1 発表資料)

Embed Size (px)

Citation preview

Page 1: メキメキ開発の進む Apache Sparkのいまとこれから (Spark Casual Talk #1 発表資料)

Copyright © 2015 NTT DATA Corporation Copyright © 2015 NTT DATA Corporation

2015年6月23日 株式会社NTTデータ 基盤システム事業本部 OSSプロフェッショナルサービス 猿田 浩輔/土橋 昌

メキメキ開発の進む Apache Sparkのいまとこれから

OSS Professional Service Team

Spark Casual Talk #1 (2015/06/23) 発表資料

Page 2: メキメキ開発の進む Apache Sparkのいまとこれから (Spark Casual Talk #1 発表資料)

2 Copyright © 2015 NTT DATA Corporation

自己紹介

猿田浩輔

ソフトウェア開発。システムインフラ技術者。

6年ほどHadoopに関する業務に従事。近年はSpark関連の取り組みが多い。

2015年6月Sparkコミッタに就任

出版物に「Haodop徹底入門(初版、第二版)」-翔泳社」、「HADOOP HACKS-オライリージャパン」

土橋昌

システムインフラ技術者。データ処理。技術コンサルティング。

7年ほどHadoop関連の業務に従事。近年はStorm、Sparkなどの分散処理を中心としてシステム開発に携わる。

携わったHadoopサーバ台数は数千台。結果、システム運用にも興味。

結果的に、トラブルシュート、ITインフラの相談、システム運用、データ処理など広く従事。

講演に「Spark Summit」、「Haodop Conference Japan」、「Hadoopソースコードリーディング」

所属: NTTデータ 基盤システム事業本部 OSSプロフェッショナルサービス お仕事: OSSを使ったR&D、システム開発、テクニカルサポート

Page 3: メキメキ開発の進む Apache Sparkのいまとこれから (Spark Casual Talk #1 発表資料)

3 Copyright © 2015 NTT DATA Corporation

Spark開発の最前線 (猿田)

•Sparkの基本おさらい

•Spark 1.3までのホットトピックのキャッチアップ

•Spark 1.4のアップデート

始めようSpark(土橋)

•今から使うとしたら、どう使ったら活かせるか?

•Spark使う上で気に留めておきたいこと

•Sparkを動かしてみよう with Apache Zeppelin

本発表のアジェンダ

Page 4: メキメキ開発の進む Apache Sparkのいまとこれから (Spark Casual Talk #1 発表資料)

Copyright © 2015 NTT DATA Corporation 4 Copyright © 2015 NTT DATA Corporation 4

ざっくりおさらい Apache Spark

Page 5: メキメキ開発の進む Apache Sparkのいまとこれから (Spark Casual Talk #1 発表資料)

5 Copyright © 2015 NTT DATA Corporation

従来のHadoop MapReduceが苦手としていた、スループットとレイテンシの両立が必要な問題領域にアプローチするために開発されたOSSのインメモリ分散処理基盤

UC Barkeleyに所属していたMatei Zaharia(現Databricks CTO)がScalaで開発した

Hadoop同様、大量のコモディティサーバを束ねて大規模なデータに対して分散処理を行う

RDDと呼ばれる部分故障への耐性を考慮した分散コレクションに対し、mapやfilter、reduceなどの典型的なデータ変換操作を繰り返して目的の結果を得る処理モデル

Apache

最新安定バージョンは1.4.0

RDD RDD RDD RDD ユーザ定義の 処理の流れ

フォーマット変換 グルーピング フィルター 集計 入力

Page 6: メキメキ開発の進む Apache Sparkのいまとこれから (Spark Casual Talk #1 発表資料)

6 Copyright © 2015 NTT DATA Corporation

データソース(HDFSなど)

Sparkの全体像

• Scala/Java/Pythonで処理が記述できる

• インタラクティブシェルが付属し、試行錯誤も可能

http://cdn.oreillystatic.com/en/assets/1/event/126/Apache%20Spark_%20What_s%20new_%20what_s%20coming%20Presentation.pdf

分散処理基盤を扱いやすくする便利なエコシステムが付属している

• YARNなどのクラスタ管理基盤と連係動作する • データソースの分散ファイルシステムにはHDFSも利用可能

従来MapReduceで実装していた処理をSparkにマイグレーションしやすい

分散処理エンジンを含むコア部分

Page 7: メキメキ開発の進む Apache Sparkのいまとこれから (Spark Casual Talk #1 発表資料)

Copyright © 2015 NTT DATA Corporation 7 Copyright © 2015 NTT DATA Corporation 7

Spark 1.3までのホットトピックのキャッチアップ

Page 8: メキメキ開発の進む Apache Sparkのいまとこれから (Spark Casual Talk #1 発表資料)

8 Copyright © 2015 NTT DATA Corporation

KafkaのSimpleConsumerAPIを用いてZookeeperを介さず、SparkStreaming側でオフセット管理を行う。オフセットをWALに書き出す必要がなくなった WALとZookeeperの内部状態の不整合が発生しなくなり、より厳密にExactly-

Onceが保証されるようになった

Kafkaとの連携強化(Spark Streaming)

Page 9: メキメキ開発の進む Apache Sparkのいまとこれから (Spark Casual Talk #1 発表資料)

9 Copyright © 2015 NTT DATA Corporation

学習アルゴリズムや最適化アルゴリズムなどのパーツだけではなく、Scikit-Learnのような機械学習全体のパイプラインをサポートするAPIが提供されている

Pipeline API(MLlib)

val tokenizer = new Tokenizer() .setInputCol("text") .setOutputCol("words") val hashingTF = new HashingTF() .setNumFeatures(1000) .setInputCol(tokenizer.getOutputCol) .setOutputCol("features") val lr = new LogisticRegression() .setMaxIter(10) .setRegParam(0.01) // パイプラインにトークン分割、ハッシュ化、処理とロジスティック回帰を設定 val pipeline = new Pipeline().setStages(Array(tokenizer, hashingTF, lr)) val model = pipeline.fit(trainingDataset) // モデルの当てはめ

Page 10: メキメキ開発の進む Apache Sparkのいまとこれから (Spark Casual Talk #1 発表資料)

10 Copyright © 2015 NTT DATA Corporation

従来SchemaRDDと呼ばれていたテーブル状のデータ構造がDataFrameと名前を変えた

DataFrameに対してSQLを発行できるだけではなく、DataFrame APIと呼ばれるデータ処理用のAPIが提供されている

データに名前と型を定義することができるため、構造化されたデータの処理が簡潔に記述できる

DataFrameはRやPandasとなじみが深いデータ構造なので、分析用途などで利用しやすくなった。

DataFrame API(Spark SQL)

RDDをSpark Core APIで操作するとごちゃごちゃした処理も、DataFrame APIなら簡潔に記述でき、可読性やメンテナンス性が向上する

http://cdn.oreillystatic.com/en/assets/1/event/126/Apache%20Spark_%20What_s%20new_%20what_s%20coming%20Presentation.pdf

Page 11: メキメキ開発の進む Apache Sparkのいまとこれから (Spark Casual Talk #1 発表資料)

11 Copyright © 2015 NTT DATA Corporation

Spark SQLでSQLを記述した場合と同様、DataFrame APIを経由したデータ操作もSpark SQLの最適化エンジンの恩恵を受けられる

DataFrame API(Spark SQL)

http://www.slideshare.net/databricks/introducing-dataframes-in-spark-for-large-scale-data-science

• DataFrame APIを活用することでSpark SQLの最適化エンジンの恩恵が受けられる。 • Spark SQLのオプティマイザ経由でバイトコードが生成されるため、Scala/Pythonの

違いによる著しい性能劣化は起こらない。

Page 12: メキメキ開発の進む Apache Sparkのいまとこれから (Spark Casual Talk #1 発表資料)

Copyright © 2015 NTT DATA Corporation 12 Copyright © 2015 NTT DATA Corporation 12

Spark 1.4のアップデート

Page 13: メキメキ開発の進む Apache Sparkのいまとこれから (Spark Casual Talk #1 発表資料)

13 Copyright © 2015 NTT DATA Corporation

RのインターフェイスでSparkが利用できるようになった

ユーザは背後のSparkのコアの動作を意識せずDataFrameの操作を記述するだけで分散処理が実行できる

SparkR

R言語で分散処理が書ける

ExecutorではSpark SQLのオプティマイザが生成したジョブがJVM上で走行する

Page 14: メキメキ開発の進む Apache Sparkのいまとこれから (Spark Casual Talk #1 発表資料)

14 Copyright © 2015 NTT DATA Corporation

Spark Streamingの統計情報の可視化

単位時間当たりのデータの流量や、処理のスループット

が確認できる

Page 15: メキメキ開発の進む Apache Sparkのいまとこれから (Spark Casual Talk #1 発表資料)

15 Copyright © 2015 NTT DATA Corporation

RDDの変換過程の可視化

複雑なRDDの変換チェインや、エコシステムによって生成された変換チェインの全体像が把握しやすくなり、ボトルネックの発見やアプリ

ケーションのチューニングに役立つ

val rdd1 = sc.parallelize(list1).map(function1(_)) .reduceByKey(function2(_, _)) .map(function3(_)) val rdd2 = sc.parallelize(list2).union(rdd1)

Page 16: メキメキ開発の進む Apache Sparkのいまとこれから (Spark Casual Talk #1 発表資料)

16 Copyright © 2015 NTT DATA Corporation

タイムラインの可視化

Executor(Sparkのワーカプロセス)が 起動/停止したタイミングが時系列に表示される

Executorが停止したタイミングで影響を受けたジョブが分かる

各ジョブの開始/終了や ステータスが時系列に表示される

Executorごとに、タスクが割り当てられた時間や各タスクの実行時間、処理時間の内訳が確認できる

Page 17: メキメキ開発の進む Apache Sparkのいまとこれから (Spark Casual Talk #1 発表資料)

17 Copyright © 2015 NTT DATA Corporation

Sparkで処理されるワークロードのボトルネックがI/OからCPUに現れるようになってきた

昨今ハードウェアトレンドの変化(10G / SSD)

DataFrame APIやExternal Data Sources APIの登場で、無駄なI/Oが発生しにくくなった

Project Tungsten(SPARK-7075)

特に性能にセンシティブな部分の独自のメモリ管理

- メモリ利用効率の向上

- JavaのHashMapなどのデータ構造に見られる間接参照の削減

- GCの削減

キャッシュアウェアなデータ構造とアルゴリズム

モダンなCPUを活用できるコードの動的生成

Project Tungsten

Page 18: メキメキ開発の進む Apache Sparkのいまとこれから (Spark Casual Talk #1 発表資料)

18 Copyright © 2015 NTT DATA Corporation

独自のメモリ管理

HashMapをUnsafe APIによる自前のメモリ管理による実装により、集約処理を高速化

中間オブジェクトの生成のオーバーヘッドを軽減

自前でのメモリ管理によってGCによる影響の排除

Project Tungsten

https://databricks.com/blog/2015/04/28/project-tungsten-bringing-spark-closer-to-bare-metal.html

レコードの増加ごとの集約処理の秒間スループット。Unsafe版では400万件の場合でも劣化が無い

Page 19: メキメキ開発の進む Apache Sparkのいまとこれから (Spark Casual Talk #1 発表資料)

Copyright © 2015 NTT DATA Corporation 20 Copyright © 2015 NTT DATA Corporation 20

始めようSpark

色々すごい機能もありますが、 まずは気楽に始めるところから…

Page 20: メキメキ開発の進む Apache Sparkのいまとこれから (Spark Casual Talk #1 発表資料)

21 Copyright © 2015 NTT DATA Corporation

今から使うとしたら、どう使ったら活かせるか?

スキーマレスデータを扱いやすいRDDと構造化されたデータを扱いやすいDataFrameをうまく組み合わせたい

•DataFrameは数学的メソッドが追加されるなど充実してきたが、スキーマレスデータは今はRDDの方が扱いやすい印象

•とはいえ、最適化の恩恵を受けられるのでDataFrameを活用したい

ストリーム処理、統計処理、機械学習などのエコシステムを活用して高度な業務を実現

•ここ1年くらいのソースコードの変更量はコアよりもライブラリの方が多い

•MLlibは「分散処理の恩恵を受けられるアルゴリズムを実装する」という方針だが、定番アルゴリズムについてはまずまずの充実度。細かな機能が足りない場合はコミュニティに意見を挙げよう

DataFrameやExternal Data Sourceの機能を活用して様々なソースからのデータ統合処理

•構造の異なるデータも柔軟に扱える

•大規模データでの動作もだいぶ安定してきた

•「汎用的」というところに力点を置いて成長が進んでいる

Page 21: メキメキ開発の進む Apache Sparkのいまとこれから (Spark Casual Talk #1 発表資料)

22 Copyright © 2015 NTT DATA Corporation

動かすだけならとても簡単にできる。まじめに動かすならばパラメータ設定は必須

•最初に公式のチューニングガイドを読むのがベター https://spark.apache.org/docs/latest/tuning.html

•様々な処理内容に対応できる分、追い込むときは各々に合わせる

やっぱりScala版実装が最も進んでいるが、最近はPythonも頑張っている。SQL風言語もそれなりに利用できる

•DataFrameの登場で基本的な足並みがそろってきた

•個人的に、SQLで書きたい部分とコレクション操作で書きたい部分の両方に対応してくれるのはありがたい

Spark使う上で気に留めておきたいこと

Page 22: メキメキ開発の進む Apache Sparkのいまとこれから (Spark Casual Talk #1 発表資料)

23 Copyright © 2015 NTT DATA Corporation

もっとも簡単な始め方

JDK7、8をインストール

LinuxやMacOSでSparkのパッケージをダウンロード、展開

spark-shellを起動

RDDの使い方

- https://spark.apache.org/docs/latest/programming-guide.html

DataFrameの使い方

- https://spark.apache.org/docs/latest/sql-programming-guide.html#dataframe-operations

Sparkを動かしてみよう

https://spark.apache.org/downloads.html

$ ./bin/spark-shell --master local scala>

Page 23: メキメキ開発の進む Apache Sparkのいまとこれから (Spark Casual Talk #1 発表資料)

24 Copyright © 2015 NTT DATA Corporation

本日はZeppelinと一緒にSparkの簡単な動作を紹介

ウェブベースのインタラクティブなノートブック SQL、Scala、Pythonで処理を書けます

https://zeppelin.incubator.apache.org/

開発者Leemoonsooと。 Spark Summit 2015より。

Page 24: メキメキ開発の進む Apache Sparkのいまとこれから (Spark Casual Talk #1 発表資料)

25 Copyright © 2015 NTT DATA Corporation

定期預金契約に関するサンプルデータを読み込んで、Sparkで処理します

データセット: http://archive.ics.uci.edu/ml/datasets/Bank+Marketing

サンプル内容

spark-csvを利用して、セミコロン区切りのデータを読み込む

DataFrameのAPIを利用して特定のカラムを抜き出す

Zeppelinでグラフを生成する

例1:DataFrame入門

"age";"job";"marital";"education";"default";"balance";"housing";"loan";"contact";"day";"month";"duration";"campaign";"pdays";"previous";"poutcome";"y" 58;"management";"married";"tertiary";"no";2143;"yes";"no";"unknown";5;"may";261;1;-1;0;"unknown";"no" 44;"technician";"single";"secondary";"no";29;"yes";"no";"unknown";5;"may";151;1;-1;0;"unknown";"no"

色んな説明変数(age、jobなど)と目的変数y

Page 25: メキメキ開発の進む Apache Sparkのいまとこれから (Spark Casual Talk #1 発表資料)

26 Copyright © 2015 NTT DATA Corporation

スマートフォンの加速度・ジャイロセンサから取得したデータを分析して行動を当てます

データセット: http://archive.ics.uci.edu/ml/datasets/Human+Activity+Recognition+Using+Smartphones

サンプル内容

テキストファイルとして読み出してRDDとする

スペース区切り、不要なカラム除去などを経て、学習データを作る

ロジスティック回帰分析

テストデータを作って判定する

Precisionを求める

例2:RDDとMLlib入門

2.8858451e-001 -2.0294171e-002 -1.3290514e-001 -9.9527860e-001 -9.8311061e-001 …

各センサとその統計値が561列ぶん

Page 26: メキメキ開発の進む Apache Sparkのいまとこれから (Spark Casual Talk #1 発表資料)

Copyright © 2015 NTT DATA Corporation 27 Copyright © 2015 NTT DATA Corporation 27

まとめ

Page 27: メキメキ開発の進む Apache Sparkのいまとこれから (Spark Casual Talk #1 発表資料)

28 Copyright © 2015 NTT DATA Corporation

Spark1.3までの振り返り

Spark1.4の注目ポイント

今どきのSpark活用ポイント

実際に動かしてみよう

まとめ

Sparkに興味を持った方は、ぜひパッケージをダウンロードしてお手軽に 動かしてみてください。公式ドキュメントのクイックスタートが参考になります。 https://spark.apache.org/docs/latest/quick-start.html 何か気になったことがあれば開発コミュニティにフィードバックを。 本気で使う方はぜひ一緒に開発現場を盛り上げましょう。

Page 28: メキメキ開発の進む Apache Sparkのいまとこれから (Spark Casual Talk #1 発表資料)

Copyright © 2011 NTT DATA Corporation

Copyright © 2015 NTT DATA Corporation

お問い合わせ先: 株式会社NTTデータ 基盤システム事業本部 OSSプロフェッショナルサービス URL: http://oss.nttdata.co.jp/hadoop メール: [email protected] TEL: 050-5546-2496