SlideShare a Scribd company logo
1 of 111
Download to read offline
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回 ⼈⼯知能・機械学習・ディープラーニング 〜中級者向け〜
takemikamiʼs note ‒ http://takemikami.com/
はじめに
• 対象:
機械学習やビッグデータ未経験のエンジニア
• テーマ:
Spark MLlibを利⽤した
ビッグデータを対象とした機械学習
• 内容
• 機械学習及びビッグデータの概要
• Hadoop及びSpark MLlibのシステム構成例
• 機械学習システムの開発プロセス
• Spark MLlibを使った機械学習の紹介
Copyright (C) Takeshi Mikami. All rights reserved. 2
本資料で説明する内容を⽰します
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
発表者のプロフィールを紹介します
takemikamiʼs note ‒ http://takemikami.com/
機械学習を応⽤するためのスキル
Copyright (C) Takeshi Mikami. All rights reserved. 4
※丸⼭宏・⼭⽥敦・神⾕直樹共著「データサイエンティスト・ハンドブック」(近代科学社)を参考に作成
ビジネス⼒
(business problem solving)
データエンジニアリング⼒
(data engineering)
データサイエンス⼒
(data science)
ビジネス課題を
理解・解決するスキル
統計・機械学習等の情報科学を
理解・活⽤するスキル
データの加⼯・運⽤環境
を実装するスキル
機械学習を応⽤するために必要なスキルを紹介します
データサイエンティスト
に求められるスキルとして
よく⽰されるものです
takemikamiʼs note ‒ http://takemikami.com/
ビジネス⼒とは
• ビジネス課題を整理する
「このデータ分析によって解きたいビジネス課題は何か」を考える
→課題を明確にしておかないと成果に結びつかない
• ビジネス課題を説明する
レポーティングやプレゼンスキル
→意思決定者が理解出来ないと実⾏できない
Copyright (C) Takeshi Mikami. All rights reserved. 5
機械学習を応⽤するためのビジネス⼒について説明します
takemikamiʼs note ‒ http://takemikami.com/
データサイエンス⼒とは
• アルゴリズムを理解する
統計学や機械学習のアルゴリズムの理解
→理解していないとチューニングが⾏えない
• データ・アルゴリズムの特性を理解する
データの特性、それらを計算するための計算資源の⾒
→実⽤的にデータを活⽤するための設計に必要
Copyright (C) Takeshi Mikami. All rights reserved. 6
機械学習を応⽤するためのデータサイエンス⼒について説明します
takemikamiʼs note ‒ http://takemikami.com/
データエンジニアリング⼒とは
• アルゴリズムの実装スキル
ライブラリの活⽤スキル、アルゴリズムの実装スキル
→システム化するために必要
• システムインフラの運⽤スキル
ビッグデータ、並列分散処理などの理解と運⽤スキル
→⼤量のデータを扱う場合に必要
Copyright (C) Takeshi Mikami. All rights reserved. 7
機械学習を応⽤するためのデータエンジニアリング⼒について説明します
takemikamiʼs note ‒ http://takemikami.com/
本⽇扱う分野 (機械学習を応⽤するためのスキル)
Copyright (C) Takeshi Mikami. All rights reserved. 8
ビジネス⼒
(business problem solving)
データエンジニアリング⼒
(data engineering)
データサイエンス⼒
(data science)
データエンジニアリング
を中⼼にお話しします
機械学習を応⽤するためのスキルの中で、本⽇お話する分野を⽰します
takemikamiʼs note ‒ http://takemikami.com/
機械学習及びビッグデータの概要
機械学習とビッグデータ
ビッグデータの概要
Hadoop、Spark、SparkMLlib
機械学習の概要
データ分析のアプローチ、機械学習の⼿法
Copyright (C) Takeshi Mikami. All rights reserved. 9
takemikamiʼs note ‒ http://takemikami.com/
機械学習とビッグデータの位置づけ
Copyright (C) Takeshi Mikami. All rights reserved. 10
機械学習とビッグデータ
ビジネスシーンにおける、機械学習とビッグデータの位置づけを⽰します。
分析対象
データ分析
社会・
業界
Data Warehouse
収集施策
収
集
DataMart
分析ツール
機械学習
加⼯
分析・機械学習担当者
⼈ 物
・・・
施策の検討や意思決定を、
機械学習で⽀援
takemikamiʼs note ‒ http://takemikami.com/
機械学習とビッグデータの位置づけ
Copyright (C) Takeshi Mikami. All rights reserved. 11
機械学習とビッグデータ
ビジネスシーンにおける、機械学習とビッグデータの位置づけを⽰します。
分析対象
データ分析
社会・
業界
Data Warehouse
収集施策
収
集
DataMart
分析ツール
機械学習
加⼯
分析・機械学習担当者
⼈ 物
・・・
IoTの普及などにより
⼤量のデータを
収集出来るようになってきた
分散ファイルシステム・分散処理によって、
⼤量のデータを保存・処理しやすくなってきた
⼤量のデータを対象とした
機械学習への要求
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の紹介をします
ビッグデータ分散処理のフレームワーク
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上のファイルにアクセス
①
②
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を実施
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上で処理を実施できるので効率が良い。
(処理対象データを取得するための通信が不要)
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の紹介をします
⾼速な並列データ処理システム
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によって実⾏することが出来る
takemikamiʼs note ‒ http://takemikami.com/
Spark MLlibとは
• Sparkを利⽤することで、⼤規模なデータに対する機械学習を容易に利
⽤出来る
• 以下のようなツールを備える
• 分類・回帰・クラスタリング・協調フィルタリングのような基本的な機械学習の
アルゴリズム
• 特徴量の変換・次元削減・選択のような特徴量処理
• モデル開発・評価・チューニングを効率的に⾏うためのパイプライン
• アルゴリズム・モデル・パイプラインの永続化
• その他、線形代数や統計、データハンドリングのユーティリティ
Copyright (C) Takeshi Mikami. All rights reserved. 18
ビッグデータの概要
Spark MLlibの紹介をします
Sparkの機械学習ライブラリ
機械学習にありがちな
反復計算を⾏うアルゴリズムで
Sparkは有利
takemikamiʼs note ‒ http://takemikami.com/
データ分析のアプローチ
• データ分析のアプーチは以下の3つに分類できる
Copyright (C) Takeshi Mikami. All rights reserved. 19
機械学習の概要
アプローチ 説明 例 ⼿法
説明的データ分析
(descriptive)
事実を説明する・⾒
つける
・どんな⼈が何を買っているか?
・ある広告がどれだけ売上に貢献して
いるか?
BI、データマイニ
ング
予測的データ分析
(predictive)
(未来や⽋測値を)予
測する
・ある商品群を閲覧した⼈の性別は?
・広告を出稿したら、どれだけ売上が
上がるか?
分類・回帰、統計
的機械学習
指⽰的データ分析
(prescriptive)
最適解を探す ・利益を最⼤化するための、最適な仕
⼊れ量は?
・売上を最⼤化するには、どこに広告
を出稿すべきか?
最適化、実験計画
→ 実施したい「分析のアプローチ」が何かを認識し、適切な「⼿法」を適⽤する
3つのデータ分析のアプローチを紹介します
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)という⼿法もあります
代表的な機械学習の⼿法を紹介します
takemikamiʼs note ‒ http://takemikami.com/
教師あり学習の基本
Copyright (C) Takeshi Mikami. All rights reserved. 21
機械学習の概要
教師あり学習の基本的な考え⽅を説明します
やりたいこと:
「xの値」が与えられた時に「yの値」を予測したい
→ 𝑦 = 𝑓 𝑥 という関数を求めたい
𝑦 = 𝑓(𝑥)
⽬的変数 説明変数
予測モデル⽬的変数が離散値→分類
⽬的変数が連続値→回帰
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)
takemikamiʼs note ‒ http://takemikami.com/
クラスタリング(clustering)と分類(classification)
Copyright (C) Takeshi Mikami. All rights reserved. 23
機械学習の概要
分類(classification) クラスタリング(clustering)
教師 教師あり 教師なし
説明 与えられたデータを
適切なクラスに振り分ける
与えられたデータを
複数のグループ分ける
イメージ
既存データを元に作った予測モデルで
新規データを振り分ける
データの特徴を元に
意味あるグループが無いか⾒つける
A
モデル
B C
クラスタリングと分類(教師あり学習と教師なし学習)の違いを⽰します
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
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について説明します
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
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とする
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の処理
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は他の処理に任せている)
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となる
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上のファイルに対するクエリ実⾏環境
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上のファイルに問い合わせができる
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
メタ情報 (テーブル定義)
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
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では期間指定のクエリを多⽤するので、期間のパーティションはよく使われる
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するとファイルが作成される
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時に、被結合テーブルを参照して紐付け
→巨⼤なテーブル同⼠の結合が可能
→被結合テーブルが⼗分に⼩さい場合は効率がよい
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
受注 受注明細
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
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
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
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
商品マスタ 受注明細
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
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
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
学習と予測
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
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 から
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 から
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として取得
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
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
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の処理結果
(分析の結果)
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
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の設定などに依存するので、参考程度にご覧下さい。
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
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
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」に
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以上にする
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
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
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」に
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>
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
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
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ドライバを配置
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>
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
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をインストール
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)
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を利⽤する設定
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
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
takemikamiʼs note ‒ http://takemikami.com/
機械学習システムの開発プロセス
機械学習システムの開発プロセスフロー
CRISP-DM、モデル開発の流れ
モデル開発のためのツール
基礎集計と可視化、特徴量処理、予測精度
Copyright (C) Takeshi Mikami. All rights reserved. 73
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
ビジネス
理解
データ
理解
評価
共有・展開
データ準備
モデリング
データ
データ分析プロジェクトを
実施する時の
タスクのサイクル
takemikamiʼs note ‒ http://takemikami.com/
ビジネス
理解
データ
理解
評価
共有・展開
データ準備
モデリング
データ
CRISP-DM
• ビジネス理解
ビジネス上の⽬的・課題を明確化する
• データ分析で何をやりたいのか?
• データ分析でどのような課題を解決したいのか?
• データ理解
ビジネス上の⽬的・課題を解決する為のデータを洗い出す
• 必要なデータ項⽬があるか、量は⼗分か?
• 記録が残っているか? (最新状態だけでなく、ログが残っているか)
• データの質に問題がないか? (⼊⼒ミスがありそうか)
Copyright (C) Takeshi Mikami. All rights reserved. 75
機械学習システムの開発プロセスフロー
データ分析のプロセスモデル(CRISP-DM)を紹介します
takemikamiʼs note ‒ http://takemikami.com/
CRISP-DM
• データ準備
データを分析⽤に加⼯する
• ⽋測値、外れ値の除外、正規化など
• モデリング
機械学習の⼿法を適⽤してモデルを作成する
• 学習、予測、予測結果の解釈
• 評価
モデルが、ビジネス上の⽬的を達成出来るかを評価する
• 共有・展開
分析結果から試作を計画・⽴案して実施する
Copyright (C) Takeshi Mikami. All rights reserved. 76
機械学習システムの開発プロセスフロー
データ分析のプロセスモデル(CRISP-DM)を紹介します
ビジネス
理解
データ
理解
評価
共有・展開
データ準備
モデリング
データ
takemikamiʼs note ‒ http://takemikami.com/
モデル開発の流れ
Copyright (C) Takeshi Mikami. All rights reserved. 77
機械学習システムの開発プロセスフロー
モデル開発の流れを紹介します
スコアリング
特徴量
⽣成
モデル
構築
(バッチ処理による)
スコアリング
(オンライン処理⽤)
モデル更新
モデル⽣成データ準備
データ
収集
データ
抽出
本番運⽤
モデル開発 基礎集計
精度評価
ハイパー
パラメータ調整
特徴量処理
業務データ
の理解
可視化
以下のようなツールを⽤い、モデル構築までの処理をチューニング
アルゴリズム選択
効果測定
機械学習によるモデル開発と、
施策への適⽤の流れ
takemikamiʼs note ‒ http://takemikami.com/
基礎集計と可視化:度数分布表とヒストグラム
• 度数分布表(frequency table)
データをいくつかの階級に分類し、度数を集計した表
• ヒストグラム(histogram)
度数分布表をグラフとした表したもの
Copyright (C) Takeshi Mikami. All rights reserved. 78
モデル開発のためのツール
度数分布表とヒストグラムについて説明します
takemikamiʼs note ‒ http://takemikami.com/
基礎集計と可視化:度数分布表とヒストグラム
Copyright (C) Takeshi Mikami. All rights reserved. 79
モデル開発のためのツール
Pandasでのヒストグラムの出⼒⽅法を⽰します
※HDFS/Hiveに格納されたデータの
ヒストグラムを描画する場合は
SparkSQLでランダムサンプリングする
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
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;
takemikamiʼs note ‒ http://takemikami.com/
基礎集計と可視化:要約統計量
Copyright (C) Takeshi Mikami. All rights reserved. 82
モデル開発のためのツール
Pandasでの要約統計量の出⼒⽅法を⽰します
最⼤値・最⼩値
中央値・四分位点
平均値・標準偏差
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
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;
takemikamiʼs note ‒ http://takemikami.com/
基礎集計と可視化:相関と散布図
Copyright (C) Takeshi Mikami. All rights reserved. 85
モデル開発のためのツール
Pandasでの散布図の出⼒⽅法を⽰します
takemikamiʼs note ‒ http://takemikami.com/
特徴量処理:正規化
• データの正規化は、
異なる種類のデータを1つの尺度に揃えるために⾏います
例えば以下のような正規化⼿法があります
• MinMaxScaler
最⼤値・最⼩値を揃える正規化
→データの範囲が限られているデータの場合に有効
• StandardScaler
平均を0、分散を1に揃える正規化
→外れ値があるデータの場合に、外れ値を無視出来る
Copyright (C) Takeshi Mikami. All rights reserved. 86
モデル開発のためのツール
データの正規化について説明します
takemikamiʼs note ‒ http://takemikami.com/
特徴量処理:正規化 MinMaxScalerの例
Copyright (C) Takeshi Mikami. All rights reserved. 87
モデル開発のためのツール
MLlibでのMinMaxScalerを紹介します
⼊⼒データの作成
学習と変換
takemikamiʼs note ‒ http://takemikami.com/
特徴量処理:正規化 MinMaxScalerの例
Copyright (C) Takeshi Mikami. All rights reserved. 88
モデル開発のためのツール
MLlibでのMinMaxScalerを紹介します
最⼩値0、最⼤値1に正規化
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 (主成分分析)
takemikamiʼs note ‒ http://takemikami.com/
特徴量処理:次元削減 PCAの例
Copyright (C) Takeshi Mikami. All rights reserved. 90
モデル開発のためのツール
MLlibでのPCA(主成分分析)を紹介します
5次元→3次元に削減する例
⼊⼒データの作成
学習と変換学習と変換
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)
教師データ
検証データ
データセット
説明変数 ⽬的変数
検証データと予測値を⽐較検証データと予測値を⽐較
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
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)
takemikamiʼs note ‒ http://takemikami.com/
Spark MLlibを使った機械学習の紹介
Spark MLlibでの機械学習
分類と回帰、クラスタリング、協調フィルタリング
Spark MLlibでの機械学習の応⽤
MLPipelines、アルゴリズムの実装
Copyright (C) Takeshi Mikami. All rights reserved. 94
takemikamiʼs note ‒ http://takemikami.com/
分類(classification) 決定⽊による分類の例
Copyright (C) Takeshi Mikami. All rights reserved. 95
Spark MLlibでの機械学習
MLlibでの決定⽊を紹介します
ライブラリ読込
データ準備
ラベル・特徴量の
index付け
takemikamiʼs note ‒ http://takemikami.com/
分類(classification) 決定⽊による分類の例
Copyright (C) Takeshi Mikami. All rights reserved. 96
Spark MLlibでの機械学習
MLlibでの決定⽊を紹介します
学習
予測
takemikamiʼs note ‒ http://takemikami.com/
分類(classification) 決定⽊による分類の例
Copyright (C) Takeshi Mikami. All rights reserved. 97
Spark MLlibでの機械学習
MLlibでの決定⽊を紹介します
評価
takemikamiʼs note ‒ http://takemikami.com/
回帰(regression) 線形回帰による回帰の例
Copyright (C) Takeshi Mikami. All rights reserved. 98
Spark MLlibでの機械学習
MLlibでの線形回帰を紹介します
ライブラリ読込
データ準備
学習
takemikamiʼs note ‒ http://takemikami.com/
回帰(regression) 線形回帰による回帰の例
Copyright (C) Takeshi Mikami. All rights reserved. 99
Spark MLlibでの機械学習
MLlibでの線形回帰を紹介します
評価
takemikamiʼs note ‒ http://takemikami.com/
クラスタリング(clustering) k-meansの例
Copyright (C) Takeshi Mikami. All rights reserved. 100
Spark MLlibでの機械学習
MLlibでのk-meansを紹介します
ライブラリ読込
データ準備
学習
takemikamiʼs note ‒ http://takemikami.com/
クラスタリング(clustering) k-meansの例
Copyright (C) Takeshi Mikami. All rights reserved. 101
Spark MLlibでの機械学習
MLlibでのk-meansを紹介します
評価
takemikamiʼs note ‒ http://takemikami.com/
協調フィルタリング ALSの例
Copyright (C) Takeshi Mikami. All rights reserved. 102
Spark MLlibでの機械学習
MLlibでのALSを紹介します
ライブラリ読込
データ準備
学習
予測
takemikamiʼs note ‒ http://takemikami.com/
協調フィルタリング ALSの例
Copyright (C) Takeshi Mikami. All rights reserved. 103
Spark MLlibでの機械学習
MLlibでのALSを紹介します
評価
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での
クラス分類
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での
クラス分類
両⽅に同じ処理を記載両⽅に同じ処理を記載 ※精度チューニングの過程で頻繁に変更する部分なので
⼿間に加えて、反映漏れのミスも発⽣しやすい
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化して置くと
確実に両⽅で同じ処理を実施
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
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
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に追加される
カラムの情報
(通常は予測値のカラム)
takemikamiʼs note ‒ http://takemikami.com/
参考⽂献リスト
• 下⽥倫⼤、諸岡⼀成、今井雄太、⽯川有、⽥中裕⼀、⼩宮篤史、加嵜⻑
⾨「詳解 Apache Spark」技術評論社 2016
• 丸⼭宏、神⾕直樹、⼭⽥敦「データサイエンティスト・ハンドブック」
近代科学社 2015
• 福島真太朗「UsefulR② データ分析プロセス」共⽴出版 2015
• 末吉正成・⾥洋平・坂巻隆治・⼩林雄⼀郎・⼤城信晃「Rではじめるビ
ジネス統計分析」翔泳社 2014
• 稲垣宣⽣・⼭根芳知・吉⽥光雄「統計学⼊⾨」裳華房 1992
Copyright (C) Takeshi Mikami. All rights reserved. 110
付録
本資料作成にあたって参考にした⽂献リストです
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サイトリストです

