Click here to load reader
Upload
katsushi-yamashita
View
7.278
Download
3
Embed Size (px)
Citation preview
elasticsearch-‐hadoopを使ってごにょごにょしてみる @yamakatu 第4回 Elas-csearch勉強会 2014/4/21
おまえだれよ
• @yamakatu
• 仕事:検索方面
• 自称フルスタックイクメンエンジニア • 開発、インフラ、機械学習、統計、検索、育児
• gihyo.jp連載「Mahoutで体感する機械学習の実践」 • 合い言葉は「読まずに、はてブだけして」
シナリオ:ある日の偉い人
うちのECサイトの検索どうにかして。 あ、ついでになんかすごそうだから、ビッグデータ的な分析とかしたい。てへぺろ
どうしよう
• 検索:Elas-csearch • 集計、分析:Kibanaは可視化できるけど、たいした集計はできないから、、、Hiveあたり行っとく?
• 懸念 • Elas-csearchもHadoopも別にサーバを用意しなければならない
インフラエンジニア(白目
予算は?
じゃあ、どうする?アイフルー
• Elas-csearchとHadoopそれぞれにデータ置く必要ないんじゃね?
• できるのか、、、俺たちにそんなことが、、、
• そう、elas-csearch-‐hadoopならね!!!
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で実装したライブラリ)の流用 • とかとか
でも使うの大変なんでしょう?
MapReduceでread(旧API ver.) • Elas-csearchの接続先やクエリをconfに設定 • レスオンスのドキュメント1件で1Mapタスク(変えれる?)
• サンプル(ジャッバ) 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
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");
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するだけ
Hive(write) • テーブル作成 • (ry
• insertするだけ
Pig
でも、おそいんでしょう?
評価
• データ • DATA Expo ’09から2007年のアメリカの航空客データ • 約750万件
• Hive • 飛行距離の平均値と標準偏差を求めてみる
評価
• 比較対象 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済み • ウォームアップ済み
結果
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
• 遅い、、、なんか見落としがあるのかもしれん(キリ
まとめ
• elas-csearch-‐hadoopを使うとHadoopのストレージとしてElas-csearchが使える
• 便利
• 簡単に使える
• だたし速くはない
• ただし本当は、やれば出来る子なのかもしれない
ご静聴ありがとうございました