よしだのブログ

サブタイトルはありません。

勉強会メモ - 第7回elasticsearch勉強会

どうも!久しぶりのエントリーです。

今日も elasticsearch の勉強会に参加してきましたので、勉強会メモを共有します。イベントの詳細は、こちら↓からどうぞ。 大谷さん、登壇者の皆様、リクルートテクノロジーズ様、いつもありがとうございます!

http://elasticsearch.doorkeeper.jp/events/16837

Kibana4

Elasticsearch Inc. Jun Ohtani 大谷さん @johtani

機能紹介

  • データの探索、探索したデータからグラフを作成、グラフを組み合わせてダッシュボードを作成
  • より簡単に可視化できるように工夫している
  • ダウンロードしてすぐ使えるようになっている

Kibana3 とのちがい

  • Kibana3の特徴は1画面で完結している。HTML + JavaScript のみ。黒い!w
  • 違い:Rubyによるバックエンドサーバーが用意された。
    • インストールが簡単
    • セキュリティ向上 Elasticsearch が公開されている必要ない
    • ただし、Java必須 (JRuby)
  • Elasticsearch1.4.0以降
  • 検索条件、グラフが保存可能。
  • Aggregationに対応。
  • まだ可視化できる種類が少ない。

  • Discover

    • データの探索を行う画面、どんなフィールドがあるか、どんなデータかを探る。
    • 検索条件の保存と、エクスポートが可能。
  • Visualize
    • 検索結果を元にグラフを作成、グラフのタイプを選択、X軸、Y軸の選択など。。
  • Dashboard
    • 保存したグラフの配置、リサイズ
    • ダッシュボードの保存と共有。
    • グラフの各種情報の表示

マイルストーン

  • beta2 
    • グラフの種類に、エリアチャート、地図、テーブルの追加。
    • グラフオプションが増えた。積み上げから横に並べる、全体を100%として並べるなど。
  • beat3/4
    • GitHub の Issue 「roadmap」ラベルを参照
    • ハイライティング #1644
    • Multi-value/Multiple Metric Aggs #1536
    • インタラクティブフィルタリング
    • Link to a specific document.

https://github.com/elasticsearch/kibana/labels/roadmap

関連記事。

手前味噌ながら関連記事です。kibana4 をつかってグラフを作るときのコツを紹介しています。facet が全て廃止になり、aggregation のみになったので、多少頭の回転が必要になります。

Kibana4 beta1 リリースきた!ハマりどこと、グラフの作例。Aggregation でグラフを作るには、ちょっと頭の体操が必要です。 - よしだのブログ

niconicoの検索を支えるElasticsearch

株式会社ドワンゴ 伊藤 祥 さん

統合検索基盤を作った理由

  • 検索を通じて全サービスのPV、滞在時間の向上、リアルタイム検索の実現、新しい検索/レコメンド技術への対応
  • サービス米に構築されている検索インフラの一本化 (現行Solr)
    • 現時点では併用。

なぜ Elasticsearch なのか

  • 要件は以下のとおり。
    • ピークタイムの QPS で 1秒未満の応答時間、情報更新から1分以内の反映、全サービスの基盤御成り得ること
    • Scale Out
  • プロジェクト開始当時は、Solr 3 で検討していたが難しそうだった。

どう使っているのか?

  • 検索エンジン、ログ基盤、サジェスト検索の辞書生成、など
  • 検索対象はニコニコのコンテンツ
    • 動画: 1100万件
    • 生: 90万件
    • 静画: 180万件
    • など

アーキテクチャ

  • 更新系、各サービスから更新メッセージを受けるレシーバーがおり、MQに放り込む。その後、定期的にMQからフェッチしてインデックスを更新。
  • 検索:400QPS
    • 一部のサービスのみ。最大 1500QPS が目標。
  • 更新:2000万ドキュメント、360シャード
    • 更新リクエストは 5000イベント/sec

ノード/インデックス設計

  • ノードのロール訳はまだやっていない。
  • 1サービス、1インデックス、1タイプ
  • マッピングはフラット、ネストは特に使っていない。
  • エイリアスを全インデックスで利用。裏でインデックスを更新して、裏表を入れ替える方式。

イベント:CUDメッセージ

  • 追加、更新なので R はない。Read
  • 独自に json でメッセージを定義。
  • MQ は一日分ぐらいは貯められるようにしている

プラグイン

  • 内製で、独自トークナイザー&フィルター、function score の計算用ロジックを用意 (ソートが若干特殊なそう)

Elasticsearch クラスタの成長

  • 2012 〜 ver 0.19 から利用。
  • 内製 Capistrano Web wrapper
    • deploy start stop
    • UI で操作できるので、引き継ぎなどが楽。 

過去にあったトラブル

  • Split Brain
    • マスターノードが full gc で ping timeout 。他のノードがその間にマスタ化。
  • 想定外のインデックス。知らぬ間にできていた。
    • メンバーの操作ミス。auto_create_index:false などでブロック
  • 想定外のフィールド
    • フィールドは追加できるけど消せない。
    • 想定外の json が送られてきていた。
  • OutOfMemory
    • 大きめのインデックスのレプリカシャードの1つが Initializing のまま停止

質問

  • Q:ユーザー定義辞書はどのように作っているか?
  • A:辞書は使っていない。サジェストでは使っている、こっちはニコニコ大百科のデータ。
  • Q:プライマリのシャードが分散するような工夫はしているか?
  • A:特に今のところは制御していない。total_shards_per_node の指定ぐらいはしている。

Elasticsearch at CrowdWorks