More Related Content

What's hot

R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜機会学習・データビジュアライゼーション事始め〜
R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜機会学習・データビジュアライゼーション事始め〜R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜機会学習・データビジュアライゼーション事始め〜
R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜機会学習・データビジュアライゼーション事始め〜Yasuyuki Sugai
 
第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜
第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜
第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜Yasuyuki Sugai
 
Treasure Data × Wave Analytics EC Demo
Treasure Data × Wave Analytics EC DemoTreasure Data × Wave Analytics EC Demo
Treasure Data × Wave Analytics EC DemoTakahiro Inoue
 
#経済学のための実践的データ分析 10. テキスト分析の方法
#経済学のための実践的データ分析 10. テキスト分析の方法#経済学のための実践的データ分析 10. テキスト分析の方法
#経済学のための実践的データ分析 10. テキスト分析の方法Yasushi Hara
 
初心者のためのRとRStudio入門 vol.2
初心者のためのRとRStudio入門 vol.2初心者のためのRとRStudio入門 vol.2
初心者のためのRとRStudio入門 vol.2OWL.learn
 
Hivemall v0.3の機能紹介@1st Hivemall meetup
Hivemall v0.3の機能紹介@1st Hivemall meetupHivemall v0.3の機能紹介@1st Hivemall meetup
Hivemall v0.3の機能紹介@1st Hivemall meetupMakoto Yui
 
