Movatterモバイル変換


[0]ホーム

URL:


PDF, PPTX53,786 views

Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)

(デブサミ 2016 講演資料)Apache Sparkに手を出してヤケドしないための基本~「Apache Spark入門より」~ NTTデータ基盤システム事業本部 OSSプロフェッショナルサービス土橋 昌 吉田 耕陽イベントページhttp://event.shoeisha.jp/devsumi/20160218/session/991/

Related topics:

Embed presentation

Download as PDF, PPTX
Copyright © 2016 NTT DATA CorporationNTTデータ 基盤システム事業本部OSSプロフェッショナルサービス土橋 昌吉田 耕陽Apache Sparkに手を出してヤケドしないための基本~「Apache Spark入門より」~
Copyright © 2016 NTT DATA Corporation自己紹介土橋 昌オープンソースを徹底活用してシステム開発/運用するプロジェクト、R&Dに従事。登壇歴Spark Summit 2014、HadoopConference Japan、Strata + HadoopWorldなど執筆等Spark関連の執筆では「Apache Spark入門」や「初めてのSpark」付録、雑誌など吉田 耕陽入社以来、Hadoopをはじめとする分散処理OSS関連の案件に従事。登壇歴Hadoop Conference Japan、OSCなど執筆等「Apache Spark入門」、デジタルプラクティスなど
Copyright © 2016 NTT DATA Corporation本日のおはなしSparkのキホンを知って…Sparkアプリの書き方を知って…Sparkの中身を少しだけ知って…大規模データ処理を少しでも身近に感じて楽しんでいただければ嬉しいです
Copyright © 2016 NTT DATA Corporation翔泳社「Apache Spark入門」について第1章:Apache Sparkとは第2章:Sparkの処理モデル第3章:Sparkの導入第4章:Sparkアプリケーションの開発と実行第5章:基本的なAPIを用いたプログラミング第6章:構造化データセットを処理する - Spark SQL -第7章:ストリームデータを処理する - Spark Streaming -第8章:機械学習を行う - MLlib -AppendixA. GraphXによるグラフ処理B. SparkRを使ってみるC. 機械学習とストリーム処理の連携D. Web UIの活用ここで紹介する内容のもっと詳しい版が掲載されています。Sparkの動作原理から標準ライブラリを使った具体的なプログラム例まで。Spark1.5系対応
Copyright © 2016 NTT DATA Corporationまず初めにApache Sparkとは?ひとことで言うと…オープンソースの並列分散処理系並列分散処理の面倒な部分は処理系が解決してくれる!• 障害時のリカバリ• タスクの分割やスケジューリング• etc大量のデータを たくさんのサーバを並べて並列分散処理し、現実的な時間(数分~数時間)で目的の処理結果を得るデータ管理には向きませんが、データ処理には向いています。
Copyright © 2016 NTT DATA Corporation守備範囲の広い優等生ですが、あくまで分散処理系いろいろ出来るので、ついうっかり分散処理でなくても良い処理も実装しようとしがちですが、それはあまり筋が良くありません。(そういう場合は分散のための仕組みは不要なものとなります)とはいえ、もちろん規模の小さなデータに対しても動きます。現実的には実現したいことの全体の傾向によってSparkを使うか、他の手段を組み合わせるのかを判断して用います。
Copyright © 2016 NTT DATA Corporationでは、うちではSpark使うべき?使わないべき?自分にとって嬉しいかどうかは、PoCなどを通じてちゃんと確かめましょう。すでにHadoopを利用している1台のマシンでは収まらない量のデータがあるデータ件数が多くて既存の仕組みだと一括処理が辛いSQLもいいが、他の言語の内部DSLとして実装したい集計を中心としたストリーム処理をやりたい大規模データに対して定番の機械学習アルゴリズムを適用したいできればSparkがあると嬉しい典型的なケース例
Copyright © 2016 NTT DATA Corporationとはいえ、試すのであれば簡単!http://spark.apache.org/downloads.htmlDemoJDKのインストールされた環境でパッケージを解凍して動かすSpark体験の始まり
Copyright © 2016 NTT DATA Corporationさて、ここでひとつ質問なぜSparkが生まれたのか?
Copyright © 2016 NTT DATA Corporationさて、ここでひとつ質問オープンソースの並列分散処理系としては、既に Hadoop が普及しているけど?これで良くない?
Copyright © 2016 NTT DATA Corporationさて、ここでひとつ質問ものすごく簡単にHadoopの特徴をおさらいし、Sparkが生まれた背景 を紐解きます使ったことのない/使い始めのプロダクトに触れるときは重要
Copyright © 2016 NTT DATA CorporationHadoopのあっさり紹介Hadoop:コモディティなサーバを複数並べて分散処理1. データを貯めるHDFS2. データ処理のリソースを管理するYARN3. 処理するMapReduceフレームワーク
Copyright © 2016 NTT DATA CorporationHadoopのあっさり紹介Hadoop:コモディティなサーバを複数並べて分散処理1. データを貯めるHDFS2. データ処理のリソースを管理するYARN3. 処理するMapReduceフレームワークSparkはここに相当
Copyright © 2016 NTT DATA Corporation(補足) MapReduceフレームワークとは アプリ開発者はMap処理とReduce処理を実装する(原則Java) 上記を元にフレームワークが分散処理する。障害発生時もリトライで処理が継続する。 基本的にサーバを増やせば処理性能はスケールアウトするMap処理 Reduce処理Map処理とReduce処理で完結したジョブを形成するデータの加工やフィルタリングなどデータの集計や結合などHDFSHDFSと組み合わせることで、I/Oが分散され、高スループットで処理可能HDFS処理結果処理対象のデータ
Copyright © 2016 NTT DATA CorporationMapReduceフレームワークの嬉しい点をざっくりとシンプルな処理モデル大量データでも動き切ってくれること企業で使うのに程良かったわけですね
Copyright © 2016 NTT DATA CorporationMapReduceフレームワークの課題とはいえ、色々と使っていくと…処理効率が気になってきます ジョブが多段に構成される場合 複数のジョブで何度も同じデータを利用する場合M RMap処理 Reduce処理M R M R ・・・・・・・・・ジョブM RM Rデータの受け渡し
Copyright © 2016 NTT DATA Corporation処理効率が気になる場面の例ジョブが多段に構成される場合反復処理•機械学習•グラフ処理複雑な業務処理複数のジョブで何度も同じデータを利用する場合アドホックな分析処理複雑な業務処理
Copyright © 2016 NTT DATA Corporationジョブが多段に構成される場合の課題 ジョブ間でのデータの受け渡しのために、都度HDFSへのI/Oが発生 HDFSへの都度のI/Oのレイテンシが、処理時間の大部分を占めることにつながるM RMap処理 Reduce処理M R M R ・・・ジョブHDFSIO IOIO IOジョブ間のデータの受け渡しのたびに、HDFSへのI/Oが伴う
Copyright © 2016 NTT DATA Corporation複数のジョブで何度も同じデータを利用する場合の課題何度も利用するデータを効率的に扱う仕組みがないため、同じデータを利用する場合に都度巨大なデータの読み出しのための待ち時間が発生する・・・・・・M RM R・・・M R・・・M RHDFSジョブごとに大きなデータの読み込みの待ち時間がかかる
Copyright © 2016 NTT DATA Corporationそこで生まれたSparkとは?抽象化を進めて、スループットとレイテンシのバランスを追求し、使いやすいAPIをユーザに提供。最新安定バージョンは1.6.0。現在2.0.0のリリースに向けて開発中RDD RDD RDDRDDユーザ定義の処理の流れフォーマット変換 グルーピング フィルター 集計入力処理モデルRDDと呼ばれる部分故障への耐性を考慮した分散コレクションに対し、典型的なデータ処理を繰り返して目的の結果を得る
Copyright © 2016 NTT DATA CorporationSparkのプログラミングモデルの基礎RDDに対する処理は、コレクション操作のように記述Scala / Java / Python向けのAPIが提供されているインタラクティブシェルが「試行錯誤」を加速する都度のビルドが不要なため、ロジックの試作から効果の確認のサイクルを高速化できるrdd.filter(...).map(...).reduceByKey(...).saveAsText(...)フィルタして 加工して 集計して 結果を保存
Copyright © 2016 NTT DATA Corporation【DEMO】 WordCountみようval textFile = sc.textFile("CHANGES.txt")val wordCounts = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b)=> a + b)wordCounts.sortBy(_._2,false).take(10)res0: Array[(String, Int)] = Array(("",61509), (Commit:,6830), (-0700,3672), (-0800,2162),(in,1766), (to,1417), (for,1298), ([SQL],1277), (the,777), (and,663))wordCounts.filter(_._1.matches("[a-zA-Z0-9]+")).sortBy(_._2,false).take(10)res1: Array[(String, Int)] = Array((in,1766), (to,1417), (for,1298), (the,777), (and,663), (Add,631),(of,630), (Fix,547), (Xin,491), (Reynold,490))まずは簡単に、tgzを展開した直下にあるCHANGES.txtで試してみるちゃんとカウントできてるかな?数の多い上位10件を出力してみようノイズが多いな…英数字のみ含まれる文字列のみフィルタしてみようspark-shellを起動し、Hadoop界隈のHello WorldであるWordCount実行試行錯誤できる
Copyright © 2016 NTT DATA Corporation高スループットと低レイテンシを両立する工夫複雑な処理を少ないジョブ数で実現できるRDD RDD RDDRDDRDD RDDSparkジョブRDDごとに中間データを都度出力するわけではないため、HDFSなどの外部分散ストレージへのI/Oが抑えられるHDFSIOIOIORDDの加工
Copyright © 2016 NTT DATA Corporation【DEMO】ウェブUIからジョブの構成を確認WordCount(takeで上位10件確認まで)を実行するときのDAG実際に実行される処理は「ステージ」を軸に構成され、「タスク」として計算マシンで実行される
Copyright © 2016 NTT DATA Corporation高スループットと低レイテンシを両立する工夫何度も利用するRDDは、複数のサーバのメモリに分割してキャッシュしてI/Oや計算を減らせるRDDRDDジョブARDDHDFSRDDジョブBはジョブAがキャッシュしたデータを利用できるRDD RDD RDDジョブBキャッシュを活用することで、同じデータを利用する場合でも、都度データを読み込む必要がないキャッシュ済みのRDDキャッシュを利用できるので、HDFSからのデータの読み込みは発生しない
Copyright © 2016 NTT DATA Corporation高スループットと低レイテンシを両立する工夫キャッシュは反復処理にも有効RDD RDD RDD前段の反復処理の結果を入力とするジョブ キャッシュ済みのRDD2回目の反復以降は、キャッシュしたRDDを処理すれば良い。HDFS最初の反復のみ、HDFSからデータを読み出す
Copyright © 2016 NTT DATA Corporation【DEMO】キャッシュ機能を使ってみようwordCounts.cache()wordCounts.filter(_._1.matches("[a-zA-Z0-9]+")).sortBy(_._2,false).take(10)res1: Array[(String, Int)] = Array((in,1766), (to,1417), (for,1298), (the,777), (and,663), (Add,631),(of,630), (Fix,547), (Xin,491), (Reynold,490))wordCounts.filter(_._1.matches("[a-zA-Z0-9]+")).sortBy(_._2,false).take(10)res1: Array[(String, Int)] = Array((in,1766), (to,1417), (for,1298), (the,777), (and,663), (Add,631),(of,630), (Fix,547), (Xin,491), (Reynold,490)).cache()でキャッシュ機能を有効化。(ここではキャッシュされない)アクション契機に処理が実行され、データの実体がキャッシュに残るWordCountの続き。先ほどのwordCountsを明示的にキャッシュしてみる次にキャッシュされたRDDを対象とした処理を実行すると、キャッシュから優先的にデータが読み込まれる。(キャッシュし切れなかったデータは、通常通り計算されて求められる)
Copyright © 2016 NTT DATA Corporation【DEMO】キャッシュされたデータの様子キャッシュの状況は、WebUIのStorageタブから確認できる
Copyright © 2016 NTT DATA Corporationデータソース(HDFSなど)速いだけじゃないSparkの豊富な機能http://cdn.oreillystatic.com/en/assets/1/event/126/Apache%20Spark_%20What_s%20new_%20what_s%20coming%20Presentation.pdfSQL
Copyright © 2016 NTT DATA Corporationデータソース(HDFSなど)速いだけじゃないSparkの豊富な機能http://cdn.oreillystatic.com/en/assets/1/event/126/Apache%20Spark_%20What_s%20new_%20what_s%20coming%20Presentation.pdfSQL分散処理エンジンを含むコア部分
Copyright © 2016 NTT DATA Corporationデータソース(HDFSなど)速いだけじゃないSparkの豊富な機能• 機械学習などの複雑な処理を簡単に実現するための標準ライブラリhttp://cdn.oreillystatic.com/en/assets/1/event/126/Apache%20Spark_%20What_s%20new_%20what_s%20coming%20Presentation.pdfSQL
Copyright © 2016 NTT DATA Corporationデータソース(HDFSなど)速いだけじゃないSparkの豊富な機能• 例えばScala/Java/Python/SQL等で処理が記述可能• インタラクティブシェルが付属し、試行錯誤も可能http://cdn.oreillystatic.com/en/assets/1/event/126/Apache%20Spark_%20What_s%20new_%20what_s%20coming%20Presentation.pdfSQL
Copyright © 2016 NTT DATA Corporationデータソース(HDFSなど)速いだけじゃないSparkの豊富な機能http://cdn.oreillystatic.com/en/assets/1/event/126/Apache%20Spark_%20What_s%20new_%20what_s%20coming%20Presentation.pdfSQL• YARNなどのクラスタ管理基盤と連係動作する• すでにHadoop環境がある場合は特に導入簡単
Copyright © 2016 NTT DATA Corporationデータソース(HDFSなど)速いだけじゃないSparkの豊富な機能http://cdn.oreillystatic.com/en/assets/1/event/126/Apache%20Spark_%20What_s%20new_%20what_s%20coming%20Presentation.pdfSQL• データソースの分散ファイルシステムにはHDFSも利用可能• 従来MapReduceで実装していた処理をSparkにマイグレーションしやすい
Copyright © 2016 NTT DATA Corporation便利なライブラリ: Spark SQLDataFrameに対してSQL/HiveQLを発行して分散処理する└ RDDの上に成り立つスキーマ付きのテーブル状のデータ構造SQLを使い慣れたデータ分析者担当者が分散処理の恩恵を受けられる// ScalaでSQLを使用する例Val teenager = sqlContext.sql(“SELECT name FROM people WHEREage >= 13 AND age <= 19”)例えばPythonによるデータ分析アプリケーションを実装していて、「ここはSQLで書きたいな」って箇所で有用。
Copyright © 2016 NTT DATA Corporation便利なライブラリ: Spark SQLオプティマイザ付きRDDベースの処理の物理プランが生成される構造化データを取り扱うための仕組みが付属– Parquet / ORC / CSV / JSON / テキスト / JDBC ...– データソースによってはフィルタ処理をデータソース側に移譲することで、無駄なデータの読み込みを避けられるhttp://cdn.oreillystatic.com/en/assets/1/event/126/Apache%20Spark_%20What_s%20new_%20what_s%20coming%20Presentation.pdfオペレータの実行順序の最適化などデータソースの特性を活用した最適化など
Copyright © 2016 NTT DATA Corporation【DEMO】SQLによる処理を実行してみるcase class Person(name: String, age: Int)val people = sc.textFile("examples/src/main/resources/people.txt").map(_.split(",")).map(p =>Person(p(0), p(1).trim.toInt)).toDF()people.registerTempTable("people")val teenagers = sqlContext.sql("SELECT name, age FROM people WHERE age >= 13 AND age<= 19").showサンプルに含まれるデータで、SparkSQLを試してみる参考 : http://spark.apache.org/docs/latest/sql-programming-guide.html
Copyright © 2016 NTT DATA Corporation便利なライブラリ: MLlib / ML Pipelines統計処理、機械学習を分散処理するためのライブラリレコメンデーション / 分類 / 予測など分散処理に向くポピュラーなアルゴリズムを提供2016/2現在、spark.mllib と spark.ml の2種類のパッケージが存在(一例)RDD利用 DataFrame利用
Copyright © 2016 NTT DATA Corporation便利なライブラリ: MLlib / ML Pipelines昨今はspark.mlのML Pipelinesの開発が活発scikit-learnのように機械学習を含む処理全体をパイプラインとして扱うAPIval 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) // モデルの当てはめ処理全体のポータビリティ向上!見通しの良くなって開発効率の向上!
Copyright © 2016 NTT DATA Corporation【DEMO】K-meansによるカテゴライズimport org.apache.spark.mllib.clustering.KMeansimport org.apache.spark.mllib.linalg.Vectorsval data = sc.textFile("data/mllib/kmeans_data.txt")val parsedData = data.map { s =>Vectors.dense(s.split(' ').map(_.toDouble))}.cache()val numClusters = 2val numIterations = 20val clusters = KMeans.train(parsedData, numClusters, numIterations)// 確認clusters.kclusters.clusterCenters// 入力データのベクトルが所属するクラスタを出力parsedData.foreach{ vec =>println(vec + " => " + clusters.predict(vec))}サンプルに含まれるサンプルデータでK-meansを試してみる
Copyright © 2016 NTT DATA Corporation便利なライブラリ: Spark Streaming小さなバッチ処理を繰り返してストリーミング処理を実現ストリーム処理用のスケジューラが以下の流れを繰り返し実行。実際のデータ処理はSparkの機能で実現。http://spark.incubator.apache.org/docs/latest/streaming-programming-guide.htmlストリームデータを小さく区切って取りこむ区切った塊(バッチ)に対してマイクロバッチ処理を適用する
Copyright © 2016 NTT DATA Corporation便利なライブラリ: Spark Streaming特に向いているケース集計を中心とした処理バッチ処理と共通の処理ある程度のウィンドウ幅でスループットも重視する処理
Copyright © 2016 NTT DATA Corporation【DEMO】 Twitterのハッシュタグフィルタリングimport org.apache.spark.streaming.twitter.TwitterUtilsimport org.apache.spark.streaming.{Durations, StreamingContext}import org.apache.spark.streaming.{Seconds, StreamingContext}import org.apache.log4j.{Level, Logger}Logger.getRootLogger.setLevel(Level.ERROR)$./bin/spark-shell --jars lib/spark-examples-1.6.0-hadoop2.6.0.jarLocalモードで本コードを動作させると多くのWARNが出力され見づらくなるため、ログレベルをErrorレベルに変更SparkStreamingでお手軽にTwitterデータを使ってみるTwitter用のライブラリ(org.apache.spark.streaming.twitter.TwitterUtils)を利用するがSparkのJarには含まれないため、デモではお手軽にサンプルプログラムのjarファイルを読み込ませて実行
Copyright © 2016 NTT DATA Corporation【DEMO】 Twitterのハッシュタグフィルタリングval config = new java.util.Propertiesconfig.load(this.getClass().getClassLoader().getResourceAsStream("config.properties"))System.setProperty("twitter4j.oauth.consumerKey", config.get("twitter_consumerKey").toString)System.setProperty("twitter4j.oauth.consumerSecret", config.get("twitter_consumerSecret").toString)System.setProperty("twitter4j.oauth.accessToken", config.get("twitter_accessToken").toString)System.setProperty("twitter4j.oauth.accessTokenSecret",config.get("twitter_accessTokenSecret").toString)val filters = Array("#devsumi")val ssc = new StreamingContext(sc, Seconds(10))val stream = TwitterUtils.createStream(ssc, None, filters)//Tweet本文のみ出力stream.map(status => status.getText()).printssc.start()ssc.awaitTermination()-------------------------------------------Time: 1455770400000 ms-------------------------------------------#devsumi デモなう検索ワードを入れる前ページの続き10秒に1回のマイクロバッチデモではTwitter API Keyは外部ファイルとして準備この後にも様々な処理を追加できます
Copyright © 2016 NTT DATA Corporation翔泳社「Apache Spark入門」について第1章:Apache Sparkとは第2章:Sparkの処理モデル第3章:Sparkの導入第4章:Sparkアプリケーションの開発と実行第5章:基本的なAPIを用いたプログラミング第6章:構造化データセットを処理する - Spark SQL -第7章:ストリームデータを処理する - Spark Streaming -第8章:機械学習を行う - MLlib -AppendixA. GraphXによるグラフ処理B. SparkRを使ってみるC. 機械学習とストリーム処理の連携D. Web UIの活用ここで紹介した内容のもっと詳しい版が掲載されています。Sparkの動作原理から標準ライブラリを使った具体的なプログラム例まで。Spark1.5系対応
Copyright © 2016 NTT DATA Corporation 46イマドキのSpark
Copyright © 2016 NTT DATA Corporation劇的な進化を遂げつづけるSparkRDDを基礎とした分散処理、豊富で便利なライブラリ群の存在などの基本コンセプトは変わらないが、決して進化を止めていない。特に2014年から2016年に向けて、Sparkの常識が変化。2014年~2015年にユーザ、開発者が色々と言っていた不満の多くが考慮されているのは興味深いです。過去のカンファレンスのネタなどを振り返ると面白いです。
Copyright © 2016 NTT DATA CorporationイマドキのSparkフロントエンド バックエンドRDDを中心とした処理系から、DataFrameを中心としたハイレベルの処理系へProject Tungstenと題されるCPU利用効率の改善
Copyright © 2016 NTT DATA CorporationイマドキのSparkフロントエンド バックエンドRDDを中心とした処理系から、DataFrameを中心としたハイレベルの処理系へProject Tungstenと題されるCPU利用効率の改善
Copyright © 2016 NTT DATA Corporation RDDのAPIは直感的だが、規模が大きくなり、複雑になると・・・ 見通しが悪い? 最適化が面倒? よりハイレベルのAPIがほしい RDDベースの処理の場合、言語によってバックエンドの処理系が異なるため、言語によってパフォーマンスが異なるRDDベースの処理の課題どこに何が入っているんだ?!Pythonのデーモン内で処理が実行される
Copyright © 2016 NTT DATA CorporationDataFrame APIDataFrameに対してSQLを発行できるだけではなく、DataFrameAPIと呼ばれるデータ処理用のAPI構造化データの処理を簡潔に記述http://cdn.oreillystatic.com/en/assets/1/event/126/Apache%20Spark_%20What_s%20new_%20what_s%20coming%20Presentation.pdfこれが…こうなる!これは簡潔!
Copyright © 2016 NTT DATA CorporationDataFrame APIしかも速い。Spark SQLのオプティマイザの恩恵オプティマイザによってJVMで動作する物理プランが生成されるため、開発言語の違いによる著しい性能劣化は起こらないhttp://www.slideshare.net/databricks/introducing-dataframes-in-spark-for-large-scale-data-science
Copyright © 2016 NTT DATA Corporationお手軽にcsvファイルをDataFrameとして利用するために、デモではspark-csvを利用。Spark Packagesのリポジトリに存在するため--packagesオプションで指定。※spark-csvは、Spark2.0以降よりビルトインのライブラリとして利用可能【DEMO】 DataFrame APIを使ってみるval df = sqlContext.read.format("com.databricks.spark.csv").option("header", "true").option("inferSchema","true").load(”/tmp/weather.csv")df.showdf.schema// 雪が降った日は何日?df.filter(df("降雪量合計(cm)") > 0).count// 最高気温、最適気温の平均は?df.agg(avg("最高気温(℃)"),avg("最低気温(℃)")).show$ spark-shell --packages com.databricks:spark-csv_2.11:1.3.0気象庁のオープンデータを元にしたcsvファイルを利用
Copyright © 2016 NTT DATA CorporationイマドキのSparkフロントエンド バックエンドRDDを中心とした処理系から、DataFrameを中心としたハイレベルの処理系へProject Tungstenと題されるCPU利用効率の改善
Copyright © 2016 NTT DATA Corporation様々な要因により、ボトルネックのトレンドがCPUにSpark自体のアーキテクチャの改良•スケーラビリティ重視のシャッフルロジック(ソートベースシャッフル)•ネットワーク越しにデータを転送する際のメモリコピー回数の削減(Netty)DataFrameをベースとした処理の最適化•I/Oの削減•処理の最適化昨今のハードウェアトレンドの変化•SSDや高スループットのネットワークの利用が広がってきた•一方でCPUのクロック数は頭打ち
Copyright © 2016 NTT DATA CorporationProject Tungsten独自のメモリ管理メモリ利用効率の向上無駄な中間オブジェクト生成の回避GCの削減HWキャッシュを考慮したデータレイアウトメモリアクセスの待ち時間の削減コードの動的生成条件分岐の削減ボクシング / アンボクシングによるオブジェクト生成の削減バーチャルメソッドコールの回数の削減SparkのCPU利用効率を改善するための工夫
Copyright © 2016 NTT DATA CorporationSpark 2.0 at Spark Summit EastSpark Summit EastがNYCで実施されています。Mateiの講演より。http://www.slideshare.net/databricks/2016-spark-summit-east-keynote-matei-zaharia
Copyright © 2016 NTT DATA CorporationまとめSparkは分散処理をいかに効率的に実装・実行するか?を追求している実行エンジン/インターフェースの工夫がたくさん=> RDD、DataFrame、Project Tungsten優等生的に様々な処理に標準対応=> MLlib、Spark Streaming、Spark SQL、GraphX抽象化されていることを生かし、ユースケースやハードウェアのトレンドを考慮して進化
Copyright © 2016 NTT DATA CorporationHadoop/Sparkのことなら、NTTデータにお任せくださいお問い合わせ先:株式会社NTTデータ 基盤システム事業本部OSSプロフェッショナルサービスURL: http://oss.nttdata.co.jp/hadoopメール: hadoop@kits.nttdata.co.jp TEL: 050-5546-2496
Copyright © 2011 NTT DATA CorporationCopyright © 2016 NTT DATA Corporation

Recommended

PPTX
Apache Sparkの基本と最新バージョン3.2のアップデート(Open Source Conference 2021 Online/Fukuoka ...
PDF
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
PDF
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
PPTX
本当は恐ろしい分散システムの話
PDF
分散トレーシング技術について(Open tracingやjaeger)
PDF
Where狙いのキー、order by狙いのキー
PDF
アーキテクチャから理解するPostgreSQLのレプリケーション
PDF
マイクロにしすぎた結果がこれだよ!
PPTX
大量のデータ処理や分析に使えるOSS Apache Sparkのご紹介(Open Source Conference 2020 Online/Kyoto ...
PDF
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
PPTX
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
PPTX
分析指向データレイク実現の次の一手 ~Delta Lake、なにそれおいしいの?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
PDF
PostgreSQLバックアップの基本
PDF
Dockerfile を書くためのベストプラクティス解説編
PDF
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
PPTX
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
PPTX
Power BI をアプリに埋め込みたい? ならば Power BI Embedded だ!
PDF
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
PDF
イミュータブルデータモデルの極意
PDF
Vacuum徹底解説
PPTX
Redisの特徴と活用方法について
PPTX
分散システムについて語らせてくれ
PDF
例外設計における大罪
PPTX
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
PDF
マイクロサービス 4つの分割アプローチ
PPTX
イベント・ソーシングを知る
PDF
イミュータブルデータモデル(世代編)
PDF
イミュータブルデータモデル(入門編)
PDF
Apache Spark超入門 (Hadoop / Spark Conference Japan 2016 講演資料)
PDF
Apache Spark の紹介(前半:Sparkのキホン)

More Related Content

PPTX
Apache Sparkの基本と最新バージョン3.2のアップデート(Open Source Conference 2021 Online/Fukuoka ...
PDF
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
PDF
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
PPTX
本当は恐ろしい分散システムの話
PDF
分散トレーシング技術について(Open tracingやjaeger)
PDF
Where狙いのキー、order by狙いのキー
PDF
アーキテクチャから理解するPostgreSQLのレプリケーション
PDF
マイクロにしすぎた結果がこれだよ!
Apache Sparkの基本と最新バージョン3.2のアップデート(Open Source Conference 2021 Online/Fukuoka ...
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
本当は恐ろしい分散システムの話
分散トレーシング技術について(Open tracingやjaeger)
Where狙いのキー、order by狙いのキー
アーキテクチャから理解するPostgreSQLのレプリケーション
マイクロにしすぎた結果がこれだよ!

What's hot

PPTX
大量のデータ処理や分析に使えるOSS Apache Sparkのご紹介(Open Source Conference 2020 Online/Kyoto ...
PDF
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
PPTX
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
PPTX
分析指向データレイク実現の次の一手 ~Delta Lake、なにそれおいしいの?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
PDF
PostgreSQLバックアップの基本
PDF
Dockerfile を書くためのベストプラクティス解説編
PDF
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
PPTX
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
PPTX
Power BI をアプリに埋め込みたい? ならば Power BI Embedded だ!
PDF
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
PDF
イミュータブルデータモデルの極意
PDF
Vacuum徹底解説
PPTX
Redisの特徴と活用方法について
PPTX
分散システムについて語らせてくれ
PDF
例外設計における大罪
PPTX
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
PDF
マイクロサービス 4つの分割アプローチ
PPTX
イベント・ソーシングを知る
PDF
イミュータブルデータモデル(世代編)
PDF
イミュータブルデータモデル(入門編)
大量のデータ処理や分析に使えるOSS Apache Sparkのご紹介(Open Source Conference 2020 Online/Kyoto ...
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
分析指向データレイク実現の次の一手 ~Delta Lake、なにそれおいしいの?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
PostgreSQLバックアップの基本
Dockerfile を書くためのベストプラクティス解説編
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Power BI をアプリに埋め込みたい? ならば Power BI Embedded だ!
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
イミュータブルデータモデルの極意
Vacuum徹底解説
Redisの特徴と活用方法について
分散システムについて語らせてくれ
例外設計における大罪
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
マイクロサービス 4つの分割アプローチ
イベント・ソーシングを知る
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(入門編)

Viewers also liked

PDF
Apache Spark超入門 (Hadoop / Spark Conference Japan 2016 講演資料)
PDF
Apache Spark の紹介(前半:Sparkのキホン)
PDF
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
PDF
ちょっと理解に自信がないな という皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)
PDF
Apache Sparkのご紹介 (後半:技術トピック)
PPTX
Apache Spark チュートリアル
PPTX
Res netと派生研究の紹介
PPTX
サーバ構築・デプロイが簡単に!Elastic beanstalk
PDF
SparkMLlibで始めるビッグデータを対象とした機械学習入門
PDF
なぜApache HBaseを選ぶのか? #cwt2013
PPTX
Gis tools for hadoopを用いたビッグデータ処理の検証
PPTX
Hadoopによる空間ビッグデータ処理の試み
PDF
Apache Hadoopを利用したビッグデータ分析基盤
PPTX
Spark Streamingを使ってみた ~Twitterリアルタイムトレンドランキング~
PDF
最近のストリーム処理事情振り返り
PDF
Sparkパフォーマンス検証
PDF
[db tech showcase Tokyo 2017] AzureでOSS DB/データ処理基盤のPaaSサービスを使ってみよう (Azure Dat...
PPTX
5分で分るWebRTCコーデックウォーズ
PDF
そんなリザルトキャッシュで大丈夫か? #jjug
PDF
What the Spark!? Intro and Use Cases
Apache Spark超入門 (Hadoop / Spark Conference Japan 2016 講演資料)
Apache Spark の紹介(前半:Sparkのキホン)
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
ちょっと理解に自信がないな という皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)
Apache Sparkのご紹介 (後半:技術トピック)
Apache Spark チュートリアル
Res netと派生研究の紹介
サーバ構築・デプロイが簡単に!Elastic beanstalk
SparkMLlibで始めるビッグデータを対象とした機械学習入門
なぜApache HBaseを選ぶのか? #cwt2013
Gis tools for hadoopを用いたビッグデータ処理の検証
Hadoopによる空間ビッグデータ処理の試み
Apache Hadoopを利用したビッグデータ分析基盤
Spark Streamingを使ってみた ~Twitterリアルタイムトレンドランキング~
最近のストリーム処理事情振り返り
Sparkパフォーマンス検証
[db tech showcase Tokyo 2017] AzureでOSS DB/データ処理基盤のPaaSサービスを使ってみよう (Azure Dat...
5分で分るWebRTCコーデックウォーズ
そんなリザルトキャッシュで大丈夫か? #jjug
What the Spark!? Intro and Use Cases

Similar to Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)

PDF
Spark SQL - The internal -
PDF
Apache spark 2.3 and beyond
PDF
Apache Spark 1000 nodes NTT DATA
PDF
開発中の新機能 Spark Declarative Pipeline に飛びついてみたが難しかった(JEDAI DAIS Recap#2 講演資料)
PPTX
Apache Sparkを使った感情極性分析
PDF
Sparkコミュニティに飛び込もう!(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)
PDF
MapReduceを置き換えるSpark 〜HadoopとSparkの統合〜 #cwt2015
PPTX
レベル1エンジニア、最強コミッタに憧れコミュニティ活動を始める ~Apache Spark: 初めてのパッチ編~(Open Source Conferen...
PPTX
Sparkにプルリク投げてみた
PDF
MapReduce/Spark/Tezのフェアな性能比較に向けて (Cloudera World Tokyo 2014 LT講演)
PPTX
2014 11-20 Machine Learning with Apache Spark 勉強会資料
PDF
Introduction to Hadoop and Spark (before joining the other talk) and An Overv...
PDF
ビッグじゃなくても使えるSpark Streaming
PDF
Yifeng spark-final-public
PDF
Survey of Apache Spark
PPTX
Pythonで入門するApache Spark at PyCon2016
PDF
[Oracle big data jam session #1] Apache Spark ことはじめ
PPTX
Spark Summit 2014 の報告と最近の取り組みについて
PPTX
JP version - Beyond Shuffling - Apache Spark のスケールアップのためのヒントとコツ
PPTX
SparkRをつかってみた(Japan.R)
Spark SQL - The internal -
Apache spark 2.3 and beyond
Apache Spark 1000 nodes NTT DATA
開発中の新機能 Spark Declarative Pipeline に飛びついてみたが難しかった(JEDAI DAIS Recap#2 講演資料)
Apache Sparkを使った感情極性分析
Sparkコミュニティに飛び込もう!(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)
MapReduceを置き換えるSpark 〜HadoopとSparkの統合〜 #cwt2015
レベル1エンジニア、最強コミッタに憧れコミュニティ活動を始める ~Apache Spark: 初めてのパッチ編~(Open Source Conferen...
Sparkにプルリク投げてみた
MapReduce/Spark/Tezのフェアな性能比較に向けて (Cloudera World Tokyo 2014 LT講演)
2014 11-20 Machine Learning with Apache Spark 勉強会資料
Introduction to Hadoop and Spark (before joining the other talk) and An Overv...
ビッグじゃなくても使えるSpark Streaming
Yifeng spark-final-public
Survey of Apache Spark
Pythonで入門するApache Spark at PyCon2016
[Oracle big data jam session #1] Apache Spark ことはじめ
Spark Summit 2014 の報告と最近の取り組みについて
JP version - Beyond Shuffling - Apache Spark のスケールアップのためのヒントとコツ
SparkRをつかってみた(Japan.R)

More from NTT DATA OSS Professional Services

PDF
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
PDF
Global Top 5 を目指す NTT DATA の確かで意外な技術力
PDF
Apache Hadoopの新機能Ozoneの現状
PDF
Apache Hadoopの未来 3系になって何が変わるのか?
PDF
Structured Streaming - The Internal -
PPTX
ブロックチェーンの仕組みと動向(入門編)
PDF
SIerとオープンソースの美味しい関係 ~コミュニティの力を活かして世界を目指そう~
PDF
データ活用をもっともっと円滑に! ~データ処理・分析基盤編を少しだけ~
PDF
HDFS basics from API perspective
PDF
HDFS Router-based federation
PPTX
今からはじめるPuppet 2016 ~ インフラエンジニアのたしなみ ~
PDF
商用ミドルウェアのPuppet化で気を付けたい5つのこと
PDF
Application of postgre sql to large social infrastructure
PDF
Apache Hadoop and YARN, current development status
PDF
Apache Hadoop 2.8.0 の新機能 (抜粋)
PDF
Hadoopエコシステムの最新動向とNTTデータの取り組み (OSC 2016 Tokyo/Spring 講演資料)
PDF
20170303 java9 hadoop
PDF
Hadoopエコシステムのデータストア振り返り
PDF
Distributed data stores in Hadoop ecosystem
PDF
Application of postgre sql to large social infrastructure jp
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
Global Top 5 を目指す NTT DATA の確かで意外な技術力
Apache Hadoopの新機能Ozoneの現状
Apache Hadoopの未来 3系になって何が変わるのか?
Structured Streaming - The Internal -
ブロックチェーンの仕組みと動向(入門編)
SIerとオープンソースの美味しい関係 ~コミュニティの力を活かして世界を目指そう~
データ活用をもっともっと円滑に! ~データ処理・分析基盤編を少しだけ~
HDFS basics from API perspective
HDFS Router-based federation
今からはじめるPuppet 2016 ~ インフラエンジニアのたしなみ ~
商用ミドルウェアのPuppet化で気を付けたい5つのこと
Application of postgre sql to large social infrastructure
Apache Hadoop and YARN, current development status
Apache Hadoop 2.8.0 の新機能 (抜粋)
Hadoopエコシステムの最新動向とNTTデータの取り組み (OSC 2016 Tokyo/Spring 講演資料)
20170303 java9 hadoop
Hadoopエコシステムのデータストア振り返り
Distributed data stores in Hadoop ecosystem
Application of postgre sql to large social infrastructure jp

Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)

  • 1.
    Copyright © 2016NTT DATA CorporationNTTデータ 基盤システム事業本部OSSプロフェッショナルサービス土橋 昌吉田 耕陽Apache Sparkに手を出してヤケドしないための基本~「Apache Spark入門より」~
  • 2.
    Copyright © 2016NTT DATA Corporation自己紹介土橋 昌オープンソースを徹底活用してシステム開発/運用するプロジェクト、R&Dに従事。登壇歴Spark Summit 2014、HadoopConference Japan、Strata + HadoopWorldなど執筆等Spark関連の執筆では「Apache Spark入門」や「初めてのSpark」付録、雑誌など吉田 耕陽入社以来、Hadoopをはじめとする分散処理OSS関連の案件に従事。登壇歴Hadoop Conference Japan、OSCなど執筆等「Apache Spark入門」、デジタルプラクティスなど
  • 3.
    Copyright © 2016NTT DATA Corporation本日のおはなしSparkのキホンを知って…Sparkアプリの書き方を知って…Sparkの中身を少しだけ知って…大規模データ処理を少しでも身近に感じて楽しんでいただければ嬉しいです
  • 4.
    Copyright © 2016NTT DATA Corporation翔泳社「Apache Spark入門」について第1章:Apache Sparkとは第2章:Sparkの処理モデル第3章:Sparkの導入第4章:Sparkアプリケーションの開発と実行第5章:基本的なAPIを用いたプログラミング第6章:構造化データセットを処理する - Spark SQL -第7章:ストリームデータを処理する - Spark Streaming -第8章:機械学習を行う - MLlib -AppendixA. GraphXによるグラフ処理B. SparkRを使ってみるC. 機械学習とストリーム処理の連携D. Web UIの活用ここで紹介する内容のもっと詳しい版が掲載されています。Sparkの動作原理から標準ライブラリを使った具体的なプログラム例まで。Spark1.5系対応
  • 5.
    Copyright © 2016NTT DATA Corporationまず初めにApache Sparkとは?ひとことで言うと…オープンソースの並列分散処理系並列分散処理の面倒な部分は処理系が解決してくれる!• 障害時のリカバリ• タスクの分割やスケジューリング• etc大量のデータを たくさんのサーバを並べて並列分散処理し、現実的な時間(数分~数時間)で目的の処理結果を得るデータ管理には向きませんが、データ処理には向いています。
  • 6.
    Copyright © 2016NTT DATA Corporation守備範囲の広い優等生ですが、あくまで分散処理系いろいろ出来るので、ついうっかり分散処理でなくても良い処理も実装しようとしがちですが、それはあまり筋が良くありません。(そういう場合は分散のための仕組みは不要なものとなります)とはいえ、もちろん規模の小さなデータに対しても動きます。現実的には実現したいことの全体の傾向によってSparkを使うか、他の手段を組み合わせるのかを判断して用います。
  • 7.
    Copyright © 2016NTT DATA Corporationでは、うちではSpark使うべき?使わないべき?自分にとって嬉しいかどうかは、PoCなどを通じてちゃんと確かめましょう。すでにHadoopを利用している1台のマシンでは収まらない量のデータがあるデータ件数が多くて既存の仕組みだと一括処理が辛いSQLもいいが、他の言語の内部DSLとして実装したい集計を中心としたストリーム処理をやりたい大規模データに対して定番の機械学習アルゴリズムを適用したいできればSparkがあると嬉しい典型的なケース例
  • 8.
    Copyright © 2016NTT DATA Corporationとはいえ、試すのであれば簡単!http://spark.apache.org/downloads.htmlDemoJDKのインストールされた環境でパッケージを解凍して動かすSpark体験の始まり
  • 9.
    Copyright © 2016NTT DATA Corporationさて、ここでひとつ質問なぜSparkが生まれたのか?
  • 10.
    Copyright © 2016NTT DATA Corporationさて、ここでひとつ質問オープンソースの並列分散処理系としては、既に Hadoop が普及しているけど?これで良くない?
  • 11.
    Copyright © 2016NTT DATA Corporationさて、ここでひとつ質問ものすごく簡単にHadoopの特徴をおさらいし、Sparkが生まれた背景 を紐解きます使ったことのない/使い始めのプロダクトに触れるときは重要
  • 12.
    Copyright © 2016NTT DATA CorporationHadoopのあっさり紹介Hadoop:コモディティなサーバを複数並べて分散処理1. データを貯めるHDFS2. データ処理のリソースを管理するYARN3. 処理するMapReduceフレームワーク
  • 13.
    Copyright © 2016NTT DATA CorporationHadoopのあっさり紹介Hadoop:コモディティなサーバを複数並べて分散処理1. データを貯めるHDFS2. データ処理のリソースを管理するYARN3. 処理するMapReduceフレームワークSparkはここに相当
  • 14.
    Copyright © 2016NTT DATA Corporation(補足) MapReduceフレームワークとは アプリ開発者はMap処理とReduce処理を実装する(原則Java) 上記を元にフレームワークが分散処理する。障害発生時もリトライで処理が継続する。 基本的にサーバを増やせば処理性能はスケールアウトするMap処理 Reduce処理Map処理とReduce処理で完結したジョブを形成するデータの加工やフィルタリングなどデータの集計や結合などHDFSHDFSと組み合わせることで、I/Oが分散され、高スループットで処理可能HDFS処理結果処理対象のデータ
  • 15.
    Copyright © 2016NTT DATA CorporationMapReduceフレームワークの嬉しい点をざっくりとシンプルな処理モデル大量データでも動き切ってくれること企業で使うのに程良かったわけですね
  • 16.
    Copyright © 2016NTT DATA CorporationMapReduceフレームワークの課題とはいえ、色々と使っていくと…処理効率が気になってきます ジョブが多段に構成される場合 複数のジョブで何度も同じデータを利用する場合M RMap処理 Reduce処理M R M R ・・・・・・・・・ジョブM RM Rデータの受け渡し
  • 17.
    Copyright © 2016NTT DATA Corporation処理効率が気になる場面の例ジョブが多段に構成される場合反復処理•機械学習•グラフ処理複雑な業務処理複数のジョブで何度も同じデータを利用する場合アドホックな分析処理複雑な業務処理
  • 18.
    Copyright © 2016NTT DATA Corporationジョブが多段に構成される場合の課題 ジョブ間でのデータの受け渡しのために、都度HDFSへのI/Oが発生 HDFSへの都度のI/Oのレイテンシが、処理時間の大部分を占めることにつながるM RMap処理 Reduce処理M R M R ・・・ジョブHDFSIO IOIO IOジョブ間のデータの受け渡しのたびに、HDFSへのI/Oが伴う
  • 19.
    Copyright © 2016NTT DATA Corporation複数のジョブで何度も同じデータを利用する場合の課題何度も利用するデータを効率的に扱う仕組みがないため、同じデータを利用する場合に都度巨大なデータの読み出しのための待ち時間が発生する・・・・・・M RM R・・・M R・・・M RHDFSジョブごとに大きなデータの読み込みの待ち時間がかかる
  • 20.
    Copyright © 2016NTT DATA Corporationそこで生まれたSparkとは?抽象化を進めて、スループットとレイテンシのバランスを追求し、使いやすいAPIをユーザに提供。最新安定バージョンは1.6.0。現在2.0.0のリリースに向けて開発中RDD RDD RDDRDDユーザ定義の処理の流れフォーマット変換 グルーピング フィルター 集計入力処理モデルRDDと呼ばれる部分故障への耐性を考慮した分散コレクションに対し、典型的なデータ処理を繰り返して目的の結果を得る
  • 21.
    Copyright © 2016NTT DATA CorporationSparkのプログラミングモデルの基礎RDDに対する処理は、コレクション操作のように記述Scala / Java / Python向けのAPIが提供されているインタラクティブシェルが「試行錯誤」を加速する都度のビルドが不要なため、ロジックの試作から効果の確認のサイクルを高速化できるrdd.filter(...).map(...).reduceByKey(...).saveAsText(...)フィルタして 加工して 集計して 結果を保存
  • 22.
    Copyright © 2016NTT DATA Corporation【DEMO】 WordCountみようval textFile = sc.textFile("CHANGES.txt")val wordCounts = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b)=> a + b)wordCounts.sortBy(_._2,false).take(10)res0: Array[(String, Int)] = Array(("",61509), (Commit:,6830), (-0700,3672), (-0800,2162),(in,1766), (to,1417), (for,1298), ([SQL],1277), (the,777), (and,663))wordCounts.filter(_._1.matches("[a-zA-Z0-9]+")).sortBy(_._2,false).take(10)res1: Array[(String, Int)] = Array((in,1766), (to,1417), (for,1298), (the,777), (and,663), (Add,631),(of,630), (Fix,547), (Xin,491), (Reynold,490))まずは簡単に、tgzを展開した直下にあるCHANGES.txtで試してみるちゃんとカウントできてるかな?数の多い上位10件を出力してみようノイズが多いな…英数字のみ含まれる文字列のみフィルタしてみようspark-shellを起動し、Hadoop界隈のHello WorldであるWordCount実行試行錯誤できる
  • 23.
    Copyright © 2016NTT DATA Corporation高スループットと低レイテンシを両立する工夫複雑な処理を少ないジョブ数で実現できるRDD RDD RDDRDDRDD RDDSparkジョブRDDごとに中間データを都度出力するわけではないため、HDFSなどの外部分散ストレージへのI/Oが抑えられるHDFSIOIOIORDDの加工
  • 24.
    Copyright © 2016NTT DATA Corporation【DEMO】ウェブUIからジョブの構成を確認WordCount(takeで上位10件確認まで)を実行するときのDAG実際に実行される処理は「ステージ」を軸に構成され、「タスク」として計算マシンで実行される
  • 25.
    Copyright © 2016NTT DATA Corporation高スループットと低レイテンシを両立する工夫何度も利用するRDDは、複数のサーバのメモリに分割してキャッシュしてI/Oや計算を減らせるRDDRDDジョブARDDHDFSRDDジョブBはジョブAがキャッシュしたデータを利用できるRDD RDD RDDジョブBキャッシュを活用することで、同じデータを利用する場合でも、都度データを読み込む必要がないキャッシュ済みのRDDキャッシュを利用できるので、HDFSからのデータの読み込みは発生しない
  • 26.
    Copyright © 2016NTT DATA Corporation高スループットと低レイテンシを両立する工夫キャッシュは反復処理にも有効RDD RDD RDD前段の反復処理の結果を入力とするジョブ キャッシュ済みのRDD2回目の反復以降は、キャッシュしたRDDを処理すれば良い。HDFS最初の反復のみ、HDFSからデータを読み出す
  • 27.
    Copyright © 2016NTT DATA Corporation【DEMO】キャッシュ機能を使ってみようwordCounts.cache()wordCounts.filter(_._1.matches("[a-zA-Z0-9]+")).sortBy(_._2,false).take(10)res1: Array[(String, Int)] = Array((in,1766), (to,1417), (for,1298), (the,777), (and,663), (Add,631),(of,630), (Fix,547), (Xin,491), (Reynold,490))wordCounts.filter(_._1.matches("[a-zA-Z0-9]+")).sortBy(_._2,false).take(10)res1: Array[(String, Int)] = Array((in,1766), (to,1417), (for,1298), (the,777), (and,663), (Add,631),(of,630), (Fix,547), (Xin,491), (Reynold,490)).cache()でキャッシュ機能を有効化。(ここではキャッシュされない)アクション契機に処理が実行され、データの実体がキャッシュに残るWordCountの続き。先ほどのwordCountsを明示的にキャッシュしてみる次にキャッシュされたRDDを対象とした処理を実行すると、キャッシュから優先的にデータが読み込まれる。(キャッシュし切れなかったデータは、通常通り計算されて求められる)
  • 28.
    Copyright © 2016NTT DATA Corporation【DEMO】キャッシュされたデータの様子キャッシュの状況は、WebUIのStorageタブから確認できる
  • 29.
    Copyright © 2016NTT DATA Corporationデータソース(HDFSなど)速いだけじゃないSparkの豊富な機能http://cdn.oreillystatic.com/en/assets/1/event/126/Apache%20Spark_%20What_s%20new_%20what_s%20coming%20Presentation.pdfSQL
  • 30.
    Copyright © 2016NTT DATA Corporationデータソース(HDFSなど)速いだけじゃないSparkの豊富な機能http://cdn.oreillystatic.com/en/assets/1/event/126/Apache%20Spark_%20What_s%20new_%20what_s%20coming%20Presentation.pdfSQL分散処理エンジンを含むコア部分
  • 31.
    Copyright © 2016NTT DATA Corporationデータソース(HDFSなど)速いだけじゃないSparkの豊富な機能• 機械学習などの複雑な処理を簡単に実現するための標準ライブラリhttp://cdn.oreillystatic.com/en/assets/1/event/126/Apache%20Spark_%20What_s%20new_%20what_s%20coming%20Presentation.pdfSQL
  • 32.
    Copyright © 2016NTT DATA Corporationデータソース(HDFSなど)速いだけじゃないSparkの豊富な機能• 例えばScala/Java/Python/SQL等で処理が記述可能• インタラクティブシェルが付属し、試行錯誤も可能http://cdn.oreillystatic.com/en/assets/1/event/126/Apache%20Spark_%20What_s%20new_%20what_s%20coming%20Presentation.pdfSQL
  • 33.
    Copyright © 2016NTT DATA Corporationデータソース(HDFSなど)速いだけじゃないSparkの豊富な機能http://cdn.oreillystatic.com/en/assets/1/event/126/Apache%20Spark_%20What_s%20new_%20what_s%20coming%20Presentation.pdfSQL• YARNなどのクラスタ管理基盤と連係動作する• すでにHadoop環境がある場合は特に導入簡単
  • 34.
    Copyright © 2016NTT DATA Corporationデータソース(HDFSなど)速いだけじゃないSparkの豊富な機能http://cdn.oreillystatic.com/en/assets/1/event/126/Apache%20Spark_%20What_s%20new_%20what_s%20coming%20Presentation.pdfSQL• データソースの分散ファイルシステムにはHDFSも利用可能• 従来MapReduceで実装していた処理をSparkにマイグレーションしやすい
  • 35.
    Copyright © 2016NTT DATA Corporation便利なライブラリ: Spark SQLDataFrameに対してSQL/HiveQLを発行して分散処理する└ RDDの上に成り立つスキーマ付きのテーブル状のデータ構造SQLを使い慣れたデータ分析者担当者が分散処理の恩恵を受けられる// ScalaでSQLを使用する例Val teenager = sqlContext.sql(“SELECT name FROM people WHEREage >= 13 AND age <= 19”)例えばPythonによるデータ分析アプリケーションを実装していて、「ここはSQLで書きたいな」って箇所で有用。
  • 36.
    Copyright © 2016NTT DATA Corporation便利なライブラリ: Spark SQLオプティマイザ付きRDDベースの処理の物理プランが生成される構造化データを取り扱うための仕組みが付属– Parquet / ORC / CSV / JSON / テキスト / JDBC ...– データソースによってはフィルタ処理をデータソース側に移譲することで、無駄なデータの読み込みを避けられるhttp://cdn.oreillystatic.com/en/assets/1/event/126/Apache%20Spark_%20What_s%20new_%20what_s%20coming%20Presentation.pdfオペレータの実行順序の最適化などデータソースの特性を活用した最適化など
  • 37.
    Copyright © 2016NTT DATA Corporation【DEMO】SQLによる処理を実行してみるcase class Person(name: String, age: Int)val people = sc.textFile("examples/src/main/resources/people.txt").map(_.split(",")).map(p =>Person(p(0), p(1).trim.toInt)).toDF()people.registerTempTable("people")val teenagers = sqlContext.sql("SELECT name, age FROM people WHERE age >= 13 AND age<= 19").showサンプルに含まれるデータで、SparkSQLを試してみる参考 : http://spark.apache.org/docs/latest/sql-programming-guide.html
  • 38.
    Copyright © 2016NTT DATA Corporation便利なライブラリ: MLlib / ML Pipelines統計処理、機械学習を分散処理するためのライブラリレコメンデーション / 分類 / 予測など分散処理に向くポピュラーなアルゴリズムを提供2016/2現在、spark.mllib と spark.ml の2種類のパッケージが存在(一例)RDD利用 DataFrame利用
  • 39.
    Copyright © 2016NTT DATA Corporation便利なライブラリ: MLlib / ML Pipelines昨今はspark.mlのML Pipelinesの開発が活発scikit-learnのように機械学習を含む処理全体をパイプラインとして扱うAPIval 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) // モデルの当てはめ処理全体のポータビリティ向上!見通しの良くなって開発効率の向上!
  • 40.
    Copyright © 2016NTT DATA Corporation【DEMO】K-meansによるカテゴライズimport org.apache.spark.mllib.clustering.KMeansimport org.apache.spark.mllib.linalg.Vectorsval data = sc.textFile("data/mllib/kmeans_data.txt")val parsedData = data.map { s =>Vectors.dense(s.split(' ').map(_.toDouble))}.cache()val numClusters = 2val numIterations = 20val clusters = KMeans.train(parsedData, numClusters, numIterations)// 確認clusters.kclusters.clusterCenters// 入力データのベクトルが所属するクラスタを出力parsedData.foreach{ vec =>println(vec + " => " + clusters.predict(vec))}サンプルに含まれるサンプルデータでK-meansを試してみる
  • 41.
    Copyright © 2016NTT DATA Corporation便利なライブラリ: Spark Streaming小さなバッチ処理を繰り返してストリーミング処理を実現ストリーム処理用のスケジューラが以下の流れを繰り返し実行。実際のデータ処理はSparkの機能で実現。http://spark.incubator.apache.org/docs/latest/streaming-programming-guide.htmlストリームデータを小さく区切って取りこむ区切った塊(バッチ)に対してマイクロバッチ処理を適用する
  • 42.
    Copyright © 2016NTT DATA Corporation便利なライブラリ: Spark Streaming特に向いているケース集計を中心とした処理バッチ処理と共通の処理ある程度のウィンドウ幅でスループットも重視する処理
  • 43.
    Copyright © 2016NTT DATA Corporation【DEMO】 Twitterのハッシュタグフィルタリングimport org.apache.spark.streaming.twitter.TwitterUtilsimport org.apache.spark.streaming.{Durations, StreamingContext}import org.apache.spark.streaming.{Seconds, StreamingContext}import org.apache.log4j.{Level, Logger}Logger.getRootLogger.setLevel(Level.ERROR)$./bin/spark-shell --jars lib/spark-examples-1.6.0-hadoop2.6.0.jarLocalモードで本コードを動作させると多くのWARNが出力され見づらくなるため、ログレベルをErrorレベルに変更SparkStreamingでお手軽にTwitterデータを使ってみるTwitter用のライブラリ(org.apache.spark.streaming.twitter.TwitterUtils)を利用するがSparkのJarには含まれないため、デモではお手軽にサンプルプログラムのjarファイルを読み込ませて実行
  • 44.
    Copyright © 2016NTT DATA Corporation【DEMO】 Twitterのハッシュタグフィルタリングval config = new java.util.Propertiesconfig.load(this.getClass().getClassLoader().getResourceAsStream("config.properties"))System.setProperty("twitter4j.oauth.consumerKey", config.get("twitter_consumerKey").toString)System.setProperty("twitter4j.oauth.consumerSecret", config.get("twitter_consumerSecret").toString)System.setProperty("twitter4j.oauth.accessToken", config.get("twitter_accessToken").toString)System.setProperty("twitter4j.oauth.accessTokenSecret",config.get("twitter_accessTokenSecret").toString)val filters = Array("#devsumi")val ssc = new StreamingContext(sc, Seconds(10))val stream = TwitterUtils.createStream(ssc, None, filters)//Tweet本文のみ出力stream.map(status => status.getText()).printssc.start()ssc.awaitTermination()-------------------------------------------Time: 1455770400000 ms-------------------------------------------#devsumi デモなう検索ワードを入れる前ページの続き10秒に1回のマイクロバッチデモではTwitter API Keyは外部ファイルとして準備この後にも様々な処理を追加できます
  • 45.
    Copyright © 2016NTT DATA Corporation翔泳社「Apache Spark入門」について第1章:Apache Sparkとは第2章:Sparkの処理モデル第3章:Sparkの導入第4章:Sparkアプリケーションの開発と実行第5章:基本的なAPIを用いたプログラミング第6章:構造化データセットを処理する - Spark SQL -第7章:ストリームデータを処理する - Spark Streaming -第8章:機械学習を行う - MLlib -AppendixA. GraphXによるグラフ処理B. SparkRを使ってみるC. 機械学習とストリーム処理の連携D. Web UIの活用ここで紹介した内容のもっと詳しい版が掲載されています。Sparkの動作原理から標準ライブラリを使った具体的なプログラム例まで。Spark1.5系対応
  • 46.
    Copyright © 2016NTT DATA Corporation 46イマドキのSpark
  • 47.
    Copyright © 2016NTT DATA Corporation劇的な進化を遂げつづけるSparkRDDを基礎とした分散処理、豊富で便利なライブラリ群の存在などの基本コンセプトは変わらないが、決して進化を止めていない。特に2014年から2016年に向けて、Sparkの常識が変化。2014年~2015年にユーザ、開発者が色々と言っていた不満の多くが考慮されているのは興味深いです。過去のカンファレンスのネタなどを振り返ると面白いです。
  • 48.
    Copyright © 2016NTT DATA CorporationイマドキのSparkフロントエンド バックエンドRDDを中心とした処理系から、DataFrameを中心としたハイレベルの処理系へProject Tungstenと題されるCPU利用効率の改善
  • 49.
    Copyright © 2016NTT DATA CorporationイマドキのSparkフロントエンド バックエンドRDDを中心とした処理系から、DataFrameを中心としたハイレベルの処理系へProject Tungstenと題されるCPU利用効率の改善
  • 50.
    Copyright © 2016NTT DATA Corporation RDDのAPIは直感的だが、規模が大きくなり、複雑になると・・・ 見通しが悪い? 最適化が面倒? よりハイレベルのAPIがほしい RDDベースの処理の場合、言語によってバックエンドの処理系が異なるため、言語によってパフォーマンスが異なるRDDベースの処理の課題どこに何が入っているんだ?!Pythonのデーモン内で処理が実行される
  • 51.
    Copyright © 2016NTT DATA CorporationDataFrame APIDataFrameに対してSQLを発行できるだけではなく、DataFrameAPIと呼ばれるデータ処理用のAPI構造化データの処理を簡潔に記述http://cdn.oreillystatic.com/en/assets/1/event/126/Apache%20Spark_%20What_s%20new_%20what_s%20coming%20Presentation.pdfこれが…こうなる!これは簡潔!
  • 52.
    Copyright © 2016NTT DATA CorporationDataFrame APIしかも速い。Spark SQLのオプティマイザの恩恵オプティマイザによってJVMで動作する物理プランが生成されるため、開発言語の違いによる著しい性能劣化は起こらないhttp://www.slideshare.net/databricks/introducing-dataframes-in-spark-for-large-scale-data-science
  • 53.
    Copyright © 2016NTT DATA Corporationお手軽にcsvファイルをDataFrameとして利用するために、デモではspark-csvを利用。Spark Packagesのリポジトリに存在するため--packagesオプションで指定。※spark-csvは、Spark2.0以降よりビルトインのライブラリとして利用可能【DEMO】 DataFrame APIを使ってみるval df = sqlContext.read.format("com.databricks.spark.csv").option("header", "true").option("inferSchema","true").load(”/tmp/weather.csv")df.showdf.schema// 雪が降った日は何日?df.filter(df("降雪量合計(cm)") > 0).count// 最高気温、最適気温の平均は?df.agg(avg("最高気温(℃)"),avg("最低気温(℃)")).show$ spark-shell --packages com.databricks:spark-csv_2.11:1.3.0気象庁のオープンデータを元にしたcsvファイルを利用
  • 54.
    Copyright © 2016NTT DATA CorporationイマドキのSparkフロントエンド バックエンドRDDを中心とした処理系から、DataFrameを中心としたハイレベルの処理系へProject Tungstenと題されるCPU利用効率の改善
  • 55.
    Copyright © 2016NTT DATA Corporation様々な要因により、ボトルネックのトレンドがCPUにSpark自体のアーキテクチャの改良•スケーラビリティ重視のシャッフルロジック(ソートベースシャッフル)•ネットワーク越しにデータを転送する際のメモリコピー回数の削減(Netty)DataFrameをベースとした処理の最適化•I/Oの削減•処理の最適化昨今のハードウェアトレンドの変化•SSDや高スループットのネットワークの利用が広がってきた•一方でCPUのクロック数は頭打ち
  • 56.
    Copyright © 2016NTT DATA CorporationProject Tungsten独自のメモリ管理メモリ利用効率の向上無駄な中間オブジェクト生成の回避GCの削減HWキャッシュを考慮したデータレイアウトメモリアクセスの待ち時間の削減コードの動的生成条件分岐の削減ボクシング / アンボクシングによるオブジェクト生成の削減バーチャルメソッドコールの回数の削減SparkのCPU利用効率を改善するための工夫
  • 57.
    Copyright © 2016NTT DATA CorporationSpark 2.0 at Spark Summit EastSpark Summit EastがNYCで実施されています。Mateiの講演より。http://www.slideshare.net/databricks/2016-spark-summit-east-keynote-matei-zaharia
  • 58.
    Copyright © 2016NTT DATA CorporationまとめSparkは分散処理をいかに効率的に実装・実行するか?を追求している実行エンジン/インターフェースの工夫がたくさん=> RDD、DataFrame、Project Tungsten優等生的に様々な処理に標準対応=> MLlib、Spark Streaming、Spark SQL、GraphX抽象化されていることを生かし、ユースケースやハードウェアのトレンドを考慮して進化
  • 59.
    Copyright © 2016NTT DATA CorporationHadoop/Sparkのことなら、NTTデータにお任せくださいお問い合わせ先:株式会社NTTデータ 基盤システム事業本部OSSプロフェッショナルサービスURL: http://oss.nttdata.co.jp/hadoopメール: hadoop@kits.nttdata.co.jp TEL: 050-5546-2496
  • 60.
    Copyright © 2011NTT DATA CorporationCopyright © 2016 NTT DATA Corporation

[8]ページ先頭

©2009-2025 Movatter.jp