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.

SparkMLlibで始めるビッグデータを対象とした機械学習入門

932 views

Published on

<機械学習及びビッグデータの概要>
・機械学習とビッグデータ
・ビッグデータの概要
 Hadoop、Spark、SparkMLlib
・機械学習の概要
 データ分析のアプローチ、機械学習の手法

<Hadoop及びSpark MLlibのシステム構成例>
・Hadoop/Sparkのシステム構成要素
 Hadoop、Hive、Spark、PySpark、jupyter notebook
・Hadoop/Sparkのシステム構成例・環境構築
 システム構成例、環境構築の流れ

<機械学習システムの開発プロセス>
・機械学習システムの開発プロセスフロー
 CRISP-DM、モデル開発の流れ
・モデル開発のためのツール
 基礎集計と可視化、特徴量処理、予測精度

<Spark MLlibを使った機械学習の紹介>
・Spark MLlibでの機械学習
 分類と回帰、クラスタリング、協調フィルタリング
・Spark MLlibでの機械学習の応用
 MLPipelines、アルゴリズムの実装

Published in: Software
  • Be the first to comment

SparkMLlibで始めるビッグデータを対象とした機械学習入門

  1. 1. takemikamiʼs note ‒ http://takemikami.com/ Spark MLlibで始める ビッグデータを対象とした機械学習⼊⾨ Copyright (C) Takeshi Mikami. All rights reserved. 1 三上威(フリーランスITエンジニア) twitter: @takemikami 2017.10.28 TKPガーデンシティ渋⾕ ホールB Spark MLlib 機械学習 ビッグデータ TECH & BRIDGE MEETING 〜エンジニア講演会〜 第4回 ⼈⼯知能・機械学習・ディープラーニング 〜中級者向け〜
  2. 2. takemikamiʼs note ‒ http://takemikami.com/ はじめに • 対象: 機械学習やビッグデータ未経験のエンジニア • テーマ: Spark MLlibを利⽤した ビッグデータを対象とした機械学習 • 内容 • 機械学習及びビッグデータの概要 • Hadoop及びSpark MLlibのシステム構成例 • 機械学習システムの開発プロセス • Spark MLlibを使った機械学習の紹介 Copyright (C) Takeshi Mikami. All rights reserved. 2 本資料で説明する内容を⽰します
  3. 3. takemikamiʼs note ‒ http://takemikami.com/ ⾃⼰紹介 • 三上威 (@takemikami) • フリーランスITエンジニア • データ分析及び機械学習等の応⽤システム開発 • マーケティングデータ分析基盤のシステム開発 • 略歴 • 確率論・情報通信ネットワーク @ 甲南⼤学理学部応⽤数学科 • Web系システムの開発・構築 @ NEC系SIer • 旅⾏系ECサイトのマーケティングデータ分析 @ DeNA • データ分析及び機械学習等の応⽤システム開発 @ フリーランス • 最近扱っている技術領域 • Hadoop&Spark, Scala, Python, hivemall, AWS Copyright (C) Takeshi Mikami. All rights reserved. 3 発表者のプロフィールを紹介します
  4. 4. takemikamiʼs note ‒ http://takemikami.com/ 機械学習を応⽤するためのスキル Copyright (C) Takeshi Mikami. All rights reserved. 4 ※丸⼭宏・⼭⽥敦・神⾕直樹共著「データサイエンティスト・ハンドブック」(近代科学社)を参考に作成 ビジネス⼒ (business problem solving) データエンジニアリング⼒ (data engineering) データサイエンス⼒ (data science) ビジネス課題を 理解・解決するスキル 統計・機械学習等の情報科学を 理解・活⽤するスキル データの加⼯・運⽤環境 を実装するスキル 機械学習を応⽤するために必要なスキルを紹介します データサイエンティスト に求められるスキルとして よく⽰されるものです
  5. 5. takemikamiʼs note ‒ http://takemikami.com/ ビジネス⼒とは • ビジネス課題を整理する 「このデータ分析によって解きたいビジネス課題は何か」を考える →課題を明確にしておかないと成果に結びつかない • ビジネス課題を説明する レポーティングやプレゼンスキル →意思決定者が理解出来ないと実⾏できない Copyright (C) Takeshi Mikami. All rights reserved. 5 機械学習を応⽤するためのビジネス⼒について説明します
  6. 6. takemikamiʼs note ‒ http://takemikami.com/ データサイエンス⼒とは • アルゴリズムを理解する 統計学や機械学習のアルゴリズムの理解 →理解していないとチューニングが⾏えない • データ・アルゴリズムの特性を理解する データの特性、それらを計算するための計算資源の⾒ →実⽤的にデータを活⽤するための設計に必要 Copyright (C) Takeshi Mikami. All rights reserved. 6 機械学習を応⽤するためのデータサイエンス⼒について説明します
  7. 7. takemikamiʼs note ‒ http://takemikami.com/ データエンジニアリング⼒とは • アルゴリズムの実装スキル ライブラリの活⽤スキル、アルゴリズムの実装スキル →システム化するために必要 • システムインフラの運⽤スキル ビッグデータ、並列分散処理などの理解と運⽤スキル →⼤量のデータを扱う場合に必要 Copyright (C) Takeshi Mikami. All rights reserved. 7 機械学習を応⽤するためのデータエンジニアリング⼒について説明します
  8. 8. takemikamiʼs note ‒ http://takemikami.com/ 本⽇扱う分野 (機械学習を応⽤するためのスキル) Copyright (C) Takeshi Mikami. All rights reserved. 8 ビジネス⼒ (business problem solving) データエンジニアリング⼒ (data engineering) データサイエンス⼒ (data science) データエンジニアリング を中⼼にお話しします 機械学習を応⽤するためのスキルの中で、本⽇お話する分野を⽰します
  9. 9. takemikamiʼs note ‒ http://takemikami.com/ 機械学習及びビッグデータの概要 機械学習とビッグデータ ビッグデータの概要 Hadoop、Spark、SparkMLlib 機械学習の概要 データ分析のアプローチ、機械学習の⼿法 Copyright (C) Takeshi Mikami. All rights reserved. 9
  10. 10. takemikamiʼs note ‒ http://takemikami.com/ 機械学習とビッグデータの位置づけ Copyright (C) Takeshi Mikami. All rights reserved. 10 機械学習とビッグデータ ビジネスシーンにおける、機械学習とビッグデータの位置づけを⽰します。 分析対象 データ分析 社会・ 業界 Data Warehouse 収集施策 収 集 DataMart 分析ツール 機械学習 加⼯ 分析・機械学習担当者 ⼈ 物 ・・・ 施策の検討や意思決定を、 機械学習で⽀援
  11. 11. takemikamiʼs note ‒ http://takemikami.com/ 機械学習とビッグデータの位置づけ Copyright (C) Takeshi Mikami. All rights reserved. 11 機械学習とビッグデータ ビジネスシーンにおける、機械学習とビッグデータの位置づけを⽰します。 分析対象 データ分析 社会・ 業界 Data Warehouse 収集施策 収 集 DataMart 分析ツール 機械学習 加⼯ 分析・機械学習担当者 ⼈ 物 ・・・ IoTの普及などにより ⼤量のデータを 収集出来るようになってきた 分散ファイルシステム・分散処理によって、 ⼤量のデータを保存・処理しやすくなってきた ⼤量のデータを対象とした 機械学習への要求
  12. 12. takemikamiʼs note ‒ http://takemikami.com/ Apache Hadoopとは • 「データ保存のための分散ファイルシステム」 「データ処理のための並列処理システム」 によってビッグデータの分散処理を実現する • 4つのモジュールで構成される • 共通ユーティリティ (Hadoop Common) • 分散ファイルシステム (Hadoop HDFS) • クラスタリソース・ジョブ管理 (Hadoop YARN) • 並列データ処理システム (Hadoop MapReduce) Copyright (C) Takeshi Mikami. All rights reserved. 12 ビッグデータの概要 Apache Hadoopの紹介をします ビッグデータ分散処理のフレームワーク
  13. 13. takemikamiʼs note ‒ http://takemikami.com/ HDFS(Hadoop Distributed File System)とは • HDFSとはHadoop独⾃の分散ファイルシステム。NameNodeと DataNodeで構成される Copyright (C) Takeshi Mikami. All rights reserved. 13 ビッグデータの概要 HDFS(Hadoop Distributed File SYstem)の紹介をします。 NameNode DataNode Hadoop Cluster DataNode DataNode ・・ ・ DataNode管理 メタ情報管理 分散して ファイルを保存 Client ※同じファイルを3つ以上のDataNodeに保持し、 DataNodeの障害に対応できるように設定するのが⼀般的 ①NameNodeにメタ情報を問い合わせ ②DataNode上のファイルにアクセス ① ②
  14. 14. takemikamiʼs note ‒ http://takemikami.com/ YARN(Yet Another Resource Negotiator)とは • YARNはHadoopクラスタのリソース管理と、ジョブスケジューリングを ⾏う。ResourceManagerとNodeManagerで構成される Copyright (C) Takeshi Mikami. All rights reserved. 14 ビッグデータの概要 YARN(Yet Another Resource Negotiator)の紹介をします。 ResourceManager NodeManager Hadoop Cluster NodeManager NodeManager ・・ ・ リソース管理 ジョブスケジューリング Jobを 並列実⾏ Client MapReduceのJobを投⼊ Job JobJob Job JobJob Job JobJob Map, Reduce, Shuffleを実施
  15. 15. takemikamiʼs note ‒ http://takemikami.com/ Hadoop Clusterの全体像 • Hadoop Clusterは『分散ファイルシステム』『並列処理システム』の組 み合わせ構造になる Copyright (C) Takeshi Mikami. All rights reserved. 15 ビッグデータの概要 Hadoop Clusterの全体像を⽰します Hadoop Cluster Client NameNode ResourceManager DataNode NodeManager DataNode NodeManager DataNode NodeManager Job Job Job Job Job Job Job Job Job Master node Slave node 各Nodeにある データを処理 Hadoop Clusterは、 各Nodeに分散保存されているデータに対して、 そのNode上で処理を実施できるので効率が良い。 (処理対象データを取得するための通信が不要)
  16. 16. takemikamiʼs note ‒ http://takemikami.com/ Apache Sparkとは • ⾼速に動作する(Apache HadoopのMapreduceよりも) • メモリ上にデータを持つので反復処理に強い • SparkSQL, Streaming, MachineLearning(MLlib), Graph(GraphX) など の応⽤利⽤が出来る • Hadoop, Standalone, Mesosなどの様々な環境で動作する Copyright (C) Takeshi Mikami. All rights reserved. 16 ビッグデータの概要 Apache Sparkの紹介をします ⾼速な並列データ処理システム
  17. 17. takemikamiʼs note ‒ http://takemikami.com/ Apache Hadoop上でのSpark Copyright (C) Takeshi Mikami. All rights reserved. 17 ビッグデータの概要 Apache Hadoop上でのSparkの利⽤イメージを⽰します Hadoop Cluster Client NameNode ResourceManager DataNode NodeManager DataNode NodeManager DataNode NodeManager Job Job Job Job Job Job Job Job Job Master node Slave node 各Nodeにある データを処理 Hadoop Clusterは、 各Nodeに分散保存されているデータに対して、 そのNode上で処理を実施できるので効率が良い。 (処理対象データを取得するための通信が不要) • Hadoop Cluster上のJobをSparkによって実⾏することが出来る
  18. 18. takemikamiʼs note ‒ http://takemikami.com/ Spark MLlibとは • Sparkを利⽤することで、⼤規模なデータに対する機械学習を容易に利 ⽤出来る • 以下のようなツールを備える • 分類・回帰・クラスタリング・協調フィルタリングのような基本的な機械学習の アルゴリズム • 特徴量の変換・次元削減・選択のような特徴量処理 • モデル開発・評価・チューニングを効率的に⾏うためのパイプライン • アルゴリズム・モデル・パイプラインの永続化 • その他、線形代数や統計、データハンドリングのユーティリティ Copyright (C) Takeshi Mikami. All rights reserved. 18 ビッグデータの概要 Spark MLlibの紹介をします Sparkの機械学習ライブラリ 機械学習にありがちな 反復計算を⾏うアルゴリズムで Sparkは有利
  19. 19. takemikamiʼs note ‒ http://takemikami.com/ データ分析のアプローチ • データ分析のアプーチは以下の3つに分類できる Copyright (C) Takeshi Mikami. All rights reserved. 19 機械学習の概要 アプローチ 説明 例 ⼿法 説明的データ分析 (descriptive) 事実を説明する・⾒ つける ・どんな⼈が何を買っているか? ・ある広告がどれだけ売上に貢献して いるか? BI、データマイニ ング 予測的データ分析 (predictive) (未来や⽋測値を)予 測する ・ある商品群を閲覧した⼈の性別は? ・広告を出稿したら、どれだけ売上が 上がるか? 分類・回帰、統計 的機械学習 指⽰的データ分析 (prescriptive) 最適解を探す ・利益を最⼤化するための、最適な仕 ⼊れ量は? ・売上を最⼤化するには、どこに広告 を出稿すべきか? 最適化、実験計画 → 実施したい「分析のアプローチ」が何かを認識し、適切な「⼿法」を適⽤する 3つのデータ分析のアプローチを紹介します
  20. 20. takemikamiʼs note ‒ http://takemikami.com/ 代表的な機械学習の⼿法 Copyright (C) Takeshi Mikami. All rights reserved. 20 機械学習の概要 教師 種類 ⼿法 活⽤⽅法 教師あり (supervised learning) 分類 (classification) ロジスティック回帰 決定⽊ SVM ニューラルネットワーク 離脱顧客判定 スパムメールの判定 回帰 (regression) 線形回帰分析 ベイズ線形回帰分析 販売予測 教師なし (unsupervised learning) クラスタリング (clustering) k-means法 混合正規分布モデル 顧客のセグメント分け 次元削減 (dimentionality reduction) 主成分分析 特異値分解 商品の類似性を可視化 ※教師あり/なし以外にも強化学習(reinforcement learning)という⼿法もあります 代表的な機械学習の⼿法を紹介します
  21. 21. takemikamiʼs note ‒ http://takemikami.com/ 教師あり学習の基本 Copyright (C) Takeshi Mikami. All rights reserved. 21 機械学習の概要 教師あり学習の基本的な考え⽅を説明します やりたいこと: 「xの値」が与えられた時に「yの値」を予測したい → 𝑦 = 𝑓 𝑥 という関数を求めたい 𝑦 = 𝑓(𝑥) ⽬的変数 説明変数 予測モデル⽬的変数が離散値→分類 ⽬的変数が連続値→回帰
  22. 22. takemikamiʼs note ‒ http://takemikami.com/ 教師あり学習の基本 Copyright (C) Takeshi Mikami. All rights reserved. 22 機械学習の概要 教師あり学習の基本的な考え⽅を説明します x y データ1 1 2 データ2 2 4 データ3 3 6 データ4 4 8 データ5 5 ? y = 2x ①教師データを取得 教師あり学習の⼿続き: ②教師データから y=f(x) を導く 10 ③未知の値を予測する 予測(prediction) 学習 (fitting)
  23. 23. takemikamiʼs note ‒ http://takemikami.com/ クラスタリング(clustering)と分類(classification) Copyright (C) Takeshi Mikami. All rights reserved. 23 機械学習の概要 分類(classification) クラスタリング(clustering) 教師 教師あり 教師なし 説明 与えられたデータを 適切なクラスに振り分ける 与えられたデータを 複数のグループ分ける イメージ 既存データを元に作った予測モデルで 新規データを振り分ける データの特徴を元に 意味あるグループが無いか⾒つける A モデル B C クラスタリングと分類(教師あり学習と教師なし学習)の違いを⽰します
  24. 24. takemikamiʼs note ‒ http://takemikami.com/ Hadoop及びSpark MLlibのシステム構成例 Hadoop/Sparkのシステム構成要素 Hadoop、Hive、Spark、PySpark、jupyter notebook Hadoop/Sparkのシステム構成例・環境構築 システム構成例、環境構築の流れ Copyright (C) Takeshi Mikami. All rights reserved. 24
  25. 25. takemikamiʼs note ‒ http://takemikami.com/ Apache Hadoopとは • 「データ保存のための分散ファイルシステム」 「データ処理のための並列処理システム」 によってビッグデータの分散処理を実現する • 4つのモジュールで構成される • 共通ユーティリティ (Hadoop Common) • 分散ファイルシステム (Hadoop HDFS) • クラスタリソース・ジョブ管理 (Hadoop YARN) • 並列データ処理システム (Hadoop MapReduce) Copyright (C) Takeshi Mikami. All rights reserved. 25 Hadoop/Sparkのシステム構成要素 Apache Hadoopの紹介をします ビッグデータ分散処理のフレームワーク HDFSとYARNは説明済みなので、 次はMapReduceについて説明します
  26. 26. takemikamiʼs note ‒ http://takemikami.com/ MapReduceとは • MapReduceとはデータの並列処理を⾏うためのアルゴリズム • 『○○単位に』『××する』という処理を並列に⾏うことができる Copyright (C) Takeshi Mikami. All rights reserved. 26 Hadoop/Sparkのシステム構成要素 MapReduceについて説明します。 HadoopMapReduceは アルゴリズムの実装 ⼊⼒ファイル 例) 「訪問者毎に」「PV数を数える」 Shuffle ※ここではVisitor1,2を集めている 時間 訪問者ID 種別 00:00 Visitor1 PV 00:03 Visitor1 CLICK 00:04 Visitor7 PV 00:05 Visitor1 PV 訪問者ID PV数 Visitor1 1 Visitor1 0 Visitor7 1 Visitor1 1 訪問者ID PV数 Visitor1 2 Visitor7 1 訪問者ID PV数 Visitor1 2 Visitor1 2 Visitor2 1 Visitor2 1 Visitor1 1 訪問者ID PV数 Visitor1 5 Visitor2 2 Reduce Reduce 他の⼊⼒ファイルに対しても 並⾏してMapReduce 他も 同様にReduce Map
  27. 27. takemikamiʼs note ‒ http://takemikami.com/ MapReduceの例:①Map処理 Copyright (C) Takeshi Mikami. All rights reserved. 27 Hadoop/Sparkのシステム構成要素 MapReduceについて説明します。 ⼊⼒ファイル 例) 「訪問者毎に」「PV数を数える」 Shuffle ※ここではVisitor1,2を集めている 時間 訪問者ID 種別 00:00 Visitor1 PV 00:03 Visitor1 CLICK 00:04 Visitor7 PV 00:05 Visitor1 PV 訪問者ID PV数 Visitor1 1 Visitor1 0 Visitor7 1 Visitor1 1 訪問者ID PV数 Visitor1 2 Visitor7 1 訪問者ID PV数 Visitor1 2 Visitor1 2 Visitor2 1 Visitor2 1 Visitor1 1 訪問者ID PV数 Visitor1 5 Visitor2 2 Reduce Reduce 他の⼊⼒ファイルに対しても 並⾏してMapReduce 他も 同様にReduce Map ⼊⼒ファイルの各レコードの内容からPV数を算出する。 種別がPVなら1、それ以外なら0とする
  28. 28. takemikamiʼs note ‒ http://takemikami.com/ MapReduceの例:②Reduce処理(Shuffle前) Copyright (C) Takeshi Mikami. All rights reserved. 28 Hadoop/Sparkのシステム構成要素 MapReduceについて説明します。 ⼊⼒ファイル 例) 「訪問者毎に」「PV数を数える」 Shuffle ※ここではVisitor1,2を集めている 時間 訪問者ID 種別 00:00 Visitor1 PV 00:03 Visitor1 CLICK 00:04 Visitor7 PV 00:05 Visitor1 PV 訪問者ID PV数 Visitor1 1 Visitor1 0 Visitor7 1 Visitor1 1 訪問者ID PV数 Visitor1 2 Visitor7 1 訪問者ID PV数 Visitor1 2 Visitor1 2 Visitor2 1 Visitor2 1 Visitor1 1 訪問者ID PV数 Visitor1 5 Visitor2 2 Reduce Reduce 他の⼊⼒ファイルに対しても 並⾏してMapReduce 他も 同様にReduce Map Visitor毎にPV数を合計する。 Visitor1は1+0+1=2, Visitor7は1となる Combinerの処理
  29. 29. takemikamiʼs note ‒ http://takemikami.com/ MapReduceの例:③Shuffle処理 Copyright (C) Takeshi Mikami. All rights reserved. 29 Hadoop/Sparkのシステム構成要素 MapReduceについて説明します。 ⼊⼒ファイル 例) 「訪問者毎に」「PV数を数える」 Shuffle ※ここではVisitor1,2を集めている 時間 訪問者ID 種別 00:00 Visitor1 PV 00:03 Visitor1 CLICK 00:04 Visitor7 PV 00:05 Visitor1 PV 訪問者ID PV数 Visitor1 1 Visitor1 0 Visitor7 1 Visitor1 1 訪問者ID PV数 Visitor1 2 Visitor7 1 訪問者ID PV数 Visitor1 2 Visitor1 2 Visitor2 1 Visitor2 1 Visitor1 1 訪問者ID PV数 Visitor1 5 Visitor2 2 Reduce Reduce 他の⼊⼒ファイルに対しても 並⾏してMapReduce 他も 同様にReduce Map 並列に実⾏した②の処理結果を、VisitorID毎に集めてくる。 ここではVisitor1,2の結果を集めている(逆にVisitor7は他の処理に任せている)
  30. 30. takemikamiʼs note ‒ http://takemikami.com/ MapReduceの例:④Reduce処理(Shuffle後) Copyright (C) Takeshi Mikami. All rights reserved. 30 Hadoop/Sparkのシステム構成要素 MapReduceについて説明します。 ⼊⼒ファイル 例) 「訪問者毎に」「PV数を数える」 Shuffle ※ここではVisitor1,2を集めている 時間 訪問者ID 種別 00:00 Visitor1 PV 00:03 Visitor1 CLICK 00:04 Visitor7 PV 00:05 Visitor1 PV 訪問者ID PV数 Visitor1 1 Visitor1 0 Visitor7 1 Visitor1 1 訪問者ID PV数 Visitor1 2 Visitor7 1 訪問者ID PV数 Visitor1 2 Visitor1 2 Visitor2 1 Visitor2 1 Visitor1 1 訪問者ID PV数 Visitor1 5 Visitor2 2 Reduce Reduce 他の⼊⼒ファイルに対しても 並⾏してMapReduce 他も 同様にReduce Map Visitor毎にPV数を合計する。 Visitor1は2+2+1=5, Visitor2は1+1=2となる
  31. 31. takemikamiʼs note ‒ http://takemikami.com/ Apache Hiveとは • Hadoopのファイルシステム上に格納されたファイルに対して、 データの問い合わせを⾏うことができる • HiveQLというSQLライクな⾔語を、MapReduceジョブに変換し、 Hadoopに渡し実⾏する • コマンドでの実⾏(hive)、 またはサーバプロセスで実⾏する(hiveserver2) Copyright (C) Takeshi Mikami. All rights reserved. 31 Hadoop/Sparkのシステム構成要素 Apache Hiveの紹介をします。 Hadoop上のファイルに対するクエリ実⾏環境
  32. 32. takemikamiʼs note ‒ http://takemikami.com/ Hiveのシステム構成 〜hiveコマンドの場合 • hiveコマンドは、以下の処理を⾏う • HiveQLの受け付け • HiveQL→MapReduceジョブの変換 • 変換してMapReduceジョブをHadoopに渡す(処理はHadoopで実⾏) Copyright (C) Takeshi Mikami. All rights reserved. 32 Hadoop/Sparkのシステム構成要素 Hiveのシステム構成を説明します。 Hadoop Cluster NameNode ResourceManager DataNode NodeManager DataNode NodeManager DataNode NodeManager JobJobJob JobJobJob JobJobJob Master node Slave nodehiveコマンド metastore MapReduce ジョブHiveQL メタ情報 (テーブル定義) →RDBへのSQL問い合わせと同じ感覚で、Hadoop上のファイルに問い合わせができる
  33. 33. takemikamiʼs note ‒ http://takemikami.com/ hiveserver2 Hiveのシステム構成 〜hiveserver2の場合 • hiveserver2の場合も、hiveコマンドと⾏う処理は同じ • サーバプロセスになるので、thriftやJDBCドライバ経由でクライアント プログラムからHiveQLを投げることができる Copyright (C) Takeshi Mikami. All rights reserved. 33 Hadoop/Sparkのシステム構成要素 Hiveのシステム構成を説明します。 Hadoop Cluster NameNode ResourceManager DataNode NodeManager DataNode NodeManager DataNode NodeManager JobJobJob JobJobJob JobJobJob Master node Slave nodebeelineなど metastore MapReduce ジョブHiveQL メタ情報 (テーブル定義)
  34. 34. takemikamiʼs note ‒ http://takemikami.com/ metastoreとは • metastoreは、HiveQLでクエリでみるテーブル定義情報を格納 • 実体はHadoopクラスタ上、メタ情報はRDBに格納 Copyright (C) Takeshi Mikami. All rights reserved. 34 Hadoop/Sparkのシステム構成要素 Hiveのmetastoreについて説明します。 Hadoop Cluster NameNode ResourceManager DataNode NodeManager DataNode NodeManager DataNode NodeManager JobJobJob JobJobJob JobJobJob Master node Slave nodehiveコマンド metastore MapReduce ジョブHiveQL メタ情報 (テーブル定義) テーブル名 カラム名 型 access_log access_dt datetime access_log visitor_id string access_log access_type string データの実体 (HDFS上のファイル) データの実体 (HDFS上のファイル) データの実体 (HDFS上のファイル) 時間 訪問者ID 種別 00:00 Visitor1 PV 00:03 Visitor1 CLICK 00:04 Visitor7 PV 00:05 Visitor1 PV
  35. 35. takemikamiʼs note ‒ http://takemikami.com/ Partitionとは • hiveのテーブルは、ファイルシステムの指定ディレクトリ配下に格納 • パーティションを⽤いると、サブディレクトリで管理することができる • 例えば、期間を区切った集計が多い場合は、年⽉⽇などでパーティションを切る と、対象期間のファイルのみを対象に処理をする(=性能改善) Copyright (C) Takeshi Mikami. All rights reserved. 35 Hadoop/Sparkのシステム構成要素 Hiveのpartitionについて説明します。 テーブル(パーティション無し) /0001 /0002 /0003 /0004 テーブル(年⽉⽇パーティション有り) /ymd=20160101 /0001 /0002 /ymd=20160102 /0001 /0002 全ファイルを処理 指定した期間の ファイルのみを処理 →DWHでは期間指定のクエリを多⽤するので、期間のパーティションはよく使われる
  36. 36. takemikamiʼs note ‒ http://takemikami.com/ external tableとは • external tableを使うと、HDFSなどに配置したファイル(tsvなど)をhive のテーブルとして扱うことができる Copyright (C) Takeshi Mikami. All rights reserved. 36 Hadoop/Sparkのシステム構成要素 Hiveのexternal tableについて説明します。 EMR (Elastic MapReduce) NameNode ResourceManager DataNode NodeManager DataNode NodeManager DataNode NodeManager JobJobJob JobJobJob JobJobJob Master node Slave node hiveコマンド metastor e hive以外のバッチ なんらかのジョブ ①バッチジョブでデータを投⼊ Create external table ②External tableとして定義 HiveQL ③External tableにクエリ発⾏ External tableの利⽤例 ※ hiveのテーブルの実体は、ファイルシステム上のファイル。 通常の(externalでない)テーブルの場合、create tableでテーブルを作成してinsertするとファイルが作成される
  37. 37. takemikamiʼs note ‒ http://takemikami.com/ MapReduceによるJoin Copyright (C) Takeshi Mikami. All rights reserved. 37 Hadoop/Sparkのシステム構成要素 MapReduceによるJoin⽅法を紹介します • MapReduceによるテーブルのJoinは2つの⽅法がある • Merge Join • 結合する属性で結合・被結合の両テーブルをMap-Reduce • Map Join • 各ノード被結合テーブルをコピー • 結合テーブルのMap時に、被結合テーブルを参照して紐付け →巨⼤なテーブル同⼠の結合が可能 →被結合テーブルが⼗分に⼩さい場合は効率がよい
  38. 38. takemikamiʼs note ‒ http://takemikami.com/ Merge Joinの⼿続き 1/4 • 受注・受注明細から店舗ごとの売上⾼を集計する例で説明します Copyright (C) Takeshi Mikami. All rights reserved. 38 Hadoop/Sparkのシステム構成要素 Merge Joinの⼿続きを説明します 受注番号 受注店舗 受注⽇時 001 渋⾕店 2017/10/10 002 新宿店 2017/10/10 受注番号 商品名 数量 単価 001 商品A 5 1,000 001 商品B 1 5,000 002 商品A 2 1,000 select 受注.受注店舗, sum(受注明細.数量 *受注明細.単価) as 売上⾼ from 受注明細 left join 受注 on 受注明細.受注番号=受注.受注番号 group by 受注.受注店舗 受注店舗 売上⾼ 渋⾕店 10,000 新宿店 2,000 受注 受注明細
  39. 39. takemikamiʼs note ‒ http://takemikami.com/ Merge Joinの⼿続き 2/4 • Joinする属性で各テーブルをMap Copyright (C) Takeshi Mikami. All rights reserved. 39 Hadoop/Sparkのシステム構成要素 Merge Joinの⼿続きを説明します 受注番号 受注店舗 受注⽇時 001 渋⾕店 2017/10/10 002 新宿店 2017/10/10 受注番号 商品名 数量 単価 001 商品A 5 1,000 001 商品B 1 5,000 002 商品A 2 1,000 受注 受注明細 Key Value Key Value
  40. 40. takemikamiʼs note ‒ http://takemikami.com/ Merge Joinの⼿続き 3/4 • Keyで全レコードをReduce Copyright (C) Takeshi Mikami. All rights reserved. 40 Hadoop/Sparkのシステム構成要素 Merge Joinの⼿続きを説明します 受注店舗 受注⽇時 受注番号 渋⾕店 2017/10/10 001 新宿店 2017/10/10 002 受注番号 商品名 数量 単価 001 商品A 5 1,000 001 商品B 1 5,000 002 商品A 2 1,000 受注 Value Key Key Value 受注明細 Reduce 受注店舗 受注⽇時 受注番号 商品名 数量 単価 渋⾕店 2017/10/10 001 商品A 5 1,000 商品B 1 5,000 新宿店 2017/10/10 002 商品A 2 1,000
  41. 41. takemikamiʼs note ‒ http://takemikami.com/ Merge Joinの⼿続き 4/4 • Join後のテーブルに対して、group byする属性でMap-Reduce Copyright (C) Takeshi Mikami. All rights reserved. 41 Hadoop/Sparkのシステム構成要素 Merge Joinの⼿続きを説明します (この⼿続きはjoin後の処理) 受注店舗 受注⽇時 受注番号 商品名 数量 単価 渋⾕店 2017/10/10 001 商品A 5 1,000 商品B 1 5,000 新宿店 2017/10/10 002 商品A 2 1,000 Key Value 受注店舗 売上⾼ 渋⾕店 10,000 新宿店 2,000
  42. 42. takemikamiʼs note ‒ http://takemikami.com/ Map Joinの⼿続き 1/3 • 商品マスタ・受注明細から商品分類ごとの売上⾼を集計する例で説明し ます Copyright (C) Takeshi Mikami. All rights reserved. 42 Hadoop/Sparkのシステム構成要素 Map Joinの⼿続きを説明します 商品分類 商品名 J01 商品A J02 商品B 受注番号 商品名 数量 単価 001 商品A 5 1,000 001 商品B 1 5,000 002 商品A 2 1,000 select 商品マスタ.商品分類, sum(受注明細.数量 *受注明細.単価) as 売上⾼ from 受注明細 left join 商品マスタ on 受注明細.商品名=商品マスタ.商品名 group by 商品マスタ.商品分類 商品分類 売上⾼ J01 7,000 J02 5,000 商品マスタ 受注明細
  43. 43. takemikamiʼs note ‒ http://takemikami.com/ Map Joinの⼿続き 2/3 • group byする属性でMap時に、商品マスタを参照しながら結合 Copyright (C) Takeshi Mikami. All rights reserved. 43 Hadoop/Sparkのシステム構成要素 Map Joinの⼿続きを説明します 受注番号 商品名 数量 単価 001 商品A 5 1,000 001 商品B 1 5,000 002 商品A 2 1,000 受注明細 商品分類 商品名 J01 商品A J02 商品B 商品マスタ 商品分類 売上⾼ J01 5000 J02 5000 J01 2000 事前に各Nodeにコピー key value
  44. 44. takemikamiʼs note ‒ http://takemikami.com/ Map Joinの⼿続き 3/3 • group byする属性でReduce Copyright (C) Takeshi Mikami. All rights reserved. 44 Hadoop/Sparkのシステム構成要素 Map Joinの⼿続きを説明します (この⼿続きはjoin後の処理) 商品分類 売上⾼ J01 5000 J02 5000 J01 2000 value 商品分類 売上⾼ J01 7,000 J02 5,000 key
  45. 45. takemikamiʼs note ‒ http://takemikami.com/ HadoopとSparkの役割 • HadoopMapReduceでデータ抽出・加⼯/Sparkで機械学習が考えられる Copyright (C) Takeshi Mikami. All rights reserved. 45 Hadoop/Sparkのシステム構成要素 ビッグデータの機械学習におけるHadoopとSparkの役割を整理します HDFS Hadoop MapReduce Apache Hive fluentd など データ抽出・加⼯ データ収集 Apache Spark Spark MLlib 学習と予測
  46. 46. takemikamiʼs note ‒ http://takemikami.com/ RDD - データの分散コレクション • RDDとは複数ノードに分散配置される分散コレクション Copyright (C) Takeshi Mikami. All rights reserved. 46 Hadoop/Sparkのシステム構成要素 データの分散コレクション(RDD)について説明します Hadoop Cluster RDDへの操作RDDへの 操作 Master node Slave node RDDへの操作は、実際はノード毎に分散処理される ※RDD: Resilient Distributed Dataset Data RDDへの操作 Data RDDへの操作 Data RDD
  47. 47. takemikamiʼs note ‒ http://takemikami.com/ RDDに対する処理 • RDDに対してはMapReduceで処理を⾏う Copyright (C) Takeshi Mikami. All rights reserved. 47 Hadoop/Sparkのシステム構成要素 RDDに対する処理のイメージを⽰します # ファイルを読み込み text_file = sc.textFile("hdfs://...") # 単語数をカウントするMapReduceを定義 counts = text_file.flatMap(lambda line: line.split(" ")) .map(lambda word: (word, 1)) .reduceByKey(lambda a, b: a + b) # MapReduceの処理結果を保存 counts.saveAsTextFile("hdfs://...") WordCountの例 MapReduceの定義 ※ https://spark.apache.org/examples.html から
  48. 48. takemikamiʼs note ‒ http://takemikami.com/ DataFrameに対する処理 • DataFrameは、RやPandasのように操作ができる Copyright (C) Takeshi Mikami. All rights reserved. 48 Hadoop/Sparkのシステム構成要素 DataFrameに対する処理のイメージを⽰します # ファイルを読み込んでDataFrameに変換 textFile = sc.textFile("hdfs://...") df = textFile.map(lambda r: Row(r)).toDF(["line"]) # 「ERROR」を含む⾏を抽出 errors = df.filter(col("line").like("%ERROR%")) # 該当⾏数をカウント errors.count() テキスト検索の例 →MapRecuceを意識しなくてよいので、プログラミングが苦⼿な⼈でも扱いやすい filterのようなメソッドが使える (MapReduceを意識しなくてよい) ※ https://spark.apache.org/examples.html から
  49. 49. takemikamiʼs note ‒ http://takemikami.com/ SparkSQLによる処理 • SparkSQLではHiveのテーブルに対してクエリを実⾏出来る Copyright (C) Takeshi Mikami. All rights reserved. 49 Hadoop/Sparkのシステム構成要素 SparkSQLによる処理のイメージを⽰します # コンテキストの取得 from pyspark.sql import HiveContext sqlContext = HiveContext(sc) # クエリの実⾏ df = sqlContext.sql("select * from <テーブル名> limit 10") # 結果の表⽰ df.show() Hiveクエリの実⾏例 →Hiveのテーブルを機械学習の⼊出⼒に利⽤できる Hiveクエリの結果を DataFrameとして取得
  50. 50. takemikamiʼs note ‒ http://takemikami.com/ PySparkの位置づけ Copyright (C) Takeshi Mikami. All rights reserved. 50 Hadoop/Sparkのシステム構成要素 PySparkの位置づけを⽰します Hadoop Cluster PySpark NameNode ResourceManager DataNode NodeManager DataNode NodeManager DataNode NodeManager Job Job Job Job Job Job Job Job Job Master node Slave node PySparkを利⽤することで、 Sparkの処理結果に対し、Pythonのエコシステムを利⽤可能 • PySparkとはPython⽤のSparkAPI Java/ScalaPython Pandas jupyter matplotlib numpy Python EcoSystem
  51. 51. takemikamiʼs note ‒ http://takemikami.com/ SparkとPandasのDataFrame • SparkとPandasのDataFrameは相互に変換できます Copyright (C) Takeshi Mikami. All rights reserved. 51 Hadoop/Sparkのシステム構成要素 SparkとPandasのDataFrameの変換イメージを⽰します # PandasのDataFrameを作成 import pandas as pd import numpy as np pandasDf = pd.DataFrame({ 'id' : np.array([1, 2]), 'name': np.array(["apple", "orange"])}) # PandasのDataFrame → SparkのDataFrame sparkDf = spark.createDataFrame(pandasDf) # SparkのDataFrame表⽰ sparkDf.show() # SparkのDataFrame → PandasのDataFrame sparkDf.toPandas() Spark/PandasのDataFrame変換の例 Spark→Pandas Pandas→Spark
  52. 52. takemikamiʼs note ‒ http://takemikami.com/ 可視化・レポーティング環境 〜jupyter notebook, matplotlib Copyright (C) Takeshi Mikami. All rights reserved. 52 Hadoop/Sparkのシステム構成要素 可視化・レポーティング⽤ツールとしてjupyter notebook, matplotlibを紹介します Pythonのコード (分析のプロセス) Pythonの処理結果 (分析の結果) jupyter notebook → 分析のプロセスと結果の記録 matplotlibによる可視化 matplotlib → 分析の結果の可視化 Pythonのコード (分析のプロセス) Pythonの処理結果 (分析の結果)
  53. 53. takemikamiʼs note ‒ http://takemikami.com/ JOB FILE (HDFS) システム構成例 • Hadoop/Spark及びPythonを利⽤するシステム構成例です Copyright (C) Takeshi Mikami. All rights reserved. 53 Hadoop/Sparkのシステム構成例・環境構築 Hadoop/Sparkのシステム構成例を⽰します NameNode ResourceManager DataNode NodeManager mariadb name data hive metastore Hadoop Cluster Python(Anaconda) hive pysparkjupyter 分析⽤マシン メタ情報管理DB Master node Slave node job meta
  54. 54. takemikamiʼs note ‒ http://takemikami.com/ 環境構築の流れ • 以下の流れで、1台のマシンにHadoop/Spark環境を構築します Copyright (C) Takeshi Mikami. All rights reserved. 54 Hadoop/Sparkのシステム構成例・環境構築 Hadoop/Sparkの環境構成の流れを説明します ①Hadoop/Hive/Sparkのインストール ②SSHの接続設定 ③HDFSの設定 ④YARNの設定 ⑤Hiveの設定 ⑥Anacondaのインストール ⑦pysparkとjupyter notebookの設定 ※構築⼿順は、HadoopのバージョンやOSの設定などに依存するので、参考程度にご覧下さい。
  55. 55. takemikamiʼs note ‒ http://takemikami.com/ 環境構築① Hadoop/Hive/Sparkのインストール • 以下のようにmariadb/hadoop/hive/sparkをインストール (macosでhomebrewを利⽤している場合) • 以下のように各プロダクトのHOMEを環境変数に設定 (.bash_profileなどに設定) Copyright (C) Takeshi Mikami. All rights reserved. 55 Hadoop/Sparkのシステム構成例・環境構築 Hadoop/Sparkの環境構成の流れを説明します $ brew install mariadb $ brew install hadoop $ brew install hive $ brew install apache-spark export HADOOP_HOME=/usr/local/opt/hadoop/libexec export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop export HIVE_HOME=/usr/local/opt/hive/libexec export SPARK_HOME=/usr/local/opt/apache-spark/libexec
  56. 56. takemikamiʼs note ‒ http://takemikami.com/ 環境構築② SSHの接続設定 • ⾃ホストにSSH接続できるようにキーを配置 • ⼀度SSH接続してfingerprintを作っておく Copyright (C) Takeshi Mikami. All rights reserved. 56 Hadoop/Sparkのシステム構成例・環境構築 Hadoop/Sparkの環境構成の流れを説明します $ ssh-keygen $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys $ chmod 600 ~/.ssh/authorized_keys $ ssh localhost $ exit
  57. 57. takemikamiʼs note ‒ http://takemikami.com/ 環境構築③ HDFSの設定 • 設定ファイルに、HDFS関連の設定を記載します Copyright (C) Takeshi Mikami. All rights reserved. 57 Hadoop/Sparkのシステム構成例・環境構築 Hadoop/Sparkの環境構成の流れを説明します JOB FILE (HDFS) NameNode ResourceManager DataNode NodeManager mariadb name data hive metastore Hadoop Cluster Python(Anaconda) hive pysparkjupyter 分析⽤マシン メタ情報管理DB Master node Slave node job meta ファイルの位置を「hdfs-site.xml」にファイルの位置を「hdfs-site.xml」に NameNodeのhost/portを「core-site.xml」に
  58. 58. takemikamiʼs note ‒ http://takemikami.com/ 環境構築③ HDFSの設定 • NameNodeのhost/portを記載 →$HADOOP_CONF_DIR/core-site.xml • name/dataのファイル位置を記載 →$HADOOP_CONF_DIR/hdfs-site.xml Copyright (C) Takeshi Mikami. All rights reserved. 58 Hadoop/Sparkのシステム構成例・環境構築 Hadoop/Sparkの環境構成の流れを説明します <property> <name>fs.defaultFS</name><value>hdfs://localhost:9001</value> </property> <property> <name>dfs.name.dir</name><value>/var/lib/hdfs/name</value> </property> <property> <name>dfs.data.dir</name><value>/var/lib/hdfs/data</value> </property> <property> <name>dfs.replication</name><value>1</value> </property> 1台のマシンで構築するので、 ここではReplication数は1 ※通常は3以上にする
  59. 59. takemikamiʼs note ‒ http://takemikami.com/ 環境構築③ HDFSの設定 • 以下のようにHDFSを起動 • ブラウザで起動状況を確認 →http://localhost:50070/ Copyright (C) Takeshi Mikami. All rights reserved. 59 Hadoop/Sparkのシステム構成例・環境構築 Hadoop/Sparkの環境構成の流れを説明します $ $HADOOP_HOME/sbin/start-dfs.sh
  60. 60. takemikamiʼs note ‒ http://takemikami.com/ 環境構築③ HDFSの設定 • 以下のようにファイルをHDFSに配置 • 以下のように配置されたファイルを確認 Copyright (C) Takeshi Mikami. All rights reserved. 60 Hadoop/Sparkのシステム構成例・環境構築 Hadoop/Sparkの環境構成の流れを説明します $ $HADOOP_HOME/bin/hadoop fs -put README.md / $ $HADOOP_HOME/bin/hadoop fs -ls / -rw-r--r-- 1 take supergroup 149 2017-10-27 16:54 /README.md
  61. 61. takemikamiʼs note ‒ http://takemikami.com/ 環境構築④ YARNの設定 • 設定ファイルに、HDFS関連の設定を記載します Copyright (C) Takeshi Mikami. All rights reserved. 61 Hadoop/Sparkのシステム構成例・環境構築 Hadoop/Sparkの環境構成の流れを説明します JOB FILE (HDFS) NameNode ResourceManager DataNode NodeManager mariadb name data hive metastore Hadoop Cluster Python(Anaconda) hive pysparkjupyter 分析⽤マシン メタ情報管理DB Master node Slave node job meta Jobの実⾏環境の設定を「mapred-site.xml」に ResourceManagerのhostを「yarn-site.xml」に
  62. 62. takemikamiʼs note ‒ http://takemikami.com/ 環境構築④ YARNの設定 • ResourceManagerのhostを記載 →$HADOOP_CONF_DIR/yarn-site.xml • Jobの実⾏環境の設定を記載 →$HADOOP_CONF_DIR/mapred-site.xml Copyright (C) Takeshi Mikami. All rights reserved. 62 Hadoop/Sparkのシステム構成例・環境構築 Hadoop/Sparkの環境構成の流れを説明します <property> <name>yarn.resourcemanager.hostname</name><value>localhost</value> </property> <property> <name>mapreduce.framework.name</name><value>yarn</value> </property>
  63. 63. takemikamiʼs note ‒ http://takemikami.com/ 環境構築④ YARNの設定 • 以下のようにYARNを起動 • ブラウザで起動状況を確認 →http://localhost:8088/ Copyright (C) Takeshi Mikami. All rights reserved. 63 Hadoop/Sparkのシステム構成例・環境構築 Hadoop/Sparkの環境構成の流れを説明します $ $HADOOP_HOME/sbin/start-yarn.sh
  64. 64. takemikamiʼs note ‒ http://takemikami.com/ 環境構築④ YARNの設定 • 以下のようにサンプルのジョブを実⾏ • 右のように ジョブが確認出来る Copyright (C) Takeshi Mikami. All rights reserved. 64 Hadoop/Sparkのシステム構成例・環境構築 Hadoop/Sparkの環境構成の流れを説明します $ $HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce- examples-2.8.0.jar pi 2 100
  65. 65. takemikamiʼs note ‒ http://takemikami.com/ 環境構築⑤ Hiveの設定 • 設定ファイルに、Hive関連の設定を記載します Copyright (C) Takeshi Mikami. All rights reserved. 65 Hadoop/Sparkのシステム構成例・環境構築 Hadoop/Sparkの環境構成の流れを説明します JOB FILE (HDFS) NameNode ResourceManager DataNode NodeManager mariadb name data hive metastore Hadoop Cluster Python(Anaconda) hive pysparkjupyter 分析⽤マシン メタ情報管理DB Master node Slave node job meta metastoreへの接続情報を「hive-site.xml」に metastoreのDBを初期化 mariadbに接続する JDBCドライバを配置
  66. 66. takemikamiʼs note ‒ http://takemikami.com/ 環境構築⑤ Hiveの設定 • 「https://dev.mysql.com/」からJDBCドライバ(mysql-connector-java- x.x.xx.jarなど)をダウンロード、$HIVE_HOME/libに配置 • metastoreへの接続情報を記載 → $HIVE_HOME/conf/hive-site.xml Copyright (C) Takeshi Mikami. All rights reserved. 66 Hadoop/Sparkのシステム構成例・環境構築 Hadoop/Sparkの環境構成の流れを説明します <property> <name>javax.jdo.option.ConnectionURL</name> <value><![CDATA[jdbc:mysql://localhost/(DB名)?autoReconnect=true&useSSL=false]]></value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name><value>com.mysql.jdbc.Driver</value> </property> <property><name>javax.jdo.option.ConnectionUserName</name><value>(ユーザ)</value></property> <property><name>javax.jdo.option.ConnectionPassword</name><value>(パスワード)</value></property> <property><name>datanucleus.fixedDatastore</name><value>false</value></property> <property><name>hive.exec.local.scratchdir</name><value>/tmp/hive</value></property> <property><name>hive.downloaded.resources.dir</name><value>/tmp/hive</value></property> <property><name>hive.querylog.location</name><value>/tmp/hive</value></property> <property><name>hive.execution.engine</name><value>mr</value></property>
  67. 67. takemikamiʼs note ‒ http://takemikami.com/ 環境構築⑤ Hiveの設定 • 以下のようにDBを作成 • 以下のようにmetastoreのDBを初期化 • hiveの起動を確認 Copyright (C) Takeshi Mikami. All rights reserved. 67 Hadoop/Sparkのシステム構成例・環境構築 Hadoop/Sparkの環境構成の流れを説明します $ $HIVE_HOME/bin/schematool -dbType mysql -initSchema $ mysql -u root > create database (DB名) default character set 'latin1'; > create user '(ユーザ)'@'localhost' identified by '(パスワード)'; > grant select, insert, update, delete, drop, alter, create, index, references on (DB名).* to '(ユー ザ)'@'localhost'; > grant create routine, alter routine on (DB名).* to '(ユーザ)'@'localhost'; $ $HIVE_HOME/bin/hive
  68. 68. takemikamiʼs note ‒ http://takemikami.com/ 環境構築⑥ Anacondaのインスト−ル • Anacondaをインストールします Copyright (C) Takeshi Mikami. All rights reserved. 68 Hadoop/Sparkのシステム構成例・環境構築 Hadoop/Sparkの環境構成の流れを説明します JOB FILE (HDFS) NameNode ResourceManager DataNode NodeManager mariadb name data hive metastore Hadoop Cluster Python(Anaconda) hive pysparkjupyter 分析⽤マシン メタ情報管理DB Master node Slave node job meta Anacondaをインストール
  69. 69. takemikamiʼs note ‒ http://takemikami.com/ 環境構築⑥ Anacondaのインスト−ル • 以下のようにAnacondaをインストール (pyenvを利⽤している場合) • 作業⽤のパスに移動して、pyenvで利⽤するPythonを指定 • Pythonのバージョンを確認 Copyright (C) Takeshi Mikami. All rights reserved. 69 Hadoop/Sparkのシステム構成例・環境構築 Hadoop/Sparkの環境構成の流れを説明します $ pyenv install anaconda3-4.4.0 $ cd (作業⽤のパス) $ pyenv local anaconda3-4.4.0 $ python --version Python 3.6.1 :: Anaconda custom (64-bit)
  70. 70. takemikamiʼs note ‒ http://takemikami.com/ 環境構築⑦ pysparkとjupyter notebookの設定 • 以下のようにAnacondaをインストール Copyright (C) Takeshi Mikami. All rights reserved. 70 Hadoop/Sparkのシステム構成例・環境構築 Hadoop/Sparkの環境構成の流れを説明します JOB FILE (HDFS) NameNode ResourceManager DataNode NodeManager mariadb name data hive metastore Hadoop Cluster Python(Anaconda) hive pysparkjupyter 分析⽤マシン メタ情報管理DB Master node Slave node job meta SparkSQLからhive metastoreに接続する設定 jupyter notebookからPySparkを利⽤する設定
  71. 71. takemikamiʼs note ‒ http://takemikami.com/ 環境構築⑦ pysparkとjupyter notebookの設定 • JDBCドライバの読み込み設定を追記 →$SPARK_HOME/conf/spark-defaults.conf • metastoreへの接続情報を記載 (hiveの設定を参照するようにリンク) Copyright (C) Takeshi Mikami. All rights reserved. 71 Hadoop/Sparkのシステム構成例・環境構築 Hadoop/Sparkの環境構成の流れを説明します spark.driver.extraClassPath $HIVE_HOME/lib/mysql-connector-java-X.X.XX.jar $ ln -sf $HIVE_HOME/conf/hive-site.xml $SPARK_HOME/conf/hive-site.xml
  72. 72. takemikamiʼs note ‒ http://takemikami.com/ 環境構築⑦ pysparkとjupyter notebookの設定 • jupyter notebookからPySparkを利⽤するために以下の環境変数を設定 • pysparkを起動 Copyright (C) Takeshi Mikami. All rights reserved. 72 Hadoop/Sparkのシステム構成例・環境構築 Hadoop/Sparkの環境構成の流れを説明します $ export PYSPARK_DRIVER_PYTHON=jupyter $ export PYSPARK_DRIVER_PYTHON_OPTS='notebook' $ pyspark
  73. 73. takemikamiʼs note ‒ http://takemikami.com/ 機械学習システムの開発プロセス 機械学習システムの開発プロセスフロー CRISP-DM、モデル開発の流れ モデル開発のためのツール 基礎集計と可視化、特徴量処理、予測精度 Copyright (C) Takeshi Mikami. All rights reserved. 73
  74. 74. takemikamiʼs note ‒ http://takemikami.com/ CRISP-DM Copyright (C) Takeshi Mikami. All rights reserved. 74 機械学習システムの開発プロセスフロー データ分析のプロセスモデル(CRISP-DM)を紹介します ※CRISP-DM: CRoss-Industry Standard Process for Data Mining ビジネス 理解 データ 理解 評価 共有・展開 データ準備 モデリング データ データ分析プロジェクトを 実施する時の タスクのサイクル
  75. 75. takemikamiʼs note ‒ http://takemikami.com/ ビジネス 理解 データ 理解 評価 共有・展開 データ準備 モデリング データ CRISP-DM • ビジネス理解 ビジネス上の⽬的・課題を明確化する • データ分析で何をやりたいのか? • データ分析でどのような課題を解決したいのか? • データ理解 ビジネス上の⽬的・課題を解決する為のデータを洗い出す • 必要なデータ項⽬があるか、量は⼗分か? • 記録が残っているか? (最新状態だけでなく、ログが残っているか) • データの質に問題がないか? (⼊⼒ミスがありそうか) Copyright (C) Takeshi Mikami. All rights reserved. 75 機械学習システムの開発プロセスフロー データ分析のプロセスモデル(CRISP-DM)を紹介します
  76. 76. takemikamiʼs note ‒ http://takemikami.com/ CRISP-DM • データ準備 データを分析⽤に加⼯する • ⽋測値、外れ値の除外、正規化など • モデリング 機械学習の⼿法を適⽤してモデルを作成する • 学習、予測、予測結果の解釈 • 評価 モデルが、ビジネス上の⽬的を達成出来るかを評価する • 共有・展開 分析結果から試作を計画・⽴案して実施する Copyright (C) Takeshi Mikami. All rights reserved. 76 機械学習システムの開発プロセスフロー データ分析のプロセスモデル(CRISP-DM)を紹介します ビジネス 理解 データ 理解 評価 共有・展開 データ準備 モデリング データ
  77. 77. takemikamiʼs note ‒ http://takemikami.com/ モデル開発の流れ Copyright (C) Takeshi Mikami. All rights reserved. 77 機械学習システムの開発プロセスフロー モデル開発の流れを紹介します スコアリング 特徴量 ⽣成 モデル 構築 (バッチ処理による) スコアリング (オンライン処理⽤) モデル更新 モデル⽣成データ準備 データ 収集 データ 抽出 本番運⽤ モデル開発 基礎集計 精度評価 ハイパー パラメータ調整 特徴量処理 業務データ の理解 可視化 以下のようなツールを⽤い、モデル構築までの処理をチューニング アルゴリズム選択 効果測定 機械学習によるモデル開発と、 施策への適⽤の流れ
  78. 78. takemikamiʼs note ‒ http://takemikami.com/ 基礎集計と可視化:度数分布表とヒストグラム • 度数分布表(frequency table) データをいくつかの階級に分類し、度数を集計した表 • ヒストグラム(histogram) 度数分布表をグラフとした表したもの Copyright (C) Takeshi Mikami. All rights reserved. 78 モデル開発のためのツール 度数分布表とヒストグラムについて説明します
  79. 79. takemikamiʼs note ‒ http://takemikami.com/ 基礎集計と可視化:度数分布表とヒストグラム Copyright (C) Takeshi Mikami. All rights reserved. 79 モデル開発のためのツール Pandasでのヒストグラムの出⼒⽅法を⽰します ※HDFS/Hiveに格納されたデータの ヒストグラムを描画する場合は SparkSQLでランダムサンプリングする
  80. 80. takemikamiʼs note ‒ http://takemikami.com/ 基礎集計と可視化:要約統計量 • 要約統計量とはデータの特徴を代表して表す値(代表値) • 平均値(mean) ※相加平均 全データを加算し、データ数で割った値 • 中央値(median) データを順に並べて、ちょうど真ん中にある値 (データが偶数個の場合は真ん中にある2値の中間値) • 最頻値(mode) 出現データ数が最も多い値(階級) Copyright (C) Takeshi Mikami. All rights reserved. 80 モデル開発のためのツール 要約統計量について説明します ¯x = 1 n nX i=1 xi
  81. 81. takemikamiʼs note ‒ http://takemikami.com/ 基礎集計と可視化:要約統計量 • 平均値(mean) ※相加平均 • 中央値(median) • 最頻値(mode) Copyright (C) Takeshi Mikami. All rights reserved. 81 モデル開発のためのツール Hiveクエリによる要約統計量の求め⽅を⽰す select avg(col) from tbl; select percentile_approx(col, 0.5) from tbl; select col, count(*) cnt from tbl group by col order by cnt desc limit 1;
  82. 82. takemikamiʼs note ‒ http://takemikami.com/ 基礎集計と可視化:要約統計量 Copyright (C) Takeshi Mikami. All rights reserved. 82 モデル開発のためのツール Pandasでの要約統計量の出⼒⽅法を⽰します 最⼤値・最⼩値 中央値・四分位点 平均値・標準偏差
  83. 83. takemikamiʼs note ‒ http://takemikami.com/ 基礎集計と可視化:相関と散布図 • 2種類のデータの関係性把握のため「相関係数」「散布図」等を利⽤ • 相関係数 (Pearson coefficient of correlation) 2種類の値の共分散を、各標準偏差の積で割った値 2種類のデータの関係性の強さを⽰す指標 -1〜1の間の値をとり、以下の意味になる 「負の相関がある(=-1)〜相関がない(=0)〜正の相関がある(=1)」 • 散布図 (scatter plot) 2種類のデータをX・Y軸の値に対応させて点をプロットした図 Copyright (C) Takeshi Mikami. All rights reserved. 83 モデル開発のためのツール 相関と散布図について説明します 1 n Pn i=1(xi ¯x)(yi ¯y) q 1 n Pn i=1(xi ¯x) 2 q 1 n Pn i=1(yi ¯y) 2
  84. 84. takemikamiʼs note ‒ http://takemikami.com/ 基礎集計と可視化:相関と散布図 • 相関係数(pearson coefficient of correlation) Copyright (C) Takeshi Mikami. All rights reserved. 84 モデル開発のためのツール Hiveクエリによる相関係数の求め⽅を⽰す select corr(col1, col2) from tbl;
  85. 85. takemikamiʼs note ‒ http://takemikami.com/ 基礎集計と可視化:相関と散布図 Copyright (C) Takeshi Mikami. All rights reserved. 85 モデル開発のためのツール Pandasでの散布図の出⼒⽅法を⽰します
  86. 86. takemikamiʼs note ‒ http://takemikami.com/ 特徴量処理:正規化 • データの正規化は、 異なる種類のデータを1つの尺度に揃えるために⾏います 例えば以下のような正規化⼿法があります • MinMaxScaler 最⼤値・最⼩値を揃える正規化 →データの範囲が限られているデータの場合に有効 • StandardScaler 平均を0、分散を1に揃える正規化 →外れ値があるデータの場合に、外れ値を無視出来る Copyright (C) Takeshi Mikami. All rights reserved. 86 モデル開発のためのツール データの正規化について説明します
  87. 87. takemikamiʼs note ‒ http://takemikami.com/ 特徴量処理:正規化 MinMaxScalerの例 Copyright (C) Takeshi Mikami. All rights reserved. 87 モデル開発のためのツール MLlibでのMinMaxScalerを紹介します ⼊⼒データの作成 学習と変換
  88. 88. takemikamiʼs note ‒ http://takemikami.com/ 特徴量処理:正規化 MinMaxScalerの例 Copyright (C) Takeshi Mikami. All rights reserved. 88 モデル開発のためのツール MLlibでのMinMaxScalerを紹介します 最⼩値0、最⼤値1に正規化
  89. 89. takemikamiʼs note ‒ http://takemikami.com/ 特徴量処理:次元削減 • 次元削減とは変数の数(データの次元数)を削減すること Copyright (C) Takeshi Mikami. All rights reserved. 89 モデル開発のためのツール 次元削減(dimensionality reduction)について説明します x1 x2 … xn y #1 1 3 … 1 2 #2 2 5 … 4 4 #3 3 6 … 5 6 #4 4 7 … 4 8 #5 5 8 … 2 10 xʼ1 xʼ2 y #1 4 4 2 #2 3 7 4 #3 6 8 6 #4 5 7 8 #5 6 8 10 元の説明変数 数が多い ⽬的変数 ⽬的変数 次元削減後の 説明変数 →データ圧縮・データの類似性の可視化に利⽤できる ※ PCA = Principal Component Analysis (主成分分析)
  90. 90. takemikamiʼs note ‒ http://takemikami.com/ 特徴量処理:次元削減 PCAの例 Copyright (C) Takeshi Mikami. All rights reserved. 90 モデル開発のためのツール MLlibでのPCA(主成分分析)を紹介します 5次元→3次元に削減する例 ⼊⼒データの作成 学習と変換学習と変換
  91. 91. takemikamiʼs note ‒ http://takemikami.com/ 予測精度の評価 • データセットを教師/検証⽤に分割 → 検証⽤/予測値を⽐較して評価 Copyright (C) Takeshi Mikami. All rights reserved. 91 モデル開発のためのツール 予測精度の評価について説明します x1 x2 … xn y #1 1 3 … 1 2 #2 2 5 … 4 4 … … … … … … #79 3 6 … 5 6 #80 4 7 … 4 8 … … … … … … #100 5 8 … 2 10 x1 x2 … xn y #1 1 3 … 1 2 #2 2 5 … 4 4 … … … … … … #79 3 6 … 5 6 x1 x2 … xn y #80 4 7 … 4 8 … … … … … … #100 5 8 … 2 10 予測モデル x1 x2 … xn yʼ #80 4 7 … 4 9 … … … … … … #100 5 8 … 2 11 学習 (fitting) 予測 (transform) 教師データ 検証データ データセット 説明変数 ⽬的変数 検証データと予測値を⽐較検証データと予測値を⽐較
  92. 92. takemikamiʼs note ‒ http://takemikami.com/ 予測精度の評価 • 以下のような評価指標を使って予測精度を評価します • MAE (Mean Absolute Error: 平均絶対誤差) 予測値・正解値の差の絶対値の平均値 →⼩さいほど良い • RMSE (Root Mean Squared Error: ⼆乗平均平⽅根誤差) 予測値・正解値の差の2乗の平均値の平⽅根 →⼩さいほど良い • Coefficient of Determination (決定係数) 予測値・正解値の相関係数の2乗 →1.0に近いほど良い Copyright (C) Takeshi Mikami. All rights reserved. 92 モデル開発のためのツール 予測精度の評価について説明します ※https://spark.apache.org/docs/2.1.1/mllib-evaluation-metrics.html#regression-model-evaluation
  93. 93. takemikamiʼs note ‒ http://takemikami.com/ 予測精度の評価 RMSEの計算例 Copyright (C) Takeshi Mikami. All rights reserved. 93 モデル開発のためのツール MLlibでの精度評価の例を紹介します データセットを教師/検証⽤に分割 (8:2) (training, test) = ratings.randomSplit([0.8, 0.2]) 検証⽤/予測値を⽐較して評価 (RMSE) evaluator = RegressionEvaluator(metricName="rmse", labelCol="rating", predictionCol="prediction") rmse = evaluator.evaluate(predictions)
  94. 94. takemikamiʼs note ‒ http://takemikami.com/ Spark MLlibを使った機械学習の紹介 Spark MLlibでの機械学習 分類と回帰、クラスタリング、協調フィルタリング Spark MLlibでの機械学習の応⽤ MLPipelines、アルゴリズムの実装 Copyright (C) Takeshi Mikami. All rights reserved. 94
  95. 95. takemikamiʼs note ‒ http://takemikami.com/ 分類(classification) 決定⽊による分類の例 Copyright (C) Takeshi Mikami. All rights reserved. 95 Spark MLlibでの機械学習 MLlibでの決定⽊を紹介します ライブラリ読込 データ準備 ラベル・特徴量の index付け
  96. 96. takemikamiʼs note ‒ http://takemikami.com/ 分類(classification) 決定⽊による分類の例 Copyright (C) Takeshi Mikami. All rights reserved. 96 Spark MLlibでの機械学習 MLlibでの決定⽊を紹介します 学習 予測
  97. 97. takemikamiʼs note ‒ http://takemikami.com/ 分類(classification) 決定⽊による分類の例 Copyright (C) Takeshi Mikami. All rights reserved. 97 Spark MLlibでの機械学習 MLlibでの決定⽊を紹介します 評価
  98. 98. takemikamiʼs note ‒ http://takemikami.com/ 回帰(regression) 線形回帰による回帰の例 Copyright (C) Takeshi Mikami. All rights reserved. 98 Spark MLlibでの機械学習 MLlibでの線形回帰を紹介します ライブラリ読込 データ準備 学習
  99. 99. takemikamiʼs note ‒ http://takemikami.com/ 回帰(regression) 線形回帰による回帰の例 Copyright (C) Takeshi Mikami. All rights reserved. 99 Spark MLlibでの機械学習 MLlibでの線形回帰を紹介します 評価
  100. 100. takemikamiʼs note ‒ http://takemikami.com/ クラスタリング(clustering) k-meansの例 Copyright (C) Takeshi Mikami. All rights reserved. 100 Spark MLlibでの機械学習 MLlibでのk-meansを紹介します ライブラリ読込 データ準備 学習
  101. 101. takemikamiʼs note ‒ http://takemikami.com/ クラスタリング(clustering) k-meansの例 Copyright (C) Takeshi Mikami. All rights reserved. 101 Spark MLlibでの機械学習 MLlibでのk-meansを紹介します 評価
  102. 102. takemikamiʼs note ‒ http://takemikami.com/ 協調フィルタリング ALSの例 Copyright (C) Takeshi Mikami. All rights reserved. 102 Spark MLlibでの機械学習 MLlibでのALSを紹介します ライブラリ読込 データ準備 学習 予測
  103. 103. takemikamiʼs note ‒ http://takemikami.com/ 協調フィルタリング ALSの例 Copyright (C) Takeshi Mikami. All rights reserved. 103 Spark MLlibでの機械学習 MLlibでのALSを紹介します 評価
  104. 104. takemikamiʼs note ‒ http://takemikami.com/ ML Pipeline ML Pipelines • ML Pipelinesとは、複数のアルゴリズムを1つにまとめるMLlibの機能 • 例: 「PCAでの説明変数の次元削減」と「SVMでのクラス分類」をまとめる Copyright (C) Takeshi Mikami. All rights reserved. 104 Spark MLlibでの機械学習の応⽤ SparkのMLPipelinesについて説明します PCAによる 次元削減 SVMでの クラス分類
  105. 105. takemikamiʼs note ‒ http://takemikami.com/ ML Pipelines • ML Pipelineにまとめていないと、 教師/対象データへの両⽅に同じ処理を記載する必要がある Copyright (C) Takeshi Mikami. All rights reserved. 105 Spark MLlibでの機械学習の応⽤ SparkのMLPipelinesについて説明します x1 x2 … xn y #1 1 3 … 1 2 #2 2 5 … 4 4 … … … … … … #79 3 6 … 5 6 x1 x2 … xn y #80 4 7 … 4 ? … … … … … ? #100 5 8 … 2 ? 予測モデル x1 x2 … xn yʼ #80 4 7 … 4 9 … … … … … … #100 5 8 … 2 11 教師データ 対象データ 予測結果 PCAによる 次元削減 SVMでの クラス分類 PCAによる 次元削減 SVMでの クラス分類 両⽅に同じ処理を記載両⽅に同じ処理を記載 ※精度チューニングの過程で頻繁に変更する部分なので ⼿間に加えて、反映漏れのミスも発⽣しやすい
  106. 106. takemikamiʼs note ‒ http://takemikami.com/ ML Pipelines • ML Pipelineにまとめておくと、 教師/対象データに対して確実に同じ処理を実施できる Copyright (C) Takeshi Mikami. All rights reserved. 106 Spark MLlibでの機械学習の応⽤ SparkのMLPipelinesについて説明します x1 x2 … xn y #1 1 3 … 1 2 #2 2 5 … 4 4 … … … … … … #79 3 6 … 5 6 x1 x2 … xn y #80 4 7 … 4 ? … … … … … ? #100 5 8 … 2 ? 予測モデル x1 x2 … xn yʼ #80 4 7 … 4 9 … … … … … … #100 5 8 … 2 11 教師データ 対象データ 予測結果 ML Pipeline PCAによる 次元削減 SVMでの クラス分類 ML Pipeline PCAによる 次元削減 SVMでの クラス分類Pipeline化して置くと 確実に両⽅で同じ処理を実施 Pipeline化して置くと 確実に両⽅で同じ処理を実施
  107. 107. takemikamiʼs note ‒ http://takemikami.com/ アルゴリズムの実装 • 独⾃アルゴリズムを実装する場合はEstimaterとModelを実装する Copyright (C) Takeshi Mikami. All rights reserved. 107 Spark MLlibでの機械学習の応⽤ SparkMLlibに独⾃のアルゴリズムを実装する⽅法を説明します x1 x2 … xn y #1 1 3 … 1 2 #2 2 5 … 4 4 … … … … … … #79 3 6 … 5 6 x1 x2 … xn y #80 4 7 … 4 ? … … … … … ? #100 5 8 … 2 ? x1 x2 … xn yʼ #80 4 7 … 4 9 … … … … … … #100 5 8 … 2 11 教師データ 対象データ 予測結果 Estimator (fit) Model (transform) IN: DataFrame OUT: Model IN: DataFrame OUT: DataFrame
  108. 108. takemikamiʼs note ‒ http://takemikami.com/ アルゴリズムの実装 Estimatorの実装 • Estimatorのfitに学習のロジックを実装します Copyright (C) Takeshi Mikami. All rights reserved. 108 Spark MLlibでの機械学習の応⽤ SparkMLlibに独⾃のアルゴリズムを実装する⽅法を説明します class MyAlgorithm (override val uid: String) extends Estimator[MyAlgorithmModel] { override def fit(dataset: Dataset[_]): MyAlgorithmModel = { .... val model = new MyAlgorithmModel(....) copyValues(model) } override def copy(extra: ParamMap):MyAlgorithm = defaultCopy(extra) override def transformSchema(schema: StructType): StructType = { .... } } 学習のロジックを実装 IN: DataFrame OUT: Model
  109. 109. takemikamiʼs note ‒ http://takemikami.com/ アルゴリズムの実装 Modelの実装 • Modelに予測のロジックを実装します Copyright (C) Takeshi Mikami. All rights reserved. 109 Spark MLlibでの機械学習の応⽤ SparkMLlibに独⾃のアルゴリズムを実装する⽅法を説明します class MyAlgorithmModel (override val uid: String, ...) extends Model[MyAlgorithmModel] { override def transform(dataset: Dataset[_]): DataFrame = { .... } override def copy(extra: ParamMap): MyAlgorithmModel = { val copied = new MyAlgorithmModel(uid, ...) copyValues(copied, extra).setParent(parent) } override def transformSchema(schema: StructType): StructType = { .... StructType(schema.fields :+ StructField($(predictionCol), FloatType, false)) } } 学習のロジックを実装 IN: DataFrame OUT: DataFrame DataFrameに追加される カラムの情報 (通常は予測値のカラム)
  110. 110. takemikamiʼs note ‒ http://takemikami.com/ 参考⽂献リスト • 下⽥倫⼤、諸岡⼀成、今井雄太、⽯川有、⽥中裕⼀、⼩宮篤史、加嵜⻑ ⾨「詳解 Apache Spark」技術評論社 2016 • 丸⼭宏、神⾕直樹、⼭⽥敦「データサイエンティスト・ハンドブック」 近代科学社 2015 • 福島真太朗「UsefulR② データ分析プロセス」共⽴出版 2015 • 末吉正成・⾥洋平・坂巻隆治・⼩林雄⼀郎・⼤城信晃「Rではじめるビ ジネス統計分析」翔泳社 2014 • 稲垣宣⽣・⼭根芳知・吉⽥光雄「統計学⼊⾨」裳華房 1992 Copyright (C) Takeshi Mikami. All rights reserved. 110 付録 本資料作成にあたって参考にした⽂献リストです
  111. 111. takemikamiʼs note ‒ http://takemikami.com/ 参考Webサイトリスト • 有賀康顕「⼤規模データに対するデータサイエンスの進め⽅」 https://www.slideshare.net/Cloudera_jp/data-science-toward-big- data-cwt2016 • ⼟橋昌「Apache Spark の紹介(前半:Sparkのキホン)」 https://www.slideshare.net/hadoopxnttdata/apache-spark-spark Copyright (C) Takeshi Mikami. All rights reserved. 111 付録 本資料作成にあたって参考にしたWebサイトリストです

×