VLDB2015 会議報告
VLDB2015 会議報告VLDB2015 会議報告
VLDB2015 会議報告Yuto Hayamizu
 
Oracle Cloud Developers Meetup@東京
Oracle Cloud Developers Meetup@東京Oracle Cloud Developers Meetup@東京
Oracle Cloud Developers Meetup@東京tuchimur
 
経済学のための実践的データ分析 1. イントロダクション/Jupyter Notebook をインストールする
経済学のための実践的データ分析 1. イントロダクション/Jupyter Notebook をインストールする経済学のための実践的データ分析 1. イントロダクション/Jupyter Notebook をインストールする
経済学のための実践的データ分析 1. イントロダクション/Jupyter Notebook をインストールするYasushi Hara
 
Hivemall LT @ Machine Learning Casual Talks #3
Hivemall LT @ Machine Learning Casual Talks #3Hivemall LT @ Machine Learning Casual Talks #3
Hivemall LT @ Machine Learning Casual Talks #3Makoto Yui
 
Webディレクター・マーケターのためのSQL教室 2015/07/13
Webディレクター・マーケターのためのSQL教室 2015/07/13Webディレクター・マーケターのためのSQL教室 2015/07/13
Webディレクター・マーケターのためのSQL教室 2015/07/13OWL.learn
 
さくっとはじめるテキストマイニング(R言語)  スタートアップ編
さくっとはじめるテキストマイニング(R言語)  スタートアップ編さくっとはじめるテキストマイニング(R言語)  スタートアップ編
さくっとはじめるテキストマイニング(R言語)  スタートアップ編Yutaka Shimada
 
トレジャーデータのバッチクエリとアドホッククエリを理解する
トレジャーデータのバッチクエリとアドホッククエリを理解するトレジャーデータのバッチクエリとアドホッククエリを理解する
トレジャーデータのバッチクエリとアドホッククエリを理解するTakahiro Inoue
 
並列データベースシステムの概念と原理
並列データベースシステムの概念と原理並列データベースシステムの概念と原理
並列データベースシステムの概念と原理Makoto Yui
 
JAWSUG 20191028 (modified)
JAWSUG 20191028 (modified)JAWSUG 20191028 (modified)
JAWSUG 20191028 (modified)陽平 山口
 
20140708 オンラインゲームソリューション
20140708 オンラインゲームソリューション20140708 オンラインゲームソリューション
20140708 オンラインゲームソリューションTakahiro Inoue
 
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門Koichi Hamada
 
Deep Learningハンズオン勉強会「Caffeで画像分類を試してみようの会」
Deep Learningハンズオン勉強会「Caffeで画像分類を試してみようの会」Deep Learningハンズオン勉強会「Caffeで画像分類を試してみようの会」
Deep Learningハンズオン勉強会「Caffeで画像分類を試してみようの会」Yasuyuki Sugai
 

What's hot (20)

R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜機会学習・データビジュアライゼーション事始め〜
R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜機会学習・データビジュアライゼーション事始め〜R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜機会学習・データビジュアライゼーション事始め〜
R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜機会学習・データビジュアライゼーション事始め〜
 
第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜
第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜
第2回 R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜相関分析による需要予測編〜
 
Treasure Data × Wave Analytics EC Demo
Treasure Data × Wave Analytics EC DemoTreasure Data × Wave Analytics EC Demo
Treasure Data × Wave Analytics EC Demo
 
#経済学のための実践的データ分析 10. テキスト分析の方法
#経済学のための実践的データ分析 10. テキスト分析の方法#経済学のための実践的データ分析 10. テキスト分析の方法
#経済学のための実践的データ分析 10. テキスト分析の方法
 
初心者のためのRとRStudio入門 vol.2
初心者のためのRとRStudio入門 vol.2初心者のためのRとRStudio入門 vol.2
初心者のためのRとRStudio入門 vol.2
 
Hivemall v0.3の機能紹介@1st Hivemall meetup
Hivemall v0.3の機能紹介@1st Hivemall meetupHivemall v0.3の機能紹介@1st Hivemall meetup
Hivemall v0.3の機能紹介@1st Hivemall meetup
 
