Successfully reported this slideshow.

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

64

Share

1 of 28
1 of 28

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

64

Share

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

NTTデータ 基盤システム事業本部 OSSプロフェッショナルサービス
猿田 浩輔(Apache Sparkコミッタ)、土橋 昌

※イベントページ
http://connpass.com/event/15575/

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

NTTデータ 基盤システム事業本部 OSSプロフェッショナルサービス
猿田 浩輔(Apache Sparkコミッタ)、土橋 昌

※イベントページ
http://connpass.com/event/15575/

More Related Content

More from NTT DATA OSS Professional Services

Related Books

Free with a 14 day trial from Scribd

See all

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

  1. 1. Copyright © 2015 NTT DATA CorporationCopyright © 2015 NTT DATA Corporation 2015年6月23日 株式会社NTTデータ 基盤システム事業本部 OSSプロフェッショナルサービス 猿田 浩輔/土橋 昌 メキメキ開発の進む Apache Sparkのいまとこれから OSS Professional Service Team Spark Casual Talk #1 (2015/06/23) 発表資料
  2. 2. 2Copyright © 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. 3. 3Copyright © 2015 NTT DATA Corporation Spark開発の最前線 (猿田) •Sparkの基本おさらい •Spark 1.3までのホットトピックのキャッチアップ •Spark 1.4のアップデート 始めようSpark(土橋) •今から使うとしたら、どう使ったら活かせるか? •Spark使う上で気に留めておきたいこと •Sparkを動かしてみよう with Apache Zeppelin 本発表のアジェンダ
  4. 4. Copyright © 2015 NTT DATA Corporation 4Copyright © 2015 NTT DATA Corporation 4 ざっくりおさらい Apache Spark
  5. 5. 5Copyright © 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 RDDRDD ユーザ定義の 処理の流れ フォーマット変換 グルーピング フィルター 集計入力
  6. 6. 6Copyright © 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にマイグレーションしやすい 分散処理エンジンを含むコア部分
  7. 7. Copyright © 2015 NTT DATA Corporation 7Copyright © 2015 NTT DATA Corporation 7 Spark 1.3までのホットトピックのキャッチアップ
  8. 8. 8Copyright © 2015 NTT DATA Corporation  KafkaのSimpleConsumerAPIを用いてZookeeperを介さず、 SparkStreaming側でオフセット管理を行う。オフセットをWALに書き出 す必要がなくなった  WALとZookeeperの内部状態の不整合が発生しなくなり、より厳密にExactly- Onceが保証されるようになった Kafkaとの連携強化(Spark Streaming)
  9. 9. 9Copyright © 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. 10. 10Copyright © 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. 11. 11Copyright © 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の 違いによる著しい性能劣化は起こらない。
  12. 12. Copyright © 2015 NTT DATA Corporation 12Copyright © 2015 NTT DATA Corporation 12 Spark 1.4のアップデート
  13. 13. 13Copyright © 2015 NTT DATA Corporation  RのインターフェイスでSparkが利用できるようになった  ユーザは背後のSparkのコアの動作を意識せずDataFrameの操作を記 述するだけで分散処理が実行できる SparkR R言語で分散 処理が書ける Executorでは Spark SQLの オプティマイザ が生成した ジョブがJVM 上で走行する
  14. 14. 14Copyright © 2015 NTT DATA Corporation Spark Streamingの統計情報の可視化 単位時間当たりのデータの 流量や、処理のスループット が確認できる
  15. 15. 15Copyright © 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. 16. 16Copyright © 2015 NTT DATA Corporation タイムラインの可視化 Executor(Sparkのワーカプロセス)が 起動/停止したタイミングが時系列に表示される Executorが停止したタイミングで影響 を受けたジョブが分かる 各ジョブの開始/終了や ステータスが時系列に表示される Executorごとに、タスクが割り当てられた時間や各タスク の実行時間、処理時間の内訳が確認できる
  17. 17. 17Copyright © 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. 18. 18Copyright © 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万 件の場合でも 劣化が無い
  19. 19. Copyright © 2015 NTT DATA Corporation 20Copyright © 2015 NTT DATA Corporation 20 始めようSpark 色々すごい機能もありますが、 まずは気楽に始めるところから…
  20. 20. 21Copyright © 2015 NTT DATA Corporation 今から使うとしたら、どう使ったら活かせるか? スキーマレスデータを扱いやすいRDDと構造化されたデータを扱いやすい DataFrameをうまく組み合わせたい •DataFrameは数学的メソッドが追加されるなど充実してきたが、スキーマレスデータは今はRDDの方 が扱いやすい印象 •とはいえ、最適化の恩恵を受けられるのでDataFrameを活用したい ストリーム処理、統計処理、機械学習などのエコシステムを活用して高度な業務 を実現 •ここ1年くらいのソースコードの変更量はコアよりもライブラリの方が多い •MLlibは「分散処理の恩恵を受けられるアルゴリズムを実装する」という方針だが、定番アルゴリズ ムについてはまずまずの充実度。細かな機能が足りない場合はコミュニティに意見を挙げよう DataFrameやExternal Data Sourceの機能を活用して様々なソースからのデー タ統合処理 •構造の異なるデータも柔軟に扱える •大規模データでの動作もだいぶ安定してきた •「汎用的」というところに力点を置いて成長が進んでいる
  21. 21. 22Copyright © 2015 NTT DATA Corporation 動かすだけならとても簡単にできる。まじめに動かすなら ばパラメータ設定は必須 •最初に公式のチューニングガイドを読むのがベター https://spark.apache.org/docs/latest/tuning.html •様々な処理内容に対応できる分、追い込むときは各々に合わせる やっぱりScala版実装が最も進んでいるが、最近はPython も頑張っている。SQL風言語もそれなりに利用できる •DataFrameの登場で基本的な足並みがそろってきた •個人的に、SQLで書きたい部分とコレクション操作で書きたい部分の両 方に対応してくれるのはありがたい Spark使う上で気に留めておきたいこと
  22. 22. 23Copyright © 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>
  23. 23. 24Copyright © 2015 NTT DATA Corporation 本日はZeppelinと一緒にSparkの簡単な動作を紹介 ウェブベースのインタラクティブなノートブック SQL、Scala、Pythonで処理を書けます https://zeppelin.incubator.apache.org/ 開発者Leemoonsooと。 Spark Summit 2015より。
  24. 24. 25Copyright © 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
  25. 25. 26Copyright © 2015 NTT DATA Corporation  スマートフォンの加速度・ジャイロセンサから取得したデータを分析して行動を当てます  データセット: http://archive.ics.uci.edu/ml/datasets/Human+Activity+Recognition+Using+S martphones  サンプル内容  テキストファイルとして読み出してRDDとする  スペース区切り、不要なカラム除去などを経て、学習データを作る  ロジスティック回帰分析  テストデータを作って判定する  Precisionを求める 例2:RDDとMLlib入門 2.8858451e-001 -2.0294171e-002 -1.3290514e-001 -9.9527860e-001 -9.8311061e-001 … 各センサとその統計値が561列ぶん
  26. 26. Copyright © 2015 NTT DATA Corporation 27Copyright © 2015 NTT DATA Corporation 27 まとめ
  27. 27. 28Copyright © 2015 NTT DATA Corporation  Spark1.3までの振り返り  Spark1.4の注目ポイント  今どきのSpark活用ポイント  実際に動かしてみよう まとめ Sparkに興味を持った方は、ぜひパッケージをダウンロードしてお手軽に 動かしてみてください。公式ドキュメントのクイックスタートが参考になります。 https://spark.apache.org/docs/latest/quick-start.html 何か気になったことがあれば開発コミュニティにフィードバックを。 本気で使う方はぜひ一緒に開発現場を盛り上げましょう。
  28. 28. Copyright © 2011 NTT DATA Corporation Copyright © 2015 NTT DATA Corporation お問い合わせ先: 株式会社NTTデータ 基盤システム事業本部 OSSプロフェッショナルサービス URL: http://oss.nttdata.co.jp/hadoop メール: hadoop@kits.nttdata.co.jp TEL: 050-5546-2496

×