View
3.269
Download
3
Embed Size (px)
Citation preview
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) 発表資料
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、システム開発、テクニカルサポート
3 Copyright © 2015 NTT DATA Corporation
Spark開発の最前線 (猿田)
•Sparkの基本おさらい
•Spark 1.3までのホットトピックのキャッチアップ
•Spark 1.4のアップデート
始めようSpark(土橋)
•今から使うとしたら、どう使ったら活かせるか?
•Spark使う上で気に留めておきたいこと
•Sparkを動かしてみよう with Apache Zeppelin
本発表のアジェンダ
Copyright © 2015 NTT DATA Corporation 4 Copyright © 2015 NTT DATA Corporation 4
ざっくりおさらい Apache Spark
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 ユーザ定義の 処理の流れ
フォーマット変換 グルーピング フィルター 集計 入力
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にマイグレーションしやすい
分散処理エンジンを含むコア部分
Copyright © 2015 NTT DATA Corporation 7 Copyright © 2015 NTT DATA Corporation 7
Spark 1.3までのホットトピックのキャッチアップ
8 Copyright © 2015 NTT DATA Corporation
KafkaのSimpleConsumerAPIを用いてZookeeperを介さず、SparkStreaming側でオフセット管理を行う。オフセットをWALに書き出す必要がなくなった WALとZookeeperの内部状態の不整合が発生しなくなり、より厳密にExactly-
Onceが保証されるようになった
Kafkaとの連携強化(Spark Streaming)
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) // モデルの当てはめ
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
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の
違いによる著しい性能劣化は起こらない。
Copyright © 2015 NTT DATA Corporation 12 Copyright © 2015 NTT DATA Corporation 12
Spark 1.4のアップデート
13 Copyright © 2015 NTT DATA Corporation
RのインターフェイスでSparkが利用できるようになった
ユーザは背後のSparkのコアの動作を意識せずDataFrameの操作を記述するだけで分散処理が実行できる
SparkR
R言語で分散処理が書ける
ExecutorではSpark SQLのオプティマイザが生成したジョブがJVM上で走行する
14 Copyright © 2015 NTT DATA Corporation
Spark Streamingの統計情報の可視化
単位時間当たりのデータの流量や、処理のスループット
が確認できる
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)
16 Copyright © 2015 NTT DATA Corporation
タイムラインの可視化
Executor(Sparkのワーカプロセス)が 起動/停止したタイミングが時系列に表示される
Executorが停止したタイミングで影響を受けたジョブが分かる
各ジョブの開始/終了や ステータスが時系列に表示される
Executorごとに、タスクが割り当てられた時間や各タスクの実行時間、処理時間の内訳が確認できる
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
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万件の場合でも劣化が無い
Copyright © 2015 NTT DATA Corporation 20 Copyright © 2015 NTT DATA Corporation 20
始めようSpark
色々すごい機能もありますが、 まずは気楽に始めるところから…
21 Copyright © 2015 NTT DATA Corporation
今から使うとしたら、どう使ったら活かせるか?
スキーマレスデータを扱いやすいRDDと構造化されたデータを扱いやすいDataFrameをうまく組み合わせたい
•DataFrameは数学的メソッドが追加されるなど充実してきたが、スキーマレスデータは今はRDDの方が扱いやすい印象
•とはいえ、最適化の恩恵を受けられるのでDataFrameを活用したい
ストリーム処理、統計処理、機械学習などのエコシステムを活用して高度な業務を実現
•ここ1年くらいのソースコードの変更量はコアよりもライブラリの方が多い
•MLlibは「分散処理の恩恵を受けられるアルゴリズムを実装する」という方針だが、定番アルゴリズムについてはまずまずの充実度。細かな機能が足りない場合はコミュニティに意見を挙げよう
DataFrameやExternal Data Sourceの機能を活用して様々なソースからのデータ統合処理
•構造の異なるデータも柔軟に扱える
•大規模データでの動作もだいぶ安定してきた
•「汎用的」というところに力点を置いて成長が進んでいる
22 Copyright © 2015 NTT DATA Corporation
動かすだけならとても簡単にできる。まじめに動かすならばパラメータ設定は必須
•最初に公式のチューニングガイドを読むのがベター https://spark.apache.org/docs/latest/tuning.html
•様々な処理内容に対応できる分、追い込むときは各々に合わせる
やっぱりScala版実装が最も進んでいるが、最近はPythonも頑張っている。SQL風言語もそれなりに利用できる
•DataFrameの登場で基本的な足並みがそろってきた
•個人的に、SQLで書きたい部分とコレクション操作で書きたい部分の両方に対応してくれるのはありがたい
Spark使う上で気に留めておきたいこと
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>
24 Copyright © 2015 NTT DATA Corporation
本日はZeppelinと一緒にSparkの簡単な動作を紹介
ウェブベースのインタラクティブなノートブック SQL、Scala、Pythonで処理を書けます
https://zeppelin.incubator.apache.org/
開発者Leemoonsooと。 Spark Summit 2015より。
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
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列ぶん
Copyright © 2015 NTT DATA Corporation 27 Copyright © 2015 NTT DATA Corporation 27
まとめ
28 Copyright © 2015 NTT DATA Corporation
Spark1.3までの振り返り
Spark1.4の注目ポイント
今どきのSpark活用ポイント
実際に動かしてみよう
まとめ
Sparkに興味を持った方は、ぜひパッケージをダウンロードしてお手軽に 動かしてみてください。公式ドキュメントのクイックスタートが参考になります。 https://spark.apache.org/docs/latest/quick-start.html 何か気になったことがあれば開発コミュニティにフィードバックを。 本気で使う方はぜひ一緒に開発現場を盛り上げましょう。
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