VLDB2015 会議報告
VLDB2015 会議報告VLDB2015 会議報告
VLDB2015 会議報告
 
Oracle Cloud Developers Meetup@東京
Oracle Cloud Developers Meetup@東京Oracle Cloud Developers Meetup@東京
Oracle Cloud Developers Meetup@東京
 
経済学のための実践的データ分析 1. イントロダクション/Jupyter Notebook をインストールする
経済学のための実践的データ分析 1. イントロダクション/Jupyter Notebook をインストールする経済学のための実践的データ分析 1. イントロダクション/Jupyter Notebook をインストールする
経済学のための実践的データ分析 1. イントロダクション/Jupyter Notebook をインストールする
 
Hivemall LT @ Machine Learning Casual Talks #3
Hivemall LT @ Machine Learning Casual Talks #3Hivemall LT @ Machine Learning Casual Talks #3
Hivemall LT @ Machine Learning Casual Talks #3
 
Webディレクター・マーケターのためのSQL教室 2015/07/13
Webディレクター・マーケターのためのSQL教室 2015/07/13Webディレクター・マーケターのためのSQL教室 2015/07/13
Webディレクター・マーケターのためのSQL教室 2015/07/13
 
さくっとはじめるテキストマイニング(R言語)  スタートアップ編
さくっとはじめるテキストマイニング(R言語)  スタートアップ編さくっとはじめるテキストマイニング(R言語)  スタートアップ編
さくっとはじめるテキストマイニング(R言語)  スタートアップ編
 
Hadoop~Yahoo! JAPANの活用について~
Hadoop~Yahoo! JAPANの活用について~Hadoop~Yahoo! JAPANの活用について~
Hadoop~Yahoo! JAPANの活用について~
 
トレジャーデータのバッチクエリとアドホッククエリを理解する
トレジャーデータのバッチクエリとアドホッククエリを理解するトレジャーデータのバッチクエリとアドホッククエリを理解する
トレジャーデータのバッチクエリとアドホッククエリを理解する
 
並列データベースシステムの概念と原理
並列データベースシステムの概念と原理並列データベースシステムの概念と原理
並列データベースシステムの概念と原理
 
JAWSUG 20191028 (modified)
JAWSUG 20191028 (modified)JAWSUG 20191028 (modified)
JAWSUG 20191028 (modified)
 
20140708 オンラインゲームソリューション
20140708 オンラインゲームソリューション20140708 オンラインゲームソリューション
20140708 オンラインゲームソリューション
 
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門
 
Deep Learningハンズオン勉強会「Caffeで画像分類を試してみようの会」
Deep Learningハンズオン勉強会「Caffeで画像分類を試してみようの会」Deep Learningハンズオン勉強会「Caffeで画像分類を試してみようの会」
Deep Learningハンズオン勉強会「Caffeで画像分類を試してみようの会」
 
Hadoopカンファレンス2013
Hadoopカンファレンス2013Hadoopカンファレンス2013
Hadoopカンファレンス2013
 

Viewers also liked

[db tech showcase Tokyo 2017] AzureでOSS DB/データ処理基盤のPaaSサービスを使ってみよう (Azure Dat...
[db tech showcase Tokyo 2017] AzureでOSS DB/データ処理基盤のPaaSサービスを使ってみよう (Azure Dat...[db tech showcase Tokyo 2017] AzureでOSS DB/データ処理基盤のPaaSサービスを使ってみよう (Azure Dat...
[db tech showcase Tokyo 2017] AzureでOSS DB/データ処理基盤のPaaSサービスを使ってみよう (Azure Dat...Naoki (Neo) SATO
 
Apache Hadoopを利用したビッグデータ分析基盤
Apache Hadoopを利用したビッグデータ分析基盤Apache Hadoopを利用したビッグデータ分析基盤
Apache Hadoopを利用したビッグデータ分析基盤Hortonworks Japan
 
What the Spark!? Intro and Use Cases
What the Spark!? Intro and Use CasesWhat the Spark!? Intro and Use Cases
What the Spark!? Intro and Use CasesAerospike, Inc.
 
ちょっと理解に自信がないな という皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)
ちょっと理解に自信がないなという皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)ちょっと理解に自信がないなという皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)
ちょっと理解に自信がないな という皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)hamaken
 
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料) 40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料) hamaken
 
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)NTT DATA OSS Professional Services
 
Top 5 mistakes when writing Spark applications
Top 5 mistakes when writing Spark applicationsTop 5 mistakes when writing Spark applications
Top 5 mistakes when writing Spark applicationshadooparchbook
 

Viewers also liked (8)

[db tech showcase Tokyo 2017] AzureでOSS DB/データ処理基盤のPaaSサービスを使ってみよう (Azure Dat...
[db tech showcase Tokyo 2017] AzureでOSS DB/データ処理基盤のPaaSサービスを使ってみよう (Azure Dat...[db tech showcase Tokyo 2017] AzureでOSS DB/データ処理基盤のPaaSサービスを使ってみよう (Azure Dat...
[db tech showcase Tokyo 2017] AzureでOSS DB/データ処理基盤のPaaSサービスを使ってみよう (Azure Dat...
 
Apache Hadoopを利用したビッグデータ分析基盤
Apache Hadoopを利用したビッグデータ分析基盤Apache Hadoopを利用したビッグデータ分析基盤
Apache Hadoopを利用したビッグデータ分析基盤
 
What the Spark!? Intro and Use Cases
What the Spark!? Intro and Use CasesWhat the Spark!? Intro and Use Cases
What the Spark!? Intro and Use Cases
 
ちょっと理解に自信がないな という皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)
ちょっと理解に自信がないなという皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)ちょっと理解に自信がないなという皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)
ちょっと理解に自信がないな という皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)
 
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料) 40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
 
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
 
Top 5 mistakes when writing Spark applications
Top 5 mistakes when writing Spark applicationsTop 5 mistakes when writing Spark applications
Top 5 mistakes when writing Spark applications
 
The AI Rush
The AI RushThe AI Rush
The AI Rush
 

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

1028 TECH & BRIDGE MEETING
1028 TECH & BRIDGE MEETING1028 TECH & BRIDGE MEETING
1028 TECH & BRIDGE MEETING健司 亀本
 
ビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラムビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラムRecruit Technologies
 
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]David Buck
 
MySQLで学ぶ機械学習ことはじめ.pdf
MySQLで学ぶ機械学習ことはじめ.pdfMySQLで学ぶ機械学習ことはじめ.pdf
MySQLで学ぶ機械学習ことはじめ.pdfMachiko Ikoma
 
ビッグデータ&データマネジメント展
ビッグデータ&データマネジメント展ビッグデータ&データマネジメント展
ビッグデータ&データマネジメント展Recruit Technologies
 
経済学のための実践的データ分析 4.SQL ことはじめ
経済学のための実践的データ分析 4.SQL ことはじめ経済学のための実践的データ分析 4.SQL ことはじめ
経済学のための実践的データ分析 4.SQL ことはじめYasushi Hara
 
ソーシャルデザインパターン -評判と情報収集-
ソーシャルデザインパターン -評判と情報収集-ソーシャルデザインパターン -評判と情報収集-
ソーシャルデザインパターン -評判と情報収集-Koichi Hamada
 
20161027 hadoop summit Generating Recommendations at Amazon Scale with Apach...
20161027 hadoop summit  Generating Recommendations at Amazon Scale with Apach...20161027 hadoop summit  Generating Recommendations at Amazon Scale with Apach...
20161027 hadoop summit Generating Recommendations at Amazon Scale with Apach...Amazon Web Services Japan
 
Talk 1「データインテグレーションとは何か」
Talk 1「データインテグレーションとは何か」Talk 1「データインテグレーションとは何か」
Talk 1「データインテグレーションとは何か」Takeshi Akutsu
 
TokyoWebminig カジュアルなHadoop
TokyoWebminig カジュアルなHadoopTokyoWebminig カジュアルなHadoop
TokyoWebminig カジュアルなHadoopTeruo Kawasaki
 
