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

11,888 views

Published on

Published in: Technology, Education

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

  1. 1. elasticsearch-­‐hadoopを 使ってごにょごにょ してみる @yamakatu   第4回 Elas-csearch勉強会   2014/4/21    
  2. 2. おまえだれよ •  @yamakatu   •  仕事:検索方面   •  自称フルスタックイクメンエンジニア   •  開発、インフラ、機械学習、統計、検索、育児   •  gihyo.jp連載「Mahoutで体感する機械学習の実践」   •  合い言葉は「読まずに、はてブだけして」  
  3. 3. シナリオ:ある日の偉い人 うちのECサイトの検索どうに かして。   あ、ついでになんかすごそう だから、ビッグデータ的な分 析とかしたい。てへぺろ  
  4. 4. どうしよう •  検索:Elas-csearch   •  集計、分析:Kibanaは可視化できるけど、たいした集計 はできないから、、、Hiveあたり行っとく?   •  懸念   •  Elas-csearchもHadoopも別にサーバを用意しなければならな い  
  5. 5. インフラエンジニア(白目
  6. 6. 予算は?
  7. 7. じゃあ、どうする?アイフルー •  Elas-csearchとHadoopそれぞれにデータ置く必要ないん じゃね?   •  できるのか、、、俺たちにそんなことが、、、       •  そう、elas-csearch-­‐hadoopならね!!!
  8. 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で実装したライブラリ)の流用   •  とかとか  
  9. 9. でも使うの大変なんでしょ う?
  10. 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. 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. 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するだけ  
  13. 13. Hive(write) •  テーブル作成   •  (ry   •  insertするだけ
  14. 14. Pig
  15. 15. でも、おそいんでしょう?
  16. 16. 評価 •  データ   •  DATA  Expo  ’09から2007年のアメリカの航空客データ   •  約750万件   •  Hive   •  飛行距離の平均値と標準偏差を求めてみる    
  17. 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. 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   •  遅い、、、なんか見落としがあるのかもしれん(キリ  
  19. 19. まとめ •  elas-csearch-­‐hadoopを使うとHadoopのストレージとして Elas-csearchが使える   •  便利   •  簡単に使える   •  だたし速くはない   •  ただし本当は、やれば出来る子なのかもしれない  
  20. 20. ご静聴ありがとうございまし た
  21. 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  

×