2015年06月29日 ニュース

Elasticsearch 2.0.0.ベータ1、近日公開!

By Clinton Gormley

Update November 2, 2015: The real deal is here! Learn more about Elasticsearch 2.0 GA.

Lucene 5.2.1に含まれる改善点を実装した、Elasticsearch 2.0.0.ベータ1をリリースする準備が進んでいますこのリリースには、次のような特徴があります。

Pipeline Aggregation

差分や移動平均、他のAggregationの結果に対する一連の計算などのAggregationが利用可能になります。これまでこの機能はクライアントサイドでは実行可能でしたが、Elasticsearchに計算を任せることで、クライアントコードを大幅に簡略化しながら、より強力な解析クエリを作成できるようになります。これにより、予測解析や異常検知を実現する可能性が高まります。

クエリ/フィルタのマージ

フィルタはもうありません。すべてのフィルタはクエリになりました。クエリコンテキストで利用されると、効率的に関連度スコアを出し、フィルタコンテキストで利用されると、現在のフィルタと同じようにマッチしないドキュメントを除外します。この変更により、より効率的な順番で実行されるように自動的にクエリ実行が最適化されます。例えば、フレーズや地理クエリのような低速のクエリは、まず、高速な近似フェーズを実行し、その結果からより遅く正確なフェーズを行います。フィルタコンテキストでは、頻繁に利用される条件は、自動的にキャッシュされます。

保存の圧縮の設定

index.codec設定では、高速なLZ4圧縮(default)またはインデックスサイズが小さくなるDEFLATE(best_compression)が 選択できます。これにより、古いインデックスが最適化される前にbest_compressionに切り替えることができるので、特にログに有用です。

このトピックについてのブログ記事が間もなく公開される予定です。

パフォーマンスとレジリエンス

ここでは、新しいメジャーリリースに関して簡単に紹介します。2.0の変更の多くは内部の機能に関連していて、ユーザーにとっては分かりにくいものです。

この新しいメジャーバージョンのテーマは、パフォーマンス、安定性、堅牢性、予測可能性、使いやすさです。

  • 物事は予測通りに動作します。
  • 何か問題があれば、Elasticsearchが役に立つフィードバックを行います。
  • Elasticsearchが良い設定を決定する場合、低レベルの設定を変更する必要はありません。
  • そして何よりも、データは安全でなければなりません。

これらの目標は完全には達成されていません。まだまだ多くの改善点があります。しかし、2.xブランチで、 すでに500コミットを超える大きな改善が実現されています。

  • 物事は予測通りに動作します。
  • 何か問題があれば、Elasticsearchが役に立つフィードバックを行います。
  • Elasticsearchが良い設定を決定する場合、低レベルの設定を変更する必要はありません。
  • そして何よりも、データは安全でなければなりません。

これらの目標は完全には達成されていません。まだまだ多くの改善点があります。しかし、2.xブランチで、 すでに500コミットを超える大きな改善が実現されています。

  • インメモリのfielddataの代わりに、オンディスクの doc valuesをデフォルトで利用することで、ヒープ使用量を減らし、スケーラビリティを向上させました。
  • セグメントのマージ時のヒープメモリ使用量を削減。
  • ヒープ領域を多く使っていたnormsの圧縮率の改善。
  • すべてのリクエスト後にトランザクションログをfsyncすることで、デフォルトで耐久性を向上。
  • すべてのファイル変更をアトミックにして、部分的なファイルの書き出しをなくしました。
  • マージを自動で制限。
  • フレーズおよびスパンクエリを高速化。
  • より効率的なフィルタキャッシュのための圧縮ビットセット。
  • クラスタ状態の差分更新で、より軽いクラスタ状態の更新に。
  • 構造化されたJSON形式の例外。
  • より詳細なLuceneのメモリレポート。
  • 開発のノードが不本意に別のクラスタに加入するのを防ぐために、デフォルトではローカルホストのみにバインド。
  • クエリ実行最適化のためにparent/childをリライト。
  • Java Security Manager下で必要最小限なパーミッションで実行。
  • すべてのコアプラグインはメインElasticsearchレポジトリに移動されており、Elasticsearchのバージョンと同期してリリース。

アップグレード前に知っておきたいこと

メジャーバージョンのアップグレードは問題を一掃するチャンスです。可能な限り、各変更について下位互換性のある簡単なアップグレード方法を提供しています。しかし、Elasticsearch 2.0にアップグレードする前に、必要な処理が2つあります。

1つ目はフィールドとタイプマッピングに関します。mapping APIは、現在、非常に寛容です。保護機構を組み込むのではなく、ユーザーのベストプラクティスの知識に頼っていました。 2.0では、マッピングはより厳格より安全になりますが、いくつかの変更には下位互換性がありません。詳細については The Great Mapping Refactoringをご覧ください。

2つ目は、Luceneの3.xを使用したバージョンである、 Elasticsearch 0.20以前からのユーザーに影響する変更です。Elasticsearch 2.xはLucene 5をベースにしています。Lucene 5はLucene 4.xが作成いたインデックスの読み込みをサポートしていますが、Lucene 3.xに関してはサポートしていません。

Elasticsearch 0.20またはそれ以前に作成されたインデックスを使用している場合は、Elasticsearch 2.xのクラスタを起動することができません。このような古いインデックスは削除するか、Elaticsearch 1.6.0以上に含まれるupgrade APIを使用してアップグレードする必要があります。

このupgrade APIは、2つのジョブを実行します。

  • 古いLuceneフォーマットのセグメントを最新のフォーマットで書き換えます。
  • Elasticsearch 2.xにより読取り可能とインデックスにマーク付けする設定を追加します。

全セグメントを最新バージョンにアップグレードするのも良い方法ですが、 アップグレード前に必要な処理を最小限に抑えることも可能です。 Lucene 3.xのセグメントだけをアップグレードする場合は、only_ancient_segmentsパラメータを指定します。

Elasticsearch Migration Plugin

Elasticsearch 2.0 に移行する前に、インデックスをアップグレードする必要があるのか、また他に必要なアクションがあるのかのチェックを支援する、Elasticsearch Migration Pluginをリリースしました。アップグレードする前にダウンロードして、クラスタで実行してください。

まず、プラグインをインストールします。

./bin/plugin -i elastic/elasticsearch-migration
        

プラグインは、ライブクラスタにインストールできるため、ノードを再起動する必要はありません。

続いて、以下のリンクよりお使いのブラウザでプラグインを開きます。

http://localhost:9200/_plugin/migration 

(localhost:9200はインストールしたホスト名に変更してください)

Migration pluginにバグを見つかった場合や、バグを改善する提案がある場合は、GitHub issue trackerに書き込みをお願いします。