sparksql-hive-bench-by-nec-hwx-at-hcj16
sparksql-hive-bench-by-nec-hwx-at-hcj16sparksql-hive-bench-by-nec-hwx-at-hcj16
sparksql-hive-bench-by-nec-hwx-at-hcj16Yifeng Jiang
 
ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド
 ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド
ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイドEtsuji Nakai
 
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ by トレジャーデータ株式会社 斉藤太郎
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ  by トレジャーデータ株式会社 斉藤太郎[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ  by トレジャーデータ株式会社 斉藤太郎
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ by トレジャーデータ株式会社 斉藤太郎Insight Technology, Inc.
 
企業等に蓄積されたデータを分析するための処理機能の提案
企業等に蓄積されたデータを分析するための処理機能の提案企業等に蓄積されたデータを分析するための処理機能の提案
企業等に蓄積されたデータを分析するための処理機能の提案Toshiyuki Shimono
 
Hadoopデータ基盤とMulti-CloudなML基盤への取り組みの紹介
Hadoopデータ基盤とMulti-CloudなML基盤への取り組みの紹介Hadoopデータ基盤とMulti-CloudなML基盤への取り組みの紹介
Hadoopデータ基盤とMulti-CloudなML基盤への取り組みの紹介MicroAd, Inc.(Engineer)
 
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 TokyoPrestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 TokyoTreasure Data, Inc.
 
ディープラーニング最近の発展とビジネス応用への課題
ディープラーニング最近の発展とビジネス応用への課題ディープラーニング最近の発展とビジネス応用への課題
ディープラーニング最近の発展とビジネス応用への課題Kenta Oono
 
Cloudera Impalaをサービスに組み込むときに苦労した話
Cloudera Impalaをサービスに組み込むときに苦労した話Cloudera Impalaをサービスに組み込むときに苦労した話
Cloudera Impalaをサービスに組み込むときに苦労した話Yukinori Suda
 
WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料Recruit Technologies
 

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

1028 TECH & BRIDGE MEETING
1028 TECH & BRIDGE MEETING1028 TECH & BRIDGE MEETING
1028 TECH & BRIDGE MEETING
 
ビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラムビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラム
 
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]
 
MySQLで学ぶ機械学習ことはじめ.pdf
MySQLで学ぶ機械学習ことはじめ.pdfMySQLで学ぶ機械学習ことはじめ.pdf
MySQLで学ぶ機械学習ことはじめ.pdf
 
stapy_028_talk1
stapy_028_talk1stapy_028_talk1
stapy_028_talk1
 
ビッグデータ&データマネジメント展
ビッグデータ&データマネジメント展ビッグデータ&データマネジメント展
ビッグデータ&データマネジメント展
 
経済学のための実践的データ分析 4.SQL ことはじめ
経済学のための実践的データ分析 4.SQL ことはじめ経済学のための実践的データ分析 4.SQL ことはじめ
経済学のための実践的データ分析 4.SQL ことはじめ
 
ソーシャルデザインパターン -評判と情報収集-
ソーシャルデザインパターン -評判と情報収集-ソーシャルデザインパターン -評判と情報収集-
ソーシャルデザインパターン -評判と情報収集-
 
20161027 hadoop summit Generating Recommendations at Amazon Scale with Apach...
20161027 hadoop summit  Generating Recommendations at Amazon Scale with Apach...20161027 hadoop summit  Generating Recommendations at Amazon Scale with Apach...
20161027 hadoop summit Generating Recommendations at Amazon Scale with Apach...
 
Talk 1「データインテグレーションとは何か」
Talk 1「データインテグレーションとは何か」Talk 1「データインテグレーションとは何か」
Talk 1「データインテグレーションとは何か」
 
TokyoWebminig カジュアルなHadoop
TokyoWebminig カジュアルなHadoopTokyoWebminig カジュアルなHadoop
TokyoWebminig カジュアルなHadoop
 
