gmo プライベート dmp で ビッグデータ解析をするために アプリクラウドで...
TRANSCRIPT
![Page 1: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/1.jpg)
GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた
![Page 2: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/2.jpg)
2
アウトライン
1. Spark とは • GMO プライベート DMP での活用イメージ
2. Spark と YARN 3. 性能評価 • チューニングポイントおよび注意点
4. まとめ
2
![Page 3: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/3.jpg)
1. Spark とは
![Page 4: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/4.jpg)
• 大規模データを高速処理するための分散処理機構 • UC Berkley の AMPLab から起業した Databricks 社が開発 – Scala / Java / Python の API がある
• 2014/12/18 に 1.2.0 リリース • 本日リリースされた CDH 5.3.0 に同梱!
4
![Page 5: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/5.jpg)
5
『インメモリなら最大 100 倍 ディスクでも最大 10 倍 Hadoop MR より速い』
http://www.cloudera.co.jp/blog/putting-spark-to-use-fast-in-memory-computing-for-your-big-data-applications.html
![Page 6: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/6.jpg)
6
反復処理のコストを抑えるため 計算結果をインメモリでキャッシュして 後続の処理で最大限活用
![Page 7: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/7.jpg)
7
HDFS read HDFS write HDFS read
HDFS read Memory write Memory read
![Page 9: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/9.jpg)
様々なサブシステムによって提供される豊富な機能
9
Spark SQL
Spark Streaming MLib GraphX
分散 SQL クエリエンジン
ストリーミング処理
機械学習 ライブラリ グラフ処理
![Page 10: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/10.jpg)
x
![Page 11: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/11.jpg)
11
• 企業が保有する『顧客データ』と『ユーザのWeb 行動データ』を集約管理するためのシステム
• GMO アドパートナーズ / GMO NIKKO 社と次世代システム研究室で協同開発
• ビッグデータ処理に Hadoop を採用 (CDH 5.2)
![Page 14: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/14.jpg)
14
• 『優良ユーザ』の特徴を分析し、類似属性を持ったユーザへのアプローチに役立てる • 『優良』か『優良ではない』ラベルでの教師あり学習 • MLib の Random Forests / Decision Trees や Linear Support Vector Machines
プライベート DMP でのSpark活用イメージ
分類器優良ユーザ
非優良ユーザ
『優良ユーザの特徴』
![Page 15: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/15.jpg)
15
• 自社サイトに訪れるユーザを類似度からいくつかの集団に分け、その特徴からアプローチを変える • 教師なし学習 • MLib の K-means
プライベート DMP でのSpark活用イメージ
不活性ユーザー層 ・年齢 : 20代 ・性別:男性 ・アクセス頻度:…
![Page 16: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/16.jpg)
2. Spark と YARN
![Page 17: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/17.jpg)
17
CDH
![Page 18: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/18.jpg)
18
Cloudera's Distribution including
Apache Hadoop
![Page 19: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/19.jpg)
http://www.cloudera.com/content/cloudera/en/products-and-services/cdh.html
19
![Page 20: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/20.jpg)
http://www.cloudera.com/content/cloudera/en/products-and-services/cdh.html
20
![Page 21: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/21.jpg)
21
YARN
![Page 22: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/22.jpg)
22
yarn/jɑːrn/ 名詞複~s/-z/ 1 U〖種類では可算〗⦅主に米⦆紡ぎ糸, より糸 ▸ spin (a) good yarn 良質の糸を紡ぐ
![Page 23: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/23.jpg)
23
YARN
• Yet Another Resource Negotiator • 分散アプリケーション開発を容易にするためのフレームワーク
• リソース要求のハンドリングやタスクのスケジューリングを行う
• 旧来の MapReduce 以外の処理を柔軟に実行できるようになった
![Page 24: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/24.jpg)
http://www.dataenthusiast.com/2014/09/hadoop-2-0-yarn-architecture/
24
![Page 25: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/25.jpg)
http://hortonworks.com/blog/apache-spark-yarn-ready-hortonworks-data-platform/
25
![Page 26: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/26.jpg)
26
YARN 上での Spark 実行モード !• YARN クラスタモード • YARN クライアントモード
![Page 27: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/27.jpg)
27
Client
YARN Container
Spark Application Master
Spark Driver
YARN Resource Manager
YARN Node ManagerYARN Node ManagerYARN Node Manager
YARN Container
Spark Executor
YARN Container
Spark Executor
Spark Task
YARN クラスタモード 本番実行などの用途
http://blog.cloudera.com/blog/2014/05/apache-spark-resource-management-and-yarn-app-models/
アプリ起動リソース確保
Executor の起動・コード送信
![Page 28: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/28.jpg)
28
Client Application
YARN Container
Spark Application
MasterSpark Driver
YARN Resource Manager
YARN Node ManagerYARN Node ManagerYARN Node Manager
YARN Container
Spark Executor
YARN Container
Spark Executor
Spark Task
http://blog.cloudera.com/blog/2014/05/apache-spark-resource-management-and-yarn-app-models/
YARN クライアントモード 開発・インタラクティブアプリケーションなどの用途
コード送信 リソース確保
Executor の起動・コード送信
![Page 29: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/29.jpg)
29
Spark 各種起動モード間の比較
http://blog.cloudera.com/blog/2014/05/apache-spark-resource-management-and-yarn-app-models/
![Page 30: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/30.jpg)
アプリケーション中の SparkContext オブジェクトによって駆動
リソース管理のための外部サービス(Standalone または YARN / Mesos) タスクという粒度で!
アプリケーションを実行
JAR ファイルなど
の
アプリケーション
コード + タスク
30
![Page 31: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/31.jpg)
31
Spark アプリケーションの動作フロー
![Page 32: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/32.jpg)
会員 ID, 性別コード, 年齢, 地域コード, 会員登録日 100000000, male, 32, osaka, 2014-04-21 19:48:18 100000001, male, 50, tokyo, 2014-06-01 09:17:40 100000002, female, 37, tokyo, 2014-07-31 07:34:48 100000003, male, 41, osaka, 2014-06-06 08:25:55 100000004, female, 63, osaka, 2014-04-18 05:01:21
val memberInfoFile = “/tmp/member_info.csv” (hdfs のファイルパス)
会員属性ファイルから性別をカウント
32
![Page 33: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/33.jpg)
val memberInfoFile = “/tmp/member_info.csv” val sc = new SparkContext()
会員属性ファイルから性別をカウント
会員 ID, 性別コード, 年齢, 地域コード, 会員登録日 100000000, male, 32, osaka, 2014-04-21 19:48:18 100000001, male, 50, tokyo, 2014-06-01 09:17:40 100000002, female, 37, tokyo, 2014-07-31 07:34:48 100000003, male, 41, osaka, 2014-06-06 08:25:55 100000004, female, 63, osaka, 2014-04-18 05:01:21
33
![Page 34: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/34.jpg)
val memberInfoFile = “/tmp/member_info.csv” val sc = new SparkContext()
会員属性ファイルから性別をカウント
34
![Page 35: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/35.jpg)
val memberInfoFile = “/tmp/member_info.csv” val sc = new SparkContext() val lines = sc.textFile(memberInfoFile)
会員属性ファイルから性別をカウント
35
![Page 36: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/36.jpg)
val memberInfoFile = “/tmp/member_info.csv” val sc = new SparkContext() val lines = sc.textFile(memberInfoFile)
会員属性ファイルから性別をカウント
会員 ID, 性別コード, 年齢, 地域コード, 会員登録日 100000000, male, 32, osaka, 2014-04-21 19:48:18 100000001, male, 50, tokyo, 2014-06-01 09:17:40 100000002, female, 37, tokyo, 2014-07-31 07:34:48 100000003, male, 41, osaka, 2014-06-06 08:25:55 100000004, female, 63, osaka, 2014-04-18 05:01:21
36
![Page 37: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/37.jpg)
val memberInfoFile = “/tmp/member_info.csv” val sc = new SparkContext() val lines = sc.textFile(memberInfoFile) val cols = lines.map(_.split(","))
会員属性ファイルから性別をカウント
{会員 ID, 性別コード, 年齢, 地域コード, 会員登録日} {100000000, male, 32, osaka, 2014-04-21 19:48:18} {100000001, male, 50, tokyo, 2014-06-01 09:17:40} {100000002, female, 37, tokyo, 2014-07-31 07:34:48} {100000003, male, 41, osaka, 2014-06-06 08:25:55} {100000004, female, 63, osaka, 2014-04-18 05:01:21}
37
![Page 38: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/38.jpg)
val memberInfoFile = “/tmp/member_info.csv” val sc = new SparkContext() val lines = sc.textFile(memberInfoFile) val cols = lines.map(_.split(",")) val genders = cols.map(row => (row(1), 1))
会員属性ファイルから性別をカウント
{row(0), row(1), row(2), row(3), row(4)} {100000000, male, 32, osaka, 2014-04-21 19:48:18} {100000001, male, 50, tokyo, 2014-06-01 09:17:40} {100000002, female, 37, tokyo, 2014-07-31 07:34:48} {100000003, male, 41, osaka, 2014-06-06 08:25:55}
38
![Page 39: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/39.jpg)
val memberInfoFile = “/tmp/member_info.csv” val sc = new SparkContext() val lines = sc.textFile(memberInfoFile) val cols = lines.map(_.split(",")) val genders = cols.map(row => (row(1), 1))
会員属性ファイルから性別をカウント
{row(0), row(1), row(2), row(3), row(4)} {100000000, male, 32, osaka, 2014-04-21 19:48:18} {100000001, male, 50, tokyo, 2014-06-01 09:17:40} {100000002, female, 37, tokyo, 2014-07-31 07:34:48} {100000003, male, 41, osaka, 2014-06-06 08:25:55}
39
![Page 40: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/40.jpg)
val memberInfoFile = “/tmp/member_info.csv” val sc = new SparkContext() val lines = sc.textFile(memberInfoFile) val cols = lines.map(_.split(",")) val genders = cols.map(row => (row(1), 1))
会員属性ファイルから性別をカウント
(row(1), 1) (male, 1) (male, 1) (female, 1) (male, 1)
40
![Page 41: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/41.jpg)
val memberInfoFile = “/tmp/member_info.csv” val sc = new SparkContext() val lines = sc.textFile(memberInfoFile) val cols = lines.map(_.split(",")) val genders = cols.map(row => (row(1), 1)) val result = genders.reduceByKey((x, y) => x + y)
会員属性ファイルから性別をカウント
(male, 1)
(female, 1)
(male, 1)(male, 1)
(male, 2)(male, 3)
(female, 1)
41
![Page 42: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/42.jpg)
val memberInfoFile = “/tmp/member_info.csv” val sc = new SparkContext() val lines = sc.textFile(memberInfoFile) val cols = lines.map(_.split(",")) val genders = cols.map(row => (row(1), 1)) val result = genders.reduceByKey((x, y) => x + y)
会員属性ファイルから性別をカウント
42
![Page 43: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/43.jpg)
val memberInfoFile = “/tmp/member_info.csv” val sc = new SparkContext() val lines = sc.textFile(memberInfoFile) val cols = lines.map(_.split(",")) val genders = cols.map(row => (row(1), 1)) val result = genders.reduceByKey((x, y) => x + y) result.collect().foreach(println) sc.stop() (各種リソースの解放)
会員属性ファイルから性別をカウント
43
![Page 44: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/44.jpg)
44
Spark アプリケーションのポイント(おさらい) !• RDD : Resilient Distributed Datasets • DAG : Directed Acyclic Graph (無閉路有向グラフ)
![Page 45: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/45.jpg)
45
RDD : Resilient Distributed Datasets ファイルの読み込み、または実行結果が一意に決まる変換でのみ生成される共有データプリミティブ Spark での処理は RDD を変更するのではなく関数によって変換し、新しい RDD を紡ぐことで記述する
![Page 46: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/46.jpg)
val sc = new SparkContext() val lines = sc.textFile(“/tmp/member_info.csv”) val cols = lines.map(_.split(",")) val genders = cols.map(row => (row(1), 1)) val result = genders.reduceByKey((x, y) => x + y) result.collect().foreach(println) sc.stop()
RDD と Transformations / Actions
Actions
TransformationsRDD
46
![Page 47: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/47.jpg)
47
DAG : Directed Acyclic Graph (有向無閉路グラフ) Spark は lineage と呼ばれる RDD の『系譜』で耐障害性を実現している(障害時は前段の処理結果から再計算) DAG は Action が発行されたときに初めて実行計画を立て、処理を開始する(遅延評価)
1
2
3
4
5
7
6
8
![Page 48: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/48.jpg)
RDD と Transformations / Actions
val sc = new SparkContext() val lines = sc.textFile(“/tmp/member_info.csv”) val cols = lines.map(_.split(",")) val genders = cols.map(row => (row(1), 1)) val result = genders.reduceByKey((x, y) => x + y) result.collect().foreach(println) sc.stop()
Actions (ここまで実際の処理は走らない)
TransformationsRDD
48
![Page 49: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/49.jpg)
Stage 1 Stage 0
map map reduceByKey
collect
http://www.slideshare.net/manishgforce/lightening-fast-big-data-analytics-using-apache-spark
val sc = new SparkContext() val lines = sc.textFile(“/tmp/member_info.csv”) val cols = lines.map(_.split(",")) val genders = cols.map(row => (row(1), 1)) val result = genders.reduceByKey((x, y) => x + y) result.collect().foreach(println)
![Page 50: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/50.jpg)
3. 性能評価
![Page 51: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/51.jpg)
事前準備
51
![Page 52: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/52.jpg)
52
YARN 側のチューニングが必要 !14/12/23 05:00:10 ERROR yarn.Client: Required executor memory (16384 MB), is above the max threshold (8192 MB) of this cluster. Exception in thread "main" java.lang.IllegalArgumentException: Required executor memory (16384 MB), is above the max threshold (8192 MB) of this cluster.
![Page 53: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/53.jpg)
53
推奨されるコンテナ数の算出 ! # of containers = min ( 2 * CORES, 1.8 * DISKS, (Total available RAM) / MIN_CONTAINER_SIZE )
http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.0.6.0/bk_installing_manually_book/content/rpm-chap1-11.html
※ 8コア CPU x 32GB メモリ x 640GB ディスク x 10 ノード
![Page 54: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/54.jpg)
推奨されるコンテナ数の算出 !!!!
54
http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.0.6.0/bk_installing_manually_book/content/rpm-chap1-11.html
※ 8コア CPU x 32GB メモリ x 640GB ディスク x 10 ノード
![Page 55: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/55.jpg)
55
推奨されるコンテナ数の算出 ! # of containers = min ( 2 * CORES, 1.8 * DISKS, (Total available RAM) / MIN_CONTAINER_SIZE )
http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.0.6.0/bk_installing_manually_book/content/rpm-chap1-11.html
※ 8コア CPU x 32GB メモリ x 640GB ディスク x 10 ノード
(32GB - 6GB予約) / 2GB = 13
2 * 8コア = 161.8 * 2枚 = 3.6
![Page 56: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/56.jpg)
56
推奨されるコンテナ毎のメモリサイズの算出 ! # RAM-per-Container = maximum of ( MIN_CONTAINER_SIZE, (Total Available RAM) / Containers) )
http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.0.6.0/bk_installing_manually_book/content/rpm-chap1-11.html
※ 8コア CPU x 32GB メモリ x 640GB ディスク x 10 ノード
2GB
(32GB - 6GB予約) / 3.6 = 7.2GB
![Page 57: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/57.jpg)
推奨されるYARN 設定 !!!!
http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.0.6.0/bk_installing_manually_book/content/rpm-chap1-11.html
57
![Page 58: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/58.jpg)
算出された YARN 設定 yarn.nodemanager.resource.memory-mb コンテナへの割り当てが可能な物理メモリ量 (26 GB) !yarn.scheduler.minimum-allocation-mb コンテナメモリ最小値 (7 GB) !yarn.scheduler.maximum-allocation-mb コンテナメモリ最大値 (26 GB)
58
![Page 59: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/59.jpg)
算出された YARN 設定 yarn.app.mapreduce.am.resource.mb ApplicationMaster の要求する物理メモリ量 (14GB) !yarn.app.mapreduce.am.command-opts MapReduce ApplicationMaster に渡される Java コマンドラインの引数 (-Xmx11468m)
59
![Page 60: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/60.jpg)
参考) 便利ツール Hortonworks 社提供、だが微妙にロジックが加わっている。 !!!
http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.0.9.1/bk_installing_manually_book/content/rpm-chap1-11.html
60
![Page 61: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/61.jpg)
[root@spark scripts]# python yarn-utils.py -c 8 -m 32 -d 1 -k False Using cores=8 memory=32GB disks=1 hbase=False Profile: cores=8 memory=31744MB reserved=1GB usableMem=31GB disks=1 Num Container=3 Container Ram=10240MB Used Ram=30GB Unused Ram=1GB yarn.scheduler.minimum-allocation-mb=10240 yarn.scheduler.maximum-allocation-mb=30720 yarn.nodemanager.resource.memory-mb=30720 mapreduce.map.memory.mb=10240 mapreduce.map.java.opts=-Xmx8192m mapreduce.reduce.memory.mb=10240 mapreduce.reduce.java.opts=-Xmx8192m yarn.app.mapreduce.am.resource.mb=10240 yarn.app.mapreduce.am.command-opts=-Xmx8192m mapreduce.task.io.sort.mb=4096
61
![Page 62: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/62.jpg)
評価環境・方法
62
![Page 63: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/63.jpg)
63
評価環境• サバろうぜ!でお借りしているアプリクラウド • 8 vCPU / 16GB Memory / 640GB HDD x 10台 • Master node その他
• 8 vCPU / 32GB Memory / 640GB HDD x 10台 • HDFS Datanode + Hive Gateway + Impala Daemon + YARN NodeManager
• CDH 5.2.1 • Spark 1.1.0 on YARN • HDFS, Hive, Hue, Impala, Oozie, YARN
![Page 64: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/64.jpg)
64
パラメータ指定 spark.eventLog.enabled=true spark.eventLog.dir=hdfs:///user/spark/applicationHistory !アプリケーション中で最後に実行 SparkContext.stop() !※ これらを設定しないとアプリケーション実行中しか見られない (YARN の Resource Manager UI からしか確認できない)
測定方法 : Spark UI
![Page 65: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/65.jpg)
![Page 66: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/66.jpg)
66
テストアプリ・データ
• 簡略化した『購買履歴』のダミーデータを用意 • 1億レコード (4.7 GB)
• 『全ての商品について購入された回数』を計算するアプリを各種パラメータを変更しながら実行
![Page 67: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/67.jpg)
会員 ID、 購買日時、 商品単価、 支払い総額、 購入数、 商品 ID
67
![Page 68: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/68.jpg)
68
実行方法
spark-submit --class PurchaseCount // 実行するクラス名 --name "${mem}G-${core}Core-${exec}Executers" // 名前 --master yarn-client // yarn-client モード --executor-memory ${mem}G // 1 executor あたりのメモリ --executor-cores ${core} // 1 executor あたりのコア --num-executors ${exec} // 実行する executor 数 --conf spark.eventLog.enabled=true // Spark UI 描画用 --conf spark.eventLog.dir=hdfs:///user/spark/applicationHistory purchase_count_2.10-1.0.jar // jar ファイル !※ mem, core, exec の値を変化させて実行
![Page 69: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/69.jpg)
評価結果
69
![Page 70: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/70.jpg)
0
35
70
105
140
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
collect (sec) map (sec) other (sec)
1CPU x n GB メモリ x 1 executor
有効化したメモリサイズ (GB)
実行時間 (sec)
70
![Page 71: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/71.jpg)
n CPU x 1 GB メモリ x 1 executor
有効化したコア数 (個)
実行時間 (sec)
0
35
70
105
140
1 2 3 4 5 6 7 8
collect (sec) map (sec) other (sec)
71
![Page 72: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/72.jpg)
1CPU x 1 GB メモリ x n executor
有効化した executor 数 (個)
実行時間 (sec)
0
30
60
90
120
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
collect (sec) map (sec) other (sec)
NodeManager 数 = 10
72
![Page 73: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/73.jpg)
コア数とExecutor数の関連性比較
設定詳細
実行時間 (sec)
0
12.5
25
37.5
50
1CPU 1GB RAM 8 Executors
2CPU 1GB RAM 4 Executors
4CPU 2GB RAM 2 Executors
8CPU 1GB RAM 1 Executors
collect (sec) map (sec) other (sec)
73
![Page 74: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/74.jpg)
成績上位の設定
設定詳細
実行時間 (sec)
0
35
70
105
140
1CPU 1GB RAM 1 Executor
8CPU 1GB RAM 10 Executors
8CPU 1GB RAM 7 Executors
7CPU 1GB RAM 8 Executors
7CPU 1GB RAM 7 Executors
6CPU 1GB RAM 7 Executors
5CPU 1GB RAM 8 Executors
Impala
collect (sec) map (sec) other (sec)
74
![Page 75: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/75.jpg)
75
• 128.0 MB Input x 38 タスクに分割されたため Executor に 1GB 以上のメモリを振っても効果がなかった
• コア数の増加は GC にかかる時間を減少させたが、5コア以上では顕著な効果は見られなかった – Databricks のドキュメントが参考になりそう
• map/collect 以外にかかる時間については要調査
![Page 76: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/76.jpg)
追加評価 !
• ここからは CDH 5.3 x Spark 1.2.0 • 5千万レコード(約2.4GB)から20億レコード(約94.8 GB)までデータを増やして map、collect、及びトータルでの処理時間の変化を測定(executor 数も可変とした)
76
![Page 77: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/77.jpg)
メモリ1G / 8CPU / 5 Executors
77
実行時間 (sec)
0
45
90
135
180
データサイズ (GB)0 20 40 60 80 100
Total duration Collect Map Other
![Page 78: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/78.jpg)
メモリ1G / 8CPU / 6 Executors
78
実行時間 (sec)
0
45
90
135
180
データサイズ (GB)0 20 40 60 80 100
Total duration Collect Map Other
![Page 79: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/79.jpg)
メモリ1G / 8CPU / 6 Executors
79
実行時間 (sec)
0
27.5
55
82.5
110
データサイズ (GB)0 20 40 60 80 100
Total duration Collect Map Other※後続のグラフと比較しやすいようにスケールを変えたもの
![Page 80: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/80.jpg)
メモリ1G / 8CPU / 7 Executors
80
実行時間 (sec)
0
27.5
55
82.5
110
データサイズ (GB)0 20 40 60 80 100
Total duration Collect Map Other
![Page 81: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/81.jpg)
メモリ1G / 8CPU / 8 Executors
81
実行時間 (sec)
0
27.5
55
82.5
110
データサイズ (GB)0 20 40 60 80 100
Total duration Collect Map Other
![Page 82: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/82.jpg)
82
実行時間 (sec)
0
27.5
55
82.5
110
データサイズ (GB)0 20 40 60 80 100
Total duration Collect Map Other
メモリ1G / 8CPU / 9 Executors
![Page 83: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/83.jpg)
83
実行時間 (sec)
0
27.5
55
82.5
110
データサイズ (GB)0 20 40 60 80 100
Total duration Collect Map Other
メモリ1G / 8CPU / 10 Executors
![Page 84: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/84.jpg)
84
• データ量に対して処理時間はおおよそ線形に変化しているように見える
• Map フェーズの増分が効いており、GC などにかかる時間はデータサイズに対してほぼ一定(executor 数が増加した場合、減少に転じる傾向も見られる)
![Page 85: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/85.jpg)
4. まとめ
![Page 86: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/86.jpg)
86
今回の研究
• Apache Spark を GMO プライベート DMP で活用するに当たって、サンプルアプリを開発してプレ検証を行った。 • Spark/YARN アーキテクチャの理解を深めた • アプリケーション開発の仕方を学んだ • 各種パラメータ設定の及ぼす影響を調べた
![Page 87: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/87.jpg)
87
今後のトピック
• プライベート DMP での解析機能の検証・実装 • 実データを MLib で解析
• 内部アーキテクチャの深堀り • キャッシュ・シリアライザ
• その他の機能の調査 • Spark SQL / Spark Streaming / GlaphX
![Page 88: GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた](https://reader033.vdocuments.net/reader033/viewer/2022051400/55a5df631a28ab88558b47a8/html5/thumbnails/88.jpg)
いつもアプリクラウドを使わせていただきまして !
アプリクラウド事業部の皆様 サバろうぜ!支援制度運営の皆様
※サバろうぜ!に関してはこちら
!
誠にありがとうございます!