20

Click here to load reader

elasticsearch-hadoopをつかってごにょごにょしてみる

Embed Size (px)

Citation preview

Page 1: elasticsearch-hadoopをつかってごにょごにょしてみる

elasticsearch-­‐hadoopを使ってごにょごにょしてみる @yamakatu  第4回 Elas-csearch勉強会  2014/4/21    

Page 2: elasticsearch-hadoopをつかってごにょごにょしてみる

おまえだれよ

•  @yamakatu  

•  仕事:検索方面  

•  自称フルスタックイクメンエンジニア  •  開発、インフラ、機械学習、統計、検索、育児  

•  gihyo.jp連載「Mahoutで体感する機械学習の実践」  •  合い言葉は「読まずに、はてブだけして」  

Page 3: elasticsearch-hadoopをつかってごにょごにょしてみる

シナリオ:ある日の偉い人

うちのECサイトの検索どうにかして。  あ、ついでになんかすごそうだから、ビッグデータ的な分析とかしたい。てへぺろ  

Page 4: elasticsearch-hadoopをつかってごにょごにょしてみる

どうしよう

•  検索:Elas-csearch  •  集計、分析:Kibanaは可視化できるけど、たいした集計はできないから、、、Hiveあたり行っとく?  

•  懸念  •  Elas-csearchもHadoopも別にサーバを用意しなければならない  

Page 5: elasticsearch-hadoopをつかってごにょごにょしてみる

インフラエンジニア(白目

Page 6: elasticsearch-hadoopをつかってごにょごにょしてみる

予算は?

Page 7: elasticsearch-hadoopをつかってごにょごにょしてみる

じゃあ、どうする?アイフルー

•  Elas-csearchとHadoopそれぞれにデータ置く必要ないんじゃね?  

•  できるのか、、、俺たちにそんなことが、、、      

•  そう、elas-csearch-­‐hadoopならね!!!

Page 8: elasticsearch-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で実装したライブラリ)の流用  •  とかとか  

Page 9: elasticsearch-hadoopをつかってごにょごにょしてみる

でも使うの大変なんでしょう?

Page 10: elasticsearch-hadoopをつかってごにょごにょしてみる

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    

Page 11: elasticsearch-hadoopをつかってごにょごにょしてみる

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");      

Page 12: elasticsearch-hadoopをつかってごにょごにょしてみる

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するだけ  

Page 13: elasticsearch-hadoopをつかってごにょごにょしてみる

Hive(write) •  テーブル作成  •  (ry  

•  insertするだけ

Page 14: elasticsearch-hadoopをつかってごにょごにょしてみる

Pig

Page 15: elasticsearch-hadoopをつかってごにょごにょしてみる

でも、おそいんでしょう?

Page 16: elasticsearch-hadoopをつかってごにょごにょしてみる

評価

•  データ  •  DATA  Expo  ’09から2007年のアメリカの航空客データ  •  約750万件  

•  Hive  •  飛行距離の平均値と標準偏差を求めてみる    

Page 17: elasticsearch-hadoopをつかってごにょごにょしてみる

評価

•  比較対象  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済み  •  ウォームアップ済み

Page 18: elasticsearch-hadoopをつかってごにょごにょしてみる

結果

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  

•  遅い、、、なんか見落としがあるのかもしれん(キリ  

Page 19: elasticsearch-hadoopをつかってごにょごにょしてみる

まとめ

•  elas-csearch-­‐hadoopを使うとHadoopのストレージとしてElas-csearchが使える  

•  便利  

•  簡単に使える  

•  だたし速くはない  

•  ただし本当は、やれば出来る子なのかもしれない  

Page 20: elasticsearch-hadoopをつかってごにょごにょしてみる

ご静聴ありがとうございました