sparksql-hive-bench-by-nec-hwx-at-hcj16
sparksql-hive-bench-by-nec-hwx-at-hcj16sparksql-hive-bench-by-nec-hwx-at-hcj16
sparksql-hive-bench-by-nec-hwx-at-hcj16
 
ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド
 ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド
ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド
 
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ by トレジャーデータ株式会社 斉藤太郎
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ  by トレジャーデータ株式会社 斉藤太郎[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ  by トレジャーデータ株式会社 斉藤太郎
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ by トレジャーデータ株式会社 斉藤太郎
 
企業等に蓄積されたデータを分析するための処理機能の提案
企業等に蓄積されたデータを分析するための処理機能の提案企業等に蓄積されたデータを分析するための処理機能の提案
企業等に蓄積されたデータを分析するための処理機能の提案
 
Hadoopデータ基盤とMulti-CloudなML基盤への取り組みの紹介
Hadoopデータ基盤とMulti-CloudなML基盤への取り組みの紹介Hadoopデータ基盤とMulti-CloudなML基盤への取り組みの紹介
Hadoopデータ基盤とMulti-CloudなML基盤への取り組みの紹介
 
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 TokyoPrestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
 
ディープラーニング最近の発展とビジネス応用への課題
ディープラーニング最近の発展とビジネス応用への課題ディープラーニング最近の発展とビジネス応用への課題
ディープラーニング最近の発展とビジネス応用への課題
 
Cloudera Impalaをサービスに組み込むときに苦労した話
Cloudera Impalaをサービスに組み込むときに苦労した話Cloudera Impalaをサービスに組み込むときに苦労した話
Cloudera Impalaをサービスに組み込むときに苦労した話
 
WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料
 

More from Takeshi Mikami

rdflintのvscode拡張の紹介とその実装方法
rdflintのvscode拡張の紹介とその実装方法rdflintのvscode拡張の紹介とその実装方法
rdflintのvscode拡張の紹介とその実装方法Takeshi Mikami
 
適切なクラスタ数を機械的に求める手法の紹介
適切なクラスタ数を機械的に求める手法の紹介適切なクラスタ数を機械的に求める手法の紹介
適切なクラスタ数を機械的に求める手法の紹介Takeshi Mikami
 
OAuth 2.0による認可の流れ
OAuth 2.0による認可の流れOAuth 2.0による認可の流れ
OAuth 2.0による認可の流れTakeshi Mikami
 
MapReduceによるConnected Components(連結成分)の見つけ方
MapReduceによるConnected Components(連結成分)の見つけ方MapReduceによるConnected Components(連結成分)の見つけ方
MapReduceによるConnected Components(連結成分)の見つけ方Takeshi Mikami
 
RDFチェックツール「rdflint」のご紹介 (LODチャレンジ2019受賞作品紹介 基盤技術部門優秀賞)
RDFチェックツール「rdflint」のご紹介 (LODチャレンジ2019受賞作品紹介 基盤技術部門優秀賞)RDFチェックツール「rdflint」のご紹介 (LODチャレンジ2019受賞作品紹介 基盤技術部門優秀賞)
RDFチェックツール「rdflint」のご紹介 (LODチャレンジ2019受賞作品紹介 基盤技術部門優秀賞)Takeshi Mikami
 
データサイエンスアイドル「小日向美穂」と考える「つながり」
データサイエンスアイドル「小日向美穂」と考える「つながり」データサイエンスアイドル「小日向美穂」と考える「つながり」
データサイエンスアイドル「小日向美穂」と考える「つながり」Takeshi Mikami
 
RDFのチェックツール「rdflint」と コミュニティによるオープンデータの作成
RDFのチェックツール「rdflint」とコミュニティによるオープンデータの作成RDFのチェックツール「rdflint」とコミュニティによるオープンデータの作成
RDFのチェックツール「rdflint」と コミュニティによるオープンデータの作成Takeshi Mikami
 
CircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウ
CircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウCircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウ
CircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウTakeshi Mikami
 
GitHubの機能を活用したGitHub Flowによる開発の進め方
GitHubの機能を活用したGitHub Flowによる開発の進め方GitHubの機能を活用したGitHub Flowによる開発の進め方
GitHubの機能を活用したGitHub Flowによる開発の進め方Takeshi Mikami
 
HBase CompleteBulkLoadその仕組み&発生した問題
HBase CompleteBulkLoadその仕組み&発生した問題HBase CompleteBulkLoadその仕組み&発生した問題
HBase CompleteBulkLoadその仕組み&発生した問題Takeshi Mikami
 
RDFチェックツール「rdflint」のご紹介
RDFチェックツール「rdflint」のご紹介RDFチェックツール「rdflint」のご紹介
RDFチェックツール「rdflint」のご紹介Takeshi Mikami
 
アーリース情報技術株式会社 会社案内 (2019/02/13)
アーリース情報技術株式会社 会社案内 (2019/02/13)アーリース情報技術株式会社 会社案内 (2019/02/13)
アーリース情報技術株式会社 会社案内 (2019/02/13)Takeshi Mikami
 
Spark MLlib ML Pipelines の概要 及びpysparkからの扱い方
Spark MLlib ML Pipelines の概要 及びpysparkからの扱い方Spark MLlib ML Pipelines の概要 及びpysparkからの扱い方
Spark MLlib ML Pipelines の概要 及びpysparkからの扱い方Takeshi Mikami
 
センサーによるデータ計測と異常検知の基本
センサーによるデータ計測と異常検知の基本センサーによるデータ計測と異常検知の基本
センサーによるデータ計測と異常検知の基本Takeshi Mikami
 
Webサイトのアクセスログによるユーザー属性推定
Webサイトのアクセスログによるユーザー属性推定Webサイトのアクセスログによるユーザー属性推定
Webサイトのアクセスログによるユーザー属性推定Takeshi Mikami
 
Google Cloud Dataflowによる データ変換処理入門
Google Cloud Dataflowによる データ変換処理入門Google Cloud Dataflowによる データ変換処理入門
Google Cloud Dataflowによる データ変換処理入門Takeshi Mikami
 
IoTでの機械学習活用イメージと強化学習のご紹介
IoTでの機械学習活用イメージと強化学習のご紹介IoTでの機械学習活用イメージと強化学習のご紹介
IoTでの機械学習活用イメージと強化学習のご紹介Takeshi Mikami
 
協調フィルタリング・アソシエーション分析によるレコメンド手法の紹介
協調フィルタリング・アソシエーション分析によるレコメンド手法の紹介協調フィルタリング・アソシエーション分析によるレコメンド手法の紹介
協調フィルタリング・アソシエーション分析によるレコメンド手法の紹介Takeshi Mikami
 
担当アイドルに反応してLチカさせる予測モデル開発
担当アイドルに反応してLチカさせる予測モデル開発担当アイドルに反応してLチカさせる予測モデル開発
担当アイドルに反応してLチカさせる予測モデル開発Takeshi Mikami
 

More from Takeshi Mikami (20)

rdflintのvscode拡張の紹介とその実装方法
rdflintのvscode拡張の紹介とその実装方法rdflintのvscode拡張の紹介とその実装方法
rdflintのvscode拡張の紹介とその実装方法
 
適切なクラスタ数を機械的に求める手法の紹介
適切なクラスタ数を機械的に求める手法の紹介適切なクラスタ数を機械的に求める手法の紹介
適切なクラスタ数を機械的に求める手法の紹介
 
OAuth 2.0による認可の流れ
OAuth 2.0による認可の流れOAuth 2.0による認可の流れ
OAuth 2.0による認可の流れ
 
MapReduceによるConnected Components(連結成分)の見つけ方
MapReduceによるConnected Components(連結成分)の見つけ方MapReduceによるConnected Components(連結成分)の見つけ方
MapReduceによるConnected Components(連結成分)の見つけ方
 
RDFチェックツール「rdflint」のご紹介 (LODチャレンジ2019受賞作品紹介 基盤技術部門優秀賞)
RDFチェックツール「rdflint」のご紹介 (LODチャレンジ2019受賞作品紹介 基盤技術部門優秀賞)RDFチェックツール「rdflint」のご紹介 (LODチャレンジ2019受賞作品紹介 基盤技術部門優秀賞)
RDFチェックツール「rdflint」のご紹介 (LODチャレンジ2019受賞作品紹介 基盤技術部門優秀賞)
 
データサイエンスアイドル「小日向美穂」と考える「つながり」
データサイエンスアイドル「小日向美穂」と考える「つながり」データサイエンスアイドル「小日向美穂」と考える「つながり」
データサイエンスアイドル「小日向美穂」と考える「つながり」
 
RDFのチェックツール「rdflint」と コミュニティによるオープンデータの作成
RDFのチェックツール「rdflint」とコミュニティによるオープンデータの作成RDFのチェックツール「rdflint」とコミュニティによるオープンデータの作成
RDFのチェックツール「rdflint」と コミュニティによるオープンデータの作成
 
CircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウ
CircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウCircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウ
CircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウ
 
GitHubの機能を活用したGitHub Flowによる開発の進め方
GitHubの機能を活用したGitHub Flowによる開発の進め方GitHubの機能を活用したGitHub Flowによる開発の進め方
GitHubの機能を活用したGitHub Flowによる開発の進め方
 
HBase CompleteBulkLoadその仕組み&発生した問題
HBase CompleteBulkLoadその仕組み&発生した問題HBase CompleteBulkLoadその仕組み&発生した問題
HBase CompleteBulkLoadその仕組み&発生した問題
 
RDFチェックツール「rdflint」のご紹介
RDFチェックツール「rdflint」のご紹介RDFチェックツール「rdflint」のご紹介
RDFチェックツール「rdflint」のご紹介
 
アーリース情報技術株式会社 会社案内 (2019/02/13)
アーリース情報技術株式会社 会社案内 (2019/02/13)アーリース情報技術株式会社 会社案内 (2019/02/13)
アーリース情報技術株式会社 会社案内 (2019/02/13)
 
Spark MLlib ML Pipelines の概要 及びpysparkからの扱い方
Spark MLlib ML Pipelines の概要 及びpysparkからの扱い方Spark MLlib ML Pipelines の概要 及びpysparkからの扱い方
Spark MLlib ML Pipelines の概要 及びpysparkからの扱い方
 
SPARQL入門
SPARQL入門SPARQL入門
SPARQL入門
 
センサーによるデータ計測と異常検知の基本
センサーによるデータ計測と異常検知の基本センサーによるデータ計測と異常検知の基本
センサーによるデータ計測と異常検知の基本
 
Webサイトのアクセスログによるユーザー属性推定
Webサイトのアクセスログによるユーザー属性推定Webサイトのアクセスログによるユーザー属性推定
Webサイトのアクセスログによるユーザー属性推定
 
Google Cloud Dataflowによる データ変換処理入門
Google Cloud Dataflowによる データ変換処理入門Google Cloud Dataflowによる データ変換処理入門
Google Cloud Dataflowによる データ変換処理入門
 
IoTでの機械学習活用イメージと強化学習のご紹介
IoTでの機械学習活用イメージと強化学習のご紹介IoTでの機械学習活用イメージと強化学習のご紹介
IoTでの機械学習活用イメージと強化学習のご紹介
 
協調フィルタリング・アソシエーション分析によるレコメンド手法の紹介
協調フィルタリング・アソシエーション分析によるレコメンド手法の紹介協調フィルタリング・アソシエーション分析によるレコメンド手法の紹介
協調フィルタリング・アソシエーション分析によるレコメンド手法の紹介
 
担当アイドルに反応してLチカさせる予測モデル開発
担当アイドルに反応してLチカさせる予測モデル開発担当アイドルに反応してLチカさせる予測モデル開発
担当アイドルに反応してLチカさせる予測モデル開発
 

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

  • 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. takemikamiʼs note ‒ http://takemikami.com/ はじめに • 対象: 機械学習やビッグデータ未経験のエンジニア • テーマ: Spark MLlibを利⽤した ビッグデータを対象とした機械学習 • 内容 • 機械学習及びビッグデータの概要 • Hadoop及びSpark MLlibのシステム構成例 • 機械学習システムの開発プロセス • Spark MLlibを使った機械学習の紹介 Copyright (C) Takeshi Mikami. All rights reserved. 2 本資料で説明する内容を⽰します
  • 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. takemikamiʼs note ‒ http://takemikami.com/ 機械学習を応⽤するためのスキル Copyright (C) Takeshi Mikami. All rights reserved. 4 ※丸⼭宏・⼭⽥敦・神⾕直樹共著「データサイエンティスト・ハンドブック」(近代科学社)を参考に作成 ビジネス⼒ (business problem solving) データエンジニアリング⼒ (data engineering) データサイエンス⼒ (data science) ビジネス課題を 理解・解決するスキル 統計・機械学習等の情報科学を 理解・活⽤するスキル データの加⼯・運⽤環境 を実装するスキル 機械学習を応⽤するために必要なスキルを紹介します データサイエンティスト に求められるスキルとして よく⽰されるものです
  • 5. takemikamiʼs note ‒ http://takemikami.com/ ビジネス⼒とは • ビジネス課題を整理する 「このデータ分析によって解きたいビジネス課題は何か」を考える →課題を明確にしておかないと成果に結びつかない • ビジネス課題を説明する レポーティングやプレゼンスキル →意思決定者が理解出来ないと実⾏できない Copyright (C) Takeshi Mikami. All rights reserved. 5 機械学習を応⽤するためのビジネス⼒について説明します
  • 6. takemikamiʼs note ‒ http://takemikami.com/ データサイエンス⼒とは • アルゴリズムを理解する 統計学や機械学習のアルゴリズムの理解 →理解していないとチューニングが⾏えない • データ・アルゴリズムの特性を理解する データの特性、それらを計算するための計算資源の⾒ →実⽤的にデータを活⽤するための設計に必要 Copyright (C) Takeshi Mikami. All rights reserved. 6 機械学習を応⽤するためのデータサイエンス⼒について説明します
  • 7. takemikamiʼs note ‒ http://takemikami.com/ データエンジニアリング⼒とは • アルゴリズムの実装スキル ライブラリの活⽤スキル、アルゴリズムの実装スキル →システム化するために必要 • システムインフラの運⽤スキル ビッグデータ、並列分散処理などの理解と運⽤スキル →⼤量のデータを扱う場合に必要 Copyright (C) Takeshi Mikami. All rights reserved. 7 機械学習を応⽤するためのデータエンジニアリング⼒について説明します
  • 8. takemikamiʼs note ‒ http://takemikami.com/ 本⽇扱う分野 (機械学習を応⽤するためのスキル) Copyright (C) Takeshi Mikami. All rights reserved. 8 ビジネス⼒ (business problem solving) データエンジニアリング⼒ (data engineering) データサイエンス⼒ (data science) データエンジニアリング を中⼼にお話しします 機械学習を応⽤するためのスキルの中で、本⽇お話する分野を⽰します
  • 9. takemikamiʼs note ‒ http://takemikami.com/ 機械学習及びビッグデータの概要 機械学習とビッグデータ ビッグデータの概要 Hadoop、Spark、SparkMLlib 機械学習の概要 データ分析のアプローチ、機械学習の⼿法 Copyright (C) Takeshi Mikami. All rights reserved. 9
  • 10. takemikamiʼs note ‒ http://takemikami.com/ 機械学習とビッグデータの位置づけ Copyright (C) Takeshi Mikami. All rights reserved. 10 機械学習とビッグデータ ビジネスシーンにおける、機械学習とビッグデータの位置づけを⽰します。 分析対象 データ分析 社会・ 業界 Data Warehouse 収集施策 収 集 DataMart 分析ツール 機械学習 加⼯ 分析・機械学習担当者 ⼈ 物 ・・・ 施策の検討や意思決定を、 機械学習で⽀援
  • 11. takemikamiʼs note ‒ http://takemikami.com/ 機械学習とビッグデータの位置づけ Copyright (C) Takeshi Mikami. All rights reserved. 11 機械学習とビッグデータ ビジネスシーンにおける、機械学習とビッグデータの位置づけを⽰します。 分析対象 データ分析 社会・ 業界 Data Warehouse 収集施策 収 集 DataMart 分析ツール 機械学習 加⼯ 分析・機械学習担当者 ⼈ 物 ・・・ IoTの普及などにより ⼤量のデータを 収集出来るようになってきた 分散ファイルシステム・分散処理によって、 ⼤量のデータを保存・処理しやすくなってきた ⼤量のデータを対象とした 機械学習への要求
  • 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. 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. 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. 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. 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. 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. takemikamiʼs note ‒ http://takemikami.com/ Spark MLlibとは • Sparkを利⽤することで、⼤規模なデータに対する機械学習を容易に利 ⽤出来る • 以下のようなツールを備える • 分類・回帰・クラスタリング・協調フィルタリングのような基本的な機械学習の アルゴリズム • 特徴量の変換・次元削減・選択のような特徴量処理 • モデル開発・評価・チューニングを効率的に⾏うためのパイプライン • アルゴリズム・モデル・パイプラインの永続化 • その他、線形代数や統計、データハンドリングのユーティリティ Copyright (C) Takeshi Mikami. All rights reserved. 18 ビッグデータの概要 Spark MLlibの紹介をします Sparkの機械学習ライブラリ 機械学習にありがちな 反復計算を⾏うアルゴリズムで Sparkは有利
  • 19. takemikamiʼs note ‒ http://takemikami.com/ データ分析のアプローチ • データ分析のアプーチは以下の3つに分類できる Copyright (C) Takeshi Mikami. All rights reserved. 19 機械学習の概要 アプローチ 説明 例 ⼿法 説明的データ分析 (descriptive) 事実を説明する・⾒ つける ・どんな⼈が何を買っているか? ・ある広告がどれだけ売上に貢献して いるか? BI、データマイニ ング 予測的データ分析 (predictive) (未来や⽋測値を)予 測する ・ある商品群を閲覧した⼈の性別は? ・広告を出稿したら、どれだけ売上が 上がるか? 分類・回帰、統計 的機械学習 指⽰的データ分析 (prescriptive) 最適解を探す ・利益を最⼤化するための、最適な仕 ⼊れ量は? ・売上を最⼤化するには、どこに広告 を出稿すべきか? 最適化、実験計画 → 実施したい「分析のアプローチ」が何かを認識し、適切な「⼿法」を適⽤する 3つのデータ分析のアプローチを紹介します
  • 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. takemikamiʼs note ‒ http://takemikami.com/ 教師あり学習の基本 Copyright (C) Takeshi Mikami. All rights reserved. 21 機械学習の概要 教師あり学習の基本的な考え⽅を説明します やりたいこと: 「xの値」が与えられた時に「yの値」を予測したい → 𝑦 = 𝑓 𝑥 という関数を求めたい 𝑦 = 𝑓(𝑥) ⽬的変数 説明変数 予測モデル⽬的変数が離散値→分類 ⽬的変数が連続値→回帰
  • 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. takemikamiʼs note ‒ http://takemikami.com/ クラスタリング(clustering)と分類(classification) Copyright (C) Takeshi Mikami. All rights reserved. 23 機械学習の概要 分類(classification) クラスタリング(clustering) 教師 教師あり 教師なし 説明 与えられたデータを 適切なクラスに振り分ける 与えられたデータを 複数のグループ分ける イメージ 既存データを元に作った予測モデルで 新規データを振り分ける データの特徴を元に 意味あるグループが無いか⾒つける A モデル B C クラスタリングと分類(教師あり学習と教師なし学習)の違いを⽰します
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. takemikamiʼs note ‒ http://takemikami.com/ 機械学習システムの開発プロセス 機械学習システムの開発プロセスフロー CRISP-DM、モデル開発の流れ モデル開発のためのツール 基礎集計と可視化、特徴量処理、予測精度 Copyright (C) Takeshi Mikami. All rights reserved. 73
  • 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. takemikamiʼs note ‒ http://takemikami.com/ ビジネス 理解 データ 理解 評価 共有・展開 データ準備 モデリング データ CRISP-DM • ビジネス理解 ビジネス上の⽬的・課題を明確化する • データ分析で何をやりたいのか? • データ分析でどのような課題を解決したいのか? • データ理解 ビジネス上の⽬的・課題を解決する為のデータを洗い出す • 必要なデータ項⽬があるか、量は⼗分か? • 記録が残っているか? (最新状態だけでなく、ログが残っているか) • データの質に問題がないか? (⼊⼒ミスがありそうか) Copyright (C) Takeshi Mikami. All rights reserved. 75 機械学習システムの開発プロセスフロー データ分析のプロセスモデル(CRISP-DM)を紹介します
  • 76. takemikamiʼs note ‒ http://takemikami.com/ CRISP-DM • データ準備 データを分析⽤に加⼯する • ⽋測値、外れ値の除外、正規化など • モデリング 機械学習の⼿法を適⽤してモデルを作成する • 学習、予測、予測結果の解釈 • 評価 モデルが、ビジネス上の⽬的を達成出来るかを評価する • 共有・展開 分析結果から試作を計画・⽴案して実施する Copyright (C) Takeshi Mikami. All rights reserved. 76 機械学習システムの開発プロセスフロー データ分析のプロセスモデル(CRISP-DM)を紹介します ビジネス 理解 データ 理解 評価 共有・展開 データ準備 モデリング データ
  • 77. takemikamiʼs note ‒ http://takemikami.com/ モデル開発の流れ Copyright (C) Takeshi Mikami. All rights reserved. 77 機械学習システムの開発プロセスフロー モデル開発の流れを紹介します スコアリング 特徴量 ⽣成 モデル 構築 (バッチ処理による) スコアリング (オンライン処理⽤) モデル更新 モデル⽣成データ準備 データ 収集 データ 抽出 本番運⽤ モデル開発 基礎集計 精度評価 ハイパー パラメータ調整 特徴量処理 業務データ の理解 可視化 以下のようなツールを⽤い、モデル構築までの処理をチューニング アルゴリズム選択 効果測定 機械学習によるモデル開発と、 施策への適⽤の流れ
  • 78. takemikamiʼs note ‒ http://takemikami.com/ 基礎集計と可視化:度数分布表とヒストグラム • 度数分布表(frequency table) データをいくつかの階級に分類し、度数を集計した表 • ヒストグラム(histogram) 度数分布表をグラフとした表したもの Copyright (C) Takeshi Mikami. All rights reserved. 78 モデル開発のためのツール 度数分布表とヒストグラムについて説明します
  • 79. takemikamiʼs note ‒ http://takemikami.com/ 基礎集計と可視化:度数分布表とヒストグラム Copyright (C) Takeshi Mikami. All rights reserved. 79 モデル開発のためのツール Pandasでのヒストグラムの出⼒⽅法を⽰します ※HDFS/Hiveに格納されたデータの ヒストグラムを描画する場合は SparkSQLでランダムサンプリングする
  • 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. 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. takemikamiʼs note ‒ http://takemikami.com/ 基礎集計と可視化:要約統計量 Copyright (C) Takeshi Mikami. All rights reserved. 82 モデル開発のためのツール Pandasでの要約統計量の出⼒⽅法を⽰します 最⼤値・最⼩値 中央値・四分位点 平均値・標準偏差
  • 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. 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. takemikamiʼs note ‒ http://takemikami.com/ 基礎集計と可視化:相関と散布図 Copyright (C) Takeshi Mikami. All rights reserved. 85 モデル開発のためのツール Pandasでの散布図の出⼒⽅法を⽰します
  • 86. takemikamiʼs note ‒ http://takemikami.com/ 特徴量処理:正規化 • データの正規化は、 異なる種類のデータを1つの尺度に揃えるために⾏います 例えば以下のような正規化⼿法があります • MinMaxScaler 最⼤値・最⼩値を揃える正規化 →データの範囲が限られているデータの場合に有効 • StandardScaler 平均を0、分散を1に揃える正規化 →外れ値があるデータの場合に、外れ値を無視出来る Copyright (C) Takeshi Mikami. All rights reserved. 86 モデル開発のためのツール データの正規化について説明します
  • 87. takemikamiʼs note ‒ http://takemikami.com/ 特徴量処理:正規化 MinMaxScalerの例 Copyright (C) Takeshi Mikami. All rights reserved. 87 モデル開発のためのツール MLlibでのMinMaxScalerを紹介します ⼊⼒データの作成 学習と変換
  • 88. takemikamiʼs note ‒ http://takemikami.com/ 特徴量処理:正規化 MinMaxScalerの例 Copyright (C) Takeshi Mikami. All rights reserved. 88 モデル開発のためのツール MLlibでのMinMaxScalerを紹介します 最⼩値0、最⼤値1に正規化
  • 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. takemikamiʼs note ‒ http://takemikami.com/ 特徴量処理:次元削減 PCAの例 Copyright (C) Takeshi Mikami. All rights reserved. 90 モデル開発のためのツール MLlibでのPCA(主成分分析)を紹介します 5次元→3次元に削減する例 ⼊⼒データの作成 学習と変換学習と変換
  • 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. 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. 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. takemikamiʼs note ‒ http://takemikami.com/ Spark MLlibを使った機械学習の紹介 Spark MLlibでの機械学習 分類と回帰、クラスタリング、協調フィルタリング Spark MLlibでの機械学習の応⽤ MLPipelines、アルゴリズムの実装 Copyright (C) Takeshi Mikami. All rights reserved. 94
  • 95. takemikamiʼs note ‒ http://takemikami.com/ 分類(classification) 決定⽊による分類の例 Copyright (C) Takeshi Mikami. All rights reserved. 95 Spark MLlibでの機械学習 MLlibでの決定⽊を紹介します ライブラリ読込 データ準備 ラベル・特徴量の index付け
  • 96. takemikamiʼs note ‒ http://takemikami.com/ 分類(classification) 決定⽊による分類の例 Copyright (C) Takeshi Mikami. All rights reserved. 96 Spark MLlibでの機械学習 MLlibでの決定⽊を紹介します 学習 予測
  • 97. takemikamiʼs note ‒ http://takemikami.com/ 分類(classification) 決定⽊による分類の例 Copyright (C) Takeshi Mikami. All rights reserved. 97 Spark MLlibでの機械学習 MLlibでの決定⽊を紹介します 評価
  • 98. takemikamiʼs note ‒ http://takemikami.com/ 回帰(regression) 線形回帰による回帰の例 Copyright (C) Takeshi Mikami. All rights reserved. 98 Spark MLlibでの機械学習 MLlibでの線形回帰を紹介します ライブラリ読込 データ準備 学習
  • 99. takemikamiʼs note ‒ http://takemikami.com/ 回帰(regression) 線形回帰による回帰の例 Copyright (C) Takeshi Mikami. All rights reserved. 99 Spark MLlibでの機械学習 MLlibでの線形回帰を紹介します 評価
  • 100. takemikamiʼs note ‒ http://takemikami.com/ クラスタリング(clustering) k-meansの例 Copyright (C) Takeshi Mikami. All rights reserved. 100 Spark MLlibでの機械学習 MLlibでのk-meansを紹介します ライブラリ読込 データ準備 学習
  • 101. takemikamiʼs note ‒ http://takemikami.com/ クラスタリング(clustering) k-meansの例 Copyright (C) Takeshi Mikami. All rights reserved. 101 Spark MLlibでの機械学習 MLlibでのk-meansを紹介します 評価
  • 102. takemikamiʼs note ‒ http://takemikami.com/ 協調フィルタリング ALSの例 Copyright (C) Takeshi Mikami. All rights reserved. 102 Spark MLlibでの機械学習 MLlibでのALSを紹介します ライブラリ読込 データ準備 学習 予測
  • 103. takemikamiʼs note ‒ http://takemikami.com/ 協調フィルタリング ALSの例 Copyright (C) Takeshi Mikami. All rights reserved. 103 Spark MLlibでの機械学習 MLlibでのALSを紹介します 評価
  • 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. 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. 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. 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. 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. 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. takemikamiʼs note ‒ http://takemikami.com/ 参考⽂献リスト • 下⽥倫⼤、諸岡⼀成、今井雄太、⽯川有、⽥中裕⼀、⼩宮篤史、加嵜⻑ ⾨「詳解 Apache Spark」技術評論社 2016 • 丸⼭宏、神⾕直樹、⼭⽥敦「データサイエンティスト・ハンドブック」 近代科学社 2015 • 福島真太朗「UsefulR② データ分析プロセス」共⽴出版 2015 • 末吉正成・⾥洋平・坂巻隆治・⼩林雄⼀郎・⼤城信晃「Rではじめるビ ジネス統計分析」翔泳社 2014 • 稲垣宣⽣・⼭根芳知・吉⽥光雄「統計学⼊⾨」裳華房 1992 Copyright (C) Takeshi Mikami. All rights reserved. 110 付録 本資料作成にあたって参考にした⽂献リストです
  • 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サイトリストです