More Related Content
Similar to elasticsearch-hadoopをつかってごにょごにょしてみる
Similar to elasticsearch-hadoopをつかってごにょごにょしてみる (20)
More from Katsushi Yamashita
More from Katsushi Yamashita (6)
elasticsearch-hadoopをつかってごにょごにょしてみる
- 2. おまえだれよ
• @yamakatu
• 仕事:検索方面
• 自称フルスタックイクメンエンジニア
• 開発、インフラ、機械学習、統計、検索、育児
• gihyo.jp連載「Mahoutで体感する機械学習の実践」
• 合い言葉は「読まずに、はてブだけして」
- 4. どうしよう
• 検索:Elas-csearch
• 集計、分析:Kibanaは可視化できるけど、たいした集計
はできないから、、、Hiveあたり行っとく?
• 懸念
• Elas-csearchもHadoopも別にサーバを用意しなければならな
い
- 8. What’s
elasticsearch-‐hadoop
• HadoopからElas-csearchをストレージとして利用する
• 何ができるの?
1. MapReduce
➡
Elas-csearch
にread/write
2. Hive
➡
Elas-csearch
にread/write
3. Pig
➡
Elas-csearch
にread/write
• 何が幸せ?たとえば、
• SQLが書ける程度の非エンジニアでもHiveでElas-csearchの
データでごにょごにょできる
• Elas-csearchの検索結果をMapReduceでごにょごにょしやす
い
• 既存資産(ex.
MapReduceで実装したライブラリ)の流用
• とかとか
- 10. MapReduceでread(旧API
ver.)
• Elas-csearchの接続先やクエリをconfに設定
• レスオンスのドキュメント1件で1Mapタスク(変えれ
る?)
• 追記
• 正しくは、Mapタスク数イコールPrimary
Shardの数です。
• サンプル
JobConf
conf
=
new
JobConf(Main.class);
conf.set(“es.nodes”,
“localhost:9200”);
//host:port
conf.set(“es.resource”,
“flight/2007”);
//index/type
conf.set("es.query",
"?q=*");
//query
conf.setInputFormat(EsInputFormat.class);
//input元としてES
- 11. MapReduceでwrite(旧API
ver.)
• MapReduceの出力をJsonで用意すれば、Elas-csearchに対
するjsonに
・サンプル
JobConf
conf
=
new
JobConf(Main.class);
conf.setSpecula-veExecu-on(false);
conf.set(“es.nodes”,
“localhost:9200”);
//host:port
conf.set("es.resource",
"test/user");
//index/type
conf.setOutputFormat(EsOutputFormat.class);
//output先にES
を指定
conf.set("es.input.json",
"yes");
- 12. Hive(read)
• テーブル作成
CREATE
EXTERNAL
TABLE
flight
(
month
int,
uniquecarrier
string,
…
)
STORED
BY
'org.elas-csearch.hadoop.hive.EsStorageHandler'
TBLPROPERTIES(
'es.resource'
=
'flight/2007',
'es.host'
=
’localhost',
'es.port'
=
'9200'
);
• 後はSelectするだけ
- 16. 評価
• データ
• DATA
Expo
’09から2007年のアメリカの航空客データ
• 約750万件
• Hive
• 飛行距離の平均値と標準偏差を求めてみる
- 17. 評価
• 比較対象
1. 普通にHadoopを利用
• tasktracker(datanode同居)
x3
2. Hadoop
と
Elas-csearch
を別ノードで構築
• tasktracker
x3,
Elas-csearch
x3
• シャード6つ、レプリカ2つずつ
3. Hadoop
と
Elas-csearch
を同一ノードで構築
• (tasktracker
+
Elas-csearch)
x3
• シャード6つ、レプリカ2つずつ
• スペック
• すべてEC2
m3.xlarge
• 4vCPU,
13ECU,
RAM
15GB
• Elas-csearch
• op-mize済み
• ウォームアップ済み
- 18. 結果
1. 普通にHadoopを利用
• tasktracker(datanode同居)
x3
• 約60ms
2. HadoopとElas-csearch
を別ノードで構築
• tasktracker
x3,
Elas-csearch
x3
• 約600ms
3. HadoopとElas-csearch
を同一ノードで構築
• (tasktracker
+
Elas-csearch)
x3
• 約520ms
• 遅い、、、なんか見落としがあるのかもしれん(キリ
- 21. 追記
• 評価で利用したHiveクエリ
• select
avg(distance),
stddev(distance)
from
flight
• 評価は各3回計測。ほぼ同じ。
• elas-csearch-‐hadoopを利用するために、elas-csearch-‐
hadoop.jarをパスに通す必要があります
• MapReduce
• hqp://www.elas-csearch.org/guide/en/elas-csearch/hadoop/
current/mapreduce.html#_installa-on
• Hive
• hqp://www.elas-csearch.org/guide/en/elas-csearch/hadoop/
current/hive.html#_installa-on_3