What is Elasticsearch – Bigdata basic introduction

elasticsearch basic introduction

 

 

Elasticsearch?

요즘 Elasticsearch을 많이 사용합니다.  BigData가 화제인 요즘 엘라스틱서치는  고성능의 풀텍스트 검색 및 분석 엔진으로 활용성이 높습니다.

오픈소스로 제공되며 준 실시간으로 대량의 데이터를 빠르게 저장하고 검색할 수 있습니다.

그럼 가장 기본(Basic)이 되는 핵심 요소들에 대해서 알아봅시다.

Cluster(클러스터)

클러스터는 전체 데이터를 하나 또는 그 이상의 노드의 집합에서 유지하고 있다는 것을 의미합니다.  하나의 클러스터는 다수의 로드로 구성될 수 있으며, 하나의 클러스터에 다수의 서버로 바인딩하여 운영하거나 하나의 서버에 다수의 클러스터를 운영할 수 있습니다.

실행 명령

bin/elasticsearch --cluster.name=elasticsearch

 

환경설정 파일

cluster.name: elasticsearch

 

Node(노드)

클러스터에 구성된 하나의 서버를 의미합니다. 노드는 데이터를 저장하고 클러스터 인덱싱에 참여하여 검색기능을 제공합니다. 이름으로 클러스터내 노드간에 구분할 수 있으며 같은 클러스터명을 가진 노드는 자동으로 함께 바인딩 됩니다.

실행 명령

bin/elasticsearch --node.name=node01

환경설정 파일

node.name: "node01"

 

노드는 클러스터의 상태를 관리하는 마스터 노드와 데이터 입/출력과 검색을 수행하는 데이터 노드로 구분됩니다. 아래와 같이 node01을 마스터로 지정하고 데이터 노드로 지정하지 않으면 실제 데이터는 node01에는 저장되지 않습니다.

실행 명령

bin/elasticsearch --node.master=true --node.data=true
bin/elasticsearch --node.name=node01 --node.master=true --node.data=false 
bin/elasticsearch --node.name=node02 --node.master=false --node.data=true 
bin/elasticsearch --node.name=node03 --node.master=false --node.data=true

환경설정 파일

node.master: true 
node.data: true

 

 

기존 관계형 DB를 많이 봐왔기 때문에 Elasticsearch의 용어적 차이를 설명하면 다음과 같습니다.

데이터베이스 (Database) -> 인덱스(index)

테이블(Table) -> 타입(Type)

행(Column) -> 필드(Field)

열(Row)-> 도큐먼트 (Document)

스키마(Schema) -> 매핑(Mapping)

 

인덱스(index)

인덱스는 비슷한 특성을 가진 도큐먼트의 집합으로 인덱스를 생성하여 하나의 집합으로 관리할 수 있습니다. 인텍스는 고유의 이름을 가지며 이를 통해 검색을 하거나 업데이트 및 삭제를 진행할 수 있습니다. Elasticsearch를 구성한다면 가장먼저 해야 할 작업입니다.

인덱스를 지정할 때 Shard(샤드) / Replica(리플리카)를 설정해야 합니다.

Shard(샤드): 데이터 검색 단위로 데이터를 나누어 저장하게 됩니다.  인덱스에 참여할 노드수라고 생각하셔도 됩니다. 부하분산 및 처리량 확장을 위해서 사용한다고 생각하시면 됩니다.

Replica(리플리카): 샤드의 복사본 개수를 지정합니다. 샤드로 분산되어 저장되었는데 노드에 문제가 발생하였을때

다른 노드에 복사본이 있어 고가용성용도로 사용하시면 됩니다. 다만 리플리카는 전체 노드수보다 작게 구성하여야 합니다.

실행 명령

curl -XPUT localhost:9200/graylog2_1 -d '
{ 
    "settings" : { 
        "number_of_shards" : 5, 
        "number_of_replicas" : 1 
    } 
}'

환경설정 파일

index.number_of_shards: 5 
index.number_of_replicas: 1

 

필드(Field) / 매핑(Mapping)

JSON으로 Elasticsearch는 데이터를 조회하거나 업데이트 검색 할 수 있습니다. 그때 파라미터들이 필드가 됩니다. 단 필드와 행이 다른 부분은 필드의 경우 필드 안에 다수의 필드를 가지고 있을 수 있습니다. 필드의 전체 구조가 매핑이 됩니다.

아래 에 보면 전체 매핑구조를 확인 할 수 있고 각 필드명과 타입에 대해서 알 수 있습니다.

curl localhost:9200/graylog2_1/_mapping?pretty
{
	"graylog2_1": {
		"mappings": {
			"message": {
				"dynamic_templates": [{
						"internal_fields": {
							"mapping": {
								"index": "not_analyzed",
								"doc_values": true
							},
							"match": "gl2_*"
						}
					}, {
						"store_generic": {
							"mapping": {
								"index": "not_analyzed"
							},
							"match": "*"
						}
					}
				],
				"_ttl": {
					"enabled": true
				},
				"_source": {
					"compress": true
				},
				"properties": {
					"application_name": {
						"type": "string",
						"index": "not_analyzed"
					},
					"facility": {
						"type": "string",
						"index": "not_analyzed"
					},
					"full_message": {
						"type": "string",
						"analyzer": "standard"
					},
					"gl2_remote_ip": {
						"type": "string",
						"index": "not_analyzed",
						"doc_values": true
					},
					"gl2_remote_port": {
						"type": "long",
						"doc_values": true
					},
					"gl2_source_input": {
						"type": "string",
						"index": "not_analyzed",
						"doc_values": true
					},
					"gl2_source_node": {
						"type": "string",
						"index": "not_analyzed",
						"doc_values": true
					},
					"level": {
						"type": "long"
					},
					"message": {
						"type": "string",
						"analyzer": "standard"
					},
					"process_id": {
						"type": "string",
						"index": "not_analyzed"
					},
					"source": {
						"type": "string",
						"analyzer": "analyzer_keyword"
					},
					"streams": {
						"type": "string",
						"index": "not_analyzed"
					},
					"timestamp": {
						"type": "date",
						"doc_values": true,
						"format": "yyyy-MM-dd HH:mm:ss.SSS"
					}
				}
			}
		}
	}

 

도큐먼트 (Document)

하나의 저장된 테스트 기반의 데이터의미합니다.

 

REST API

Elasticsearch는 REST API 구조로 통신을 합니다.

다음과 같이 4가지 메소드를 통해 Elasticsearch를 이용할 수 있습니다.

GET -> Read(curl 옵션: -X GET, GET은 X 옵션을 사용하지 않으면 GET으로 동작)

PUT -> Update(curl 옵션: -X PUT)

POST -> Create(curl 옵션: -X POST)

DELETE -> Delete(curl 옵션: -X DELETE)

 

curl localhost:9200/graylog2_0/message/11234422?pretty
{
  "_index" : "graylog2_0",
  "_type" : "message",
  "_id" : "8763fd30-2c7d-11e6-a91e-0050569eb67d",
  "_version" : 1,
  "found" : true,
  "_source":{"process........
}

*pretty 옵션은 시각적으로 정렬해 주는 기능을 합니다.

 

개념에 대해서는 이정도 알아보고 다음에는 설치에 대해서 함께 진행해 보겠습니다.

 

What is Elasticsearch –  Bigdata basic introduction 

Facebook Comments

Leave A Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.