株式会社クラウドワークス 九岡 佑介 さん @mumoshu

  • 検索対象 = 仕事
  • elasticsearch を入れた結果、検索結果が一桁短くなった。
  • 高可用性
    • Elasticsearchが落ちた場合は、InnoDB FTS (MySQL) で代替。
    • 一部ユーザにたけElasticsearch による検索を公開
    • 非同期でインデックス更新
    • サービス無停止でインデックス再構築
  • 検索性の重視
    • Dynamic Scripting オフ
    • ネストも使っていない。
    • インデックス更新は、部分更新
    • ActiveRecord で追跡した、更新された部分だけ更新
  • version 1.3.4、Found(ElasticsearchのPaaS)のサービスを利用している。
  • Gems
    • elasticsearch-rails
    • elasticsearch-model
    • crowdworks/gracefully
    • など
  • gracefullyの紹介。

    • 処理が失敗した時に、代替処理を呼び出す、を汎用化したライブラリ
    • Graceful Degradation
    • Elasticsearch でエラーが起きた場合、MySQL に切り替えて検索させることができる Gem
  • found について

    • ダウンタイム無しでクラスタサイズ変更ができる
    • ダウンタイム無しで Elasticsearch のアップデートも可能。
    • 最小クラスタ RAM 256MB / Disk 2GB 〜 32GB / 256GB
    • Web UI でクラスタ設定可能
    • セキュリティ、httpsとBasic認証、ACL、read、read/write用ユーザーの作成ができる。

1分で作るElasticsearchプラグイン

株式会社エヌツーエスエム 菅谷 信介 さん

Elasticsearch のプラグインとは

  • Elasticsearch の様々な機能を拡張可能。pluginコマンドでインストールできる。
  • ネイティブなプラグインとサイトプラグインの2種類がある。
  • ネイティブなプラグインは Java で作って、jar で配布する。
  • Java7 / Maven 必要。mvn コマンドでひな形の作成〜パッケージ化まで可能。
  • Maven Archetype は、1.x ごとに Archetype が変わるので作り直しが必要。
  • Rest API 用のスケルトン、サービス用のスケルトン、River用のスケルトンなどが出力されるので、これを弄る。

codelibs の紹介

https://github.com/codelibs

  • Elasticsearch River Web、ウェブサイトをクロールしインデックス、Fessと同じクローラを利用。
  • Elasticsearch Solr API、Solr のI/FでElasticsearchにアクセス可能。検索・更新に対応。Geoサーチには未対応。JavaBinフォーマットにも対応。SolrJもイケる!
  • Elasticsearch Taste、Mahout Taste をベースのリコメンド機能。利用者/商品/嗜好データ管理。情報をインデックスで管理。
  • Elasticsearch Reindexing、既存インデックスを再インデキシングする。インデックスをコピーする。
  • Elasticsearch Data Format、Excel、CSV、バルクJSON形式で検索結果を出力する。
  • Elasticsearch Script-base Search Template、スクリプトを利用したクエリテンプレート、標準の mustacheは穴埋め的なクエリーを組み立てることができるが、物足りない人向け
  • Elasticsearch Handlebars Lang、Handlebars をクエリテンプレートで利用できるように追加できる
  • Elasticsearch Velocity Lang、同上
  • Elasticsearch MinHash、ドキュメントのハッシュ(MinHash)を計算、類似文書の検索などが可能。
  • Elasticsaerch DynaRank、検索結果上位N件を並び替える。並び替えはスクリプト言語で記述できる。
  • Elasticsearch QRCache、Solr でいうところの Query Result Cache のこと。インデックスがあまり更新されないケースに有効。
  • Elasticsearch Event Hook、クラスタイベントが発生した時に指定したスクリプトを実行する。
  • Elasticsearch Auth

  • Elasticsearch Cluster Runner、Javaのコード上で Elasticsearch のクラスタを立ち上げる、ひとつの JVM に複数の Elasticsearch を起動することが可能。

まとめ

  • Solr と比較しても plugin は作りやすく導入しやすい。
  • REST プラグインから作ると分かりやすい。
  • バージョンが上がると動かなくなる。

GISとして活用するElasticsearch

船戸 隆さん

  • GIS = 地理情報を利用したシステム
  • Ingress ! IntelMap の Ajax 通信を Rubyで 偽装して、Kibana に放り込む
  • 最近厳しくなってデータは取れなくなった。

感想。

Kibana 4 は事前に触っていたので大きな驚きは、個人的にはなかったのですが、やはり Kibana 3 と比較して洗練されている印象を受けました。正式リリースが待ち遠しいですね! ドワンゴさん、クラウドワークスさんの事例もかなり踏み込んだ内容で、かなり参考になりました。ドワンゴさんの選定の時に Solr が落ちた理由を聞きたかったな〜。菅谷さんのプラグイン祭り、すごかったですね。早速いくつか使ってみようかな。

あと、Ingress は緑ですよ?みなさん。

高速スケーラブル検索エンジン ElasticSearch Server

高速スケーラブル検索エンジン ElasticSearch Server

  • 作者: Rafal Kuc,Marek Rogozinski,株式会社リクルートテクノロジーズ,大岩達也,大谷純,兼山元太,水戸祐介,守谷純之介
  • 出版社/メーカー: KADOKAWA/アスキー・メディアワークス
  • 発売日: 2014/03/21
  • メディア: 大型本
  • この商品を含むブログ (3件) を見る

サーバ/インフラエンジニア養成読本 ログ収集~可視化編 [現場主導のデータ分析環境を構築!] (Software Design plus)

サーバ/インフラエンジニア養成読本 ログ収集~可視化編 [現場主導のデータ分析環境を構築!] (Software Design plus)