-
Notifications
You must be signed in to change notification settings - Fork 0
DNET_Elasticsearch
ビッグデータの可視化のプロダクト
- スケーラブル、スキーマレス、マルチテナント
- ドキュメントに対し高度な超高速全文検索が可能
データ駆動型システム
- 未来予測
- 意思決定
- 企画立案
-
エンジン
-
ドキュメントを保存・検索
-
超高速全文検索に特化
- 1000万ドキュメント位まで1台で対応可能
- それ以上は、Hadoopで処理を行う。
-
Elasticsearchは、
-
単体で分散処理も可能。
-
ES-Hadoopで、
- HadoopデータをElastic Stackにインデックスし、
- Elasticsearchエンジンで高速処理することも可能。
∴ NoSQLとしてみた場合、ドキュメント指向+分散処理系に近い(NoSQLの該当節を参照)。
-
推奨のスタックみたいなもの
(Elasticsearch、Kibana、Logstash、Beats)。
JavaScript製の対話的な可視化ツール
汎用的な ETL(EAI/ETLの該当節を参照)ツール
-
Goで開発された
軽量データ収集ツール -
ECS準拠
- 自動構文解析機能付き
- 自動データマッピング(Elasticsearch)
- 自動Dashboard生成(Kibana)
| RDB | Elasticsearch |
|---|---|
| Databases | Indices |
| Tables | Types |
| Rows | Documents |
| Columns | Fields |
- Nodes, Shards, Replica
- Indicesレベルで分けるのか、Typesで分けるのか、
検討する必要がある。
-
Nodes
-
クラスタを構成する
-
下記のShardsが分散して配置される。
-
Nodeの種類
-
Master node (Master eligible node)
・クラスタ情報を管理(Nodeの参加・離脱の管理、メタデータの更新、Shardsの割当)
・クラスタに1つのみ、 Master eligible node から動的に選出 -
Data node
・document がindex されているshards を保持
・CRUD、検索、aggregation のようなデータ操作を実行
・デフォルトではすべての node が、Data node -
Ingest node
・インデックス前にドキュメントに前処理 パイプライン定義 を実行
・デフォルトではすべての node が、Ingest node -
Coordinating node (Coordinating only node)
・リクエストのルーティング、検索・集計処理の取り纏め
・Coordinating node と Kibana node の同居を推奨
・すべての node が、Coordinating node(無効にできない) -
Machine learning node
・有償オプション
・機械学習 -
Transform node
・有償オプション
・インデックスを変換するノード -
Remote_Cluster_Client
・他のクラスタへの単方向接続
・デフォルトでは有効のため、外部接続を制限する場合は無効に設定
-
-
-
Shards
クラスタ内で分散配置できるようにインデックスを分割した単位- Indexが論理的な概念とすると、Shard は物理的な概念
- ≒ Luceneの1インスタンス
- Node を増やせば Shard が自動で再配置(スケールアウト)される
-
Primary Shard
- 書き込み可能
- 数は Index 作成時に固定
- Replica Shard と同じ Node には配置されない。
-
Replica Shard
- 読み取り専用
- 数はいつでも変更できる。
- Primary Shard と同じ Node には配置されない。
-
参考
- Elasticsearchクラスタで必要なシャード数、ノード数を計算する - CLOVER🍀
https://kazuhira-r.hatenablog.com/entry/2020/01/02/182732
- Elasticsearchクラスタで必要なシャード数、ノード数を計算する - CLOVER🍀
-
データ量や更新頻度に対する考慮
-
運用要件
- 複数の Index に同じ名前の Alias をつけることができる。
- 事前に新しい Index を作成し、公開したいタイミングでその情報を検索結果に反映できる。
-
多言語対応
- Index レベルで分ける。
- Type レベルで分ける。
- Document の属性に lang を用意する。
-
データ・スキーマが異なるだけの場合
- Index レベルで分ける。
- Type レベルで分ける。
-
Tribe Node で重複しない名称付与
※ v6 以降では、Type指定が非推奨に。タイプ名の代わりに「_doc」を指定。
JSON形式のデータ
JSON形式のデータ中のキー
-
indexまで指定
GET|POST /{index}/_search -
typeまで指定
GET|POST /{index}/{type}/_search -
バリエーション
- index, typeは、[,]区切りで列挙可能。
- [*]をワイルドカードで使用可能。
- index, typeに、_allを指定可能。
-
Alias
index名には Alias を使用可能。 -
ページング
- size: 1度に検索結果を取得する数
- from: スキップする検索結果数
-
Mapping
全文検索のindex生成- どのフィールドが文字列、数値、日付、geolocationか?
- 文字列フィールド:全文検索の対象か?
- 日付フィールド:日付の形式は?
- _all フィールドをインデックス化するかどうか?
- 動的に追加されるフィールドのマッピング
- どのフィールドが文字列、数値、日付、geolocationか?
-
Analysis
言語処理や正規化などフィールドの値の加工について -
Query DSL
JSON フォーマットによる検索条件の組み立て
ドキュメント登録にはXML、JSONなどを使用
正確かつ効率的な検索アルゴリズム
-
クエリ
- 多数のクエリタイプ
- クエリ式の構文解析、誤字補完機能
- カスタムソート、フィルタリング
-
スコアリング、ランキング
-
検索結果のハイライト機能
-
RESTライクAPI
-
文書の索引付けと検索
- 転置索引方式の採用
- 形態素解析とN-gram(言語処理)による単語切出
-
参考
- Apache Lucene入門 - RONDHUIT
https://www.rondhuit.com/lucene-for-bea-060710.pdf
- Apache Lucene入門 - RONDHUIT
1時間に150GB以上のインデックススループット/ランク付け処理
ECS : Elastic Common Schema
-
Elasticsearchにデータ投入するための新しい仕様基準
- 共通フィールドセットとネーミングのガイドラインを定義
- データを一貫した方法で構造化し、カスタマイズにも対応する。
-
以下の様々なケースでECSが生産性と性能をエンハンスする。
- ユーザがデータを検索するケース
- Kibanaでデータを調査するケース
- 機械学習ジョブを構成するケース
- アラート機能を設定するケース
-
効率的なPDCAのカギはストリーミングデータの可視化!|株式会社オロ
https://www.oro.com/ja/technology/005/ -
楽しい可視化 : elasticsearchとSpark Streamingの出会い | NTTデータ先端技術株式会社
http://www.intellilink.co.jp/article/column/bigdata-kk02.html
-
Elasticsearch
https://ja.wikipedia.org/wiki/Elasticsearch -
Apache Lucene
https://ja.wikipedia.org/wiki/Apache_Lucene
-
Elasticsearch | 分散型RESTful検索/分析エンジン
https://www.elastic.co/jp/products/elasticsearch -
Elasticsearch for Hadoop
https://www.elastic.co/jp/what-is/elasticsearch-hadoop -
オープンソースのElastic Stack
(Elasticsearch、Kibana、Beats、Logstash)
でリアルタイムな検索と分析
https://www.elastic.co/jp/
-
はじめての Elasticsearch
https://qiita.com/nskydiving/items/1c2dc4e0b9c98d164329 -
3分で分かった気になる、Elasticsearchとは?
https://qiita.com/r548/items/3622048a622d9c0acc05 -
Elasticsearch 超入門
https://qiita.com/kws9/items/7695262be0befb94897f -
Kibanaで簡単! サクサク ビジュアライズしよう!
https://qiita.com/kitfactory/items/9c2f990d87e33fab828a -
データベースとしてのElasticsearch
https://qiita.com/rjkuro/items/95f71ad522226dc381c8
- Elastic Stackについて
https://qiita.com/gitya107/items/1dc7cb98a5d7d583a684
- Elasticsearch入門 | シリーズ
https://dev.classmethod.jp/series/enter-elasticsearch/- 第1回 インデックスを設計する際に知っておくべき事
https://dev.classmethod.jp/server-side/elasticsearch-getting-started-01/ - 第2回 データスキーマ設計のいろは
https://dev.classmethod.jp/server-side/elasticsearch-getting-started-02/ - 第3回 ドキュメント管理は意外と高度なことができる
https://dev.classmethod.jp/server-side/elasticsearch-getting-started-03/ - 第4回 検索の基本中の基本
https://dev.classmethod.jp/server-side/elasticsearch-getting-started-04/ - 第5回 Elasticsearch の使いどころ
https://dev.classmethod.jp/server-side/elasticsearch-getting-started-05/ - 第6回 基本コンセプトを理解する
https://dev.classmethod.jp/server-side/elasticsearch-getting-started-06/ - 第7回 API の使い方をハンズオンで理解する 〜前編〜
https://dev.classmethod.jp/server-side/elasticsearch-getting-started-07/ - 第8回 API の使い方をハンズオンで理解する 〜後編〜
https://dev.classmethod.jp/server-side/elasticsearch-getting-started-08/
- 第1回 インデックスを設計する際に知っておくべき事
移行メモ
- 「Logsatsh」は「Logstash」の誤記のため修正した(本文・参考リンクとも)。
- 「Indices」の「親子関連のデータは別の Index にはできない Type で分けで、」は 文が繋がっておらず助詞も誤っていたため、 「親子関連のデータは別の Index にはできないため、Type で分けて、」に整えた。
- 同名の見出し(「Elasticsearch」「Elastic Stack」)がページ内で重複し、 GitHub Wiki ではアンカが衝突するため、括弧で文脈を補って一意にした。
Tags: 移行, Elasticsearch, Elastic Stack, Kibana, Logstash, Beats, Apache Lucene, 全文検索, NoSQL, ECS
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。