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.

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

15,112 views

Published on

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

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

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

Published in: Technology
  • Be the first to comment

メキメキ開発の進む 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

×