- 印刷する
- PDF
Elasticsearch を使用する
- 印刷する
- PDF
VPC環境で利用できます。
Elasticsearchは、非定型データを JSON構造で保存し、検索に特化したデータストレージです。REST APIを使用してクエリできます。
Elasticsearchアプリの詳細情報を確認
アプリの作成が完了すると詳細情報を確認できます。アプリの詳細情報の Statusが Stableであれば、アプリが正常に起動されたことを意味します。
アプリの詳細情報を確認する方法は、次の通りです。
- NAVERクラウドプラットフォームコンソールで Services > Big Data & Analytics > Data Forestメニューを順にクリックします。
- 左側の Data Forest > Appsメニューをクリックします。
- アプリを所有するアカウントを選択します。
- 詳細情報を確認するアプリをクリックします。
- アプリの詳細情報を確認します。
- Quick links
- AppMaster: コンテナログを確認できる URL.アプリ作成時、すべてのアプリは YARNキューに提出され、YARNは各アプリの詳細情報を確認できる Web UIを提供。
- elasticsearch.hosts: Elasticsearch REST APIアドレス(外部ネットワーク)
- shell-es-coord-0: コーディネーターノードのウェブシェル(Web shell) URL
- Supervisor-es-ingest-0: インジェストノードプロセスを管理できる Supervisor URL。このノードはデフォルト値の0個が作成されるため、別途指定しない場合はアクセス不可。
- Shell-es-master-0: マスターノードのウェブシェル URL
- Supervisor-es-coord-0: コーディネーターノードプロセスを管理できる supervisor URL
- Supervisor-es-data-0: データノードプロセスを管理できる supervisor URL
- Shell-es-data-0: データノードのウェブシェル URL
- Shell-es-ingest-0: インジェストノードのウェブシェル URL。このノードはデフォルト値の0個が作成されるため、別途指定しない場合はアクセス不可
- Supervisor-es-master-0: マスターノードプロセスを管理できる supervisor URL
- Quick links
- Connection String
- elasticsearch.hosts.inside-of-cluster: Elasticsearch REST APIアドレス(内部ネットワーク)
- コンポーネント: デフォルトに指定された値が推奨リソースです。
- es-master: esサーバでマスターの役割を果たすコンポーネント
- es-data: esサーバでデータを保存する役割を果たすコンポーネント
- es-ingest: esサーバでインジェストパイプラインの役割を果たすコンポーネント
- es-coord: esサーバでコーディネーターの役割を果たすコンポーネント
AppMaster UIにログインして各コンテナのログを確認する方法については、Quick Linksアクセスをご参照ください。
REST APIアドレスリスト
Elasticsearchの HTTP REST APIアドレスは2つあります。状況に応じて適切な APIアドレスを使用します。
- elasticsearch.hosts: Data Forest外部ネットワークから Elasticsearchにアクセスする際に使用します。
- elasticsearch.hosts.inside-of-cluster: Data Forestアプリから Elasticsearchにアクセスする際に使用します。例) Kibanaで Elasticsearchと連携時
状況 | 使用するアドレス |
---|---|
Kibanaアプリから Elasticsearchアプリにアクセスする場合 | elasticsearch.hosts.inside-of-cluster |
Devアプリで構築した開発環境から Elasticsearchアプリにアクセスする場合 | elasticsearch.hosts.inside-of-cluster |
自分のサーバで実行される Logstash | elasticsearch.hosts |
Data Forest外部のサーバで実行する curl | elasticsearch.hosts |
elasticsearch.hostsアドレスは HTTPプロキシサーバです。elasticsearch.hosts.inside-of-clusterを使用できる環境であれば、HTTPプロキシサーバを使用するより elasticsearch.hosts.inside-of-clusterを使用することをお勧めします。
Elasticsearchアプリコンテナ数の変更
コンテナ数を調整する方法は、次の通りです。
- NAVERクラウドプラットフォームコンソールで Services > Big Data & Analytics > Data Forestメニューを順にクリックします。
- 左側の Data Forest > Appsメニューをクリックします。
- アプリを所有するアカウントを選択します。
- 詳細情報を確認するアプリをクリックし、[Flex] ボタンをクリックします。
- Flexの変更画面が表示されたら、コンテナ数を修正して [修正] ボタンをクリックします。
- es-masterと es-dataコンポーネントは Flex機能をサポートしません。他のコンポーネントは自由に Flexできます。
Elasticsearchアプリ使用時の注意事項
ノード障害
Elasticsearchアプリは、1つの物理的なノードに1つのデータノードのみ起動します。そのため、replica=1の場合、1つのデータノードに障害が発生してもデータは消失しません(replica=1は、ソース1 + replica 1という意味)。 es-dataは、最低2台必要です。
- Elasticsearch 7.3のデフォルト値は shard 1個、replica 1個です。Index settings、または Index creation no longer defaults to five shardsをご参照ください。
- Elasticsearch 6.7のデフォルト値は shard 5個、replica 1個です。
Out of Memory
Elasticsearchアプリの作成時、必要なリソース(resource/memory)を指定します。指定されたメモリより多くのメモリを使用する場合、OSの OOM Killerが Elasticsearchプロセスを終了させます。supervisorで Elasticsearchプロセスを管理しているため、OOMによりプロセスが終了すると、supervisorが Elasticsearchプロセスを再実行することになりますが、OOMが発生した場合、再び OOMが発生する可能性が高いです。
このような状況が発生した場合、Elasticsearchコンテナ数を増やした後、shardを分割して個々のノードの負荷を減少させるか、コンテナのリソースを増加させる必要があります。ただし、既に実行中の Elasticsearchアプリリソースは変更できません。リソースを変更したい場合、メモリを増加させた Elasticsearchアプリを作成し直し、repository-hdfsを参考にして HDFSにバックアップしてから復旧するか、Reindex from remote機能を使用してインデックスを新しい Elasticsearchアプリに移行することができます。
Elasticsearchプロセスが OOM(Out of Memory)により終了した後、再起動されたかを確認する方法は、次の通りです。
- cerebroでノードの uptime情報を確認します。他のノードに比べて uptimeが短い場合、Elasticsearchプロセスが再起動した可能性が高いです。
- このノードの supervisord.logをご確認ください。(ログ/設定を確認する)ログに以下のような内容がある場合、OOMにより Elasticsearchプロセスが再起動された可能性が高いです。
# SIGKILLにより Elasticsearchプロセスが終了 2020-04-22 14:44:35,390 INFO exited: elasticsearch (terminated by SIGKILL; not expected) # supervisorが Elasticsearchを再実行 2020-04-22 14:44:36,395 INFO spawned: 'elasticsearch' with pid 508 2020-04-22 14:44:37,396 INFO success: elasticsearch entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
supervisorのログは Elasticsearchプロセスがで終了したことを意味しますが、SIGKILLが発生した理由は不明です。OOM Killerが SIGKILLを使用しているため、OOM Killerにより終了したものと思われます。
dmesgコマンドで OOMの発生有無を確認できます。
[magnum@ac3m8x2240.bdp ~]$ dmesg ... [13460863.662062] elasticsearch[e invoked oom-killer: gfp_mask=0x50, order=0, oom_score_adj=1000 [13460863.662066] elasticsearch[e cpuset=aceca4b30ed9b4af3b3fab0ada711021f05dfecf68ebfdcfcdaa54a0ab516842 mems_allowed=0-1 [13460863.662069] CPU: 14 PID: 27043 Comm: elasticsearch[e Not tainted 3.10.0-862.14.4.el7.x86_64 #1 [13460863.662071] Hardware name: HPE ProLiant DL380 Gen10/ProLiant DL380 Gen10, BIOS U30 09/12/2019 [13460863.662072] Call Trace: [13460863.662080] [<ffffffffb7f13754>] dump_stack+0x19/0x1b [13460863.662085] [<ffffffffb7f0e91f>] dump_header+0x90/0x229 [13460863.662091] [<ffffffffb799a7e6>] ? find_lock_task_mm+0x56/0xc0 [13460863.662096] [<ffffffffb7a0f678>] ? try_get_mem_cgroup_from_mm+0x28/0x60 [13460863.662098] [<ffffffffb799ac94>] oom_kill_process+0x254/0x3d0 [13460863.662101] [<ffffffffb7a13486>] mem_cgroup_oom_synchronize+0x546/0x570 [13460863.662103] [<ffffffffb7a12900>] ? mem_cgroup_charge_common+0xc0/0xc0 [13460863.662105] [<ffffffffb799b524>] pagefault_out_of_memory+0x14/0x90 [13460863.662108] [<ffffffffb7f0cac1>] mm_fault_error+0x6a/0x157 [13460863.662112] [<ffffffffb7f20846>] __do_page_fault+0x496/0x4f0 [13460863.662113] [<ffffffffb7f208d5>] do_page_fault+0x35/0x90 [13460863.662115] [<ffffffffb7f1c758>] page_fault+0x28/0x30 [13460863.662118] Task in /yarn/container_e62_1584425817444_92362_01_000002/aceca4b30ed9b4af3b3fab0ada711021f05dfecf68ebfdcfcdaa54a0ab516842 killed as a result of limit of /yarn/container_e62_1584425817444_92362_01_000002/aceca4b30ed9b4af3b3fab0ada711021f05dfecf68ebfdcfcdaa54a0ab516842 [13460863.662121] memory: usage 2097152kB, limit 2097152kB, failcnt 1448215 [13460863.662122] memory+swap: usage 2097152kB, limit 4194304kB, failcnt 0 [13460863.662123] kmem: usage 0kB, limit 9007199254740988kB, failcnt 0 [13460863.662124] Memory cgroup stats for /yarn/container_e62_1584425817444_92362_01_000002/aceca4b30ed9b4af3b3fab0ada711021f05dfecf68ebfdcfcdaa54a0ab516842: cache:332KB rss:2096820KB rss_huge:0KB mapped_file:320KB swap:0KB inactive_anon:546160KB active_anon:1550660KB inactive_file:8KB active_file:0KB unevictable:0KB [13460863.662138] [ pid ] uid tgid total_vm rss nr_ptes swapents oom_score_adj name [13460863.662272] [25374] 20033 25374 3151 67 12 0 0 bash [13460863.662274] [25813] 20033 25813 29910 2391 62 0 0 supervisord [13460863.662276] [25818] 20033 25818 178152 1221 20 0 0 gotty [13460863.662279] [26644] 20033 26644 3184 108 12 0 0 bash [13460863.662282] [26703] 20033 26703 954936 519887 1130 0 1000 java [13460863.662285] Memory cgroup out of memory: Kill process 27043 (elasticsearch[e) score 1993 or sacrifice child [13460863.663561] Killed process 26703 (java) total-vm:3819744kB, anon-rss:2079548kB, file-rss:0kB, shmem-rss:0kB
データ保存
Elasticsearchアプリのデータは /home1/{USER}
の下位に保存され、ユーザーがアプリを停止したり、別の問題によりアプリが終了した場合でもデータは削除されません。
以下のような特定の状況ではデータが消失する可能性があります。
停止したアプリをユーザーが削除(destroy)する場合にはデータが削除されます。停止したアプリを再起動すると、既存データが存在していたノードで起動され、データが復旧されます。ただし、過去に実行されたノードのリソースを他のジョブが占有しているか、ノードが障害により外された場合、yarn.service.placement-history.timeout.ms
(デフォルト値: 1時間)以降は既存ノードでは実行されず、別のノードで実行されます。そのため、yarn.service.placement-history.timeout.ms
で設定された時間以内に実行されなかった Elasticsearchアプリのデータは消失する恐れがあります。重要なデータは、repository-hdfsを参考にして HDFSにバックアップしてください。
サービスに直接影響する場合は、できるだけ専用のキューで Elasticsearchアプリを実行してください。共用キューは複数のユーザーが一緒に使用するため、希望する時点に必要なリソースを確保できない場合があります。