파이썬과 엘라스틱서치 DB 연동

Page content

강의 홍보

개요

  • NoSQL 데이터베이스 시스템의 하나인 Elasticsearch 를 다루는 방법을 설명한다.
  • NoSQL 은 데이터를 행들과 열들로 저장하지 않는 데이터베이스를 말한다.
  • 대개 JSON문서 형태로 저장하고, SQL이 아닌 절의 언어를 주로 사용한다.

설치

  • 먼저 설치를 진행한다.
(venv) $ pip3 install elasticsearch
Collecting elasticsearch
  Downloading elasticsearch-7.14.1-py2.py3-none-any.whl (363 kB)
     |████████████████████████████████| 363 kB 5.7 MB/s 
Requirement already satisfied: certifi in /Users/evan/Desktop/data_engineering_python/venv/lib/python3.8/site-packages (from elasticsearch) (2021.5.30)
Requirement already satisfied: urllib3<2,>=1.21.1 in /Users/evan/Desktop/data_engineering_python/venv/lib/python3.8/site-packages (from elasticsearch) (1.26.6)
Installing collected packages: elasticsearch
Successfully installed elasticsearch-7.14.1
  • 설치 이후에는 현재 버전을 확인하기 위해 아래와 같이 .py 형태로 작성 후, 터미널에서 실행한다.
import elasticsearch
print(elasticsearch.__version__)
(venv) $ python3 step04_1_elasticsearch.py 
(7, 14, 1)
  • 버전까지 확인했다면, 파이썬에서 Elasticsearch 을 실행할 수 있다.

실습 1 - 데이터 삽입

  • 데이터를 Elasticsearch 에 삽입하는 소스코드를 생성해본다.
import elasticsearch
from elasticsearch import Elasticsearch
from faker import Faker

fake = Faker()

print(elasticsearch.__version__)
es = Elasticsearch()

# 데이터 생성 및 삽입
doc={"name": fake.name(),"street": fake.street_address(), "city": fake.city(),"zip":fake.zipcode()}
res=es.index(index="users",doc_type="doc",body=doc)
print(res['result']) # created
(venv) $ python3 step04_1_elasticsearch.py 
(7, 14, 1)
/Users/evan/Desktop/data_engineering_python/venv/lib/python3.8/site-packages/elasticsearch/connection/base.py:208: ElasticsearchWarning: Elasticsearch built-in security features are not enabled. Without authentication, your cluster could be accessible to anyone. See https://www.elastic.co/guide/en/elasticsearch/reference/7.14/security-minimal-setup.html to enable security.
  warnings.warn(message, category=ElasticsearchWarning)
/Users/evan/Desktop/data_engineering_python/venv/lib/python3.8/site-packages/elasticsearch/connection/base.py:208: ElasticsearchWarning: [types removal] Specifying types in document index requests is deprecated, use the typeless endpoints instead (/{index}/_doc/{id}, /{index}/_doc, or /{index}/_create/{id}).
  warnings.warn(message, category=ElasticsearchWarning)
created

실습 2 - 다수의 문서 삽입

  • 각 데이터 하나를 생성 후, 입력하는 방식이 아닌, 대량의 문서를 모두 만든 후, 한번엔 데이터를 추가하는 이른바 bulk 를 진행하도록 한다.
  • 우선 전체적인 코드를 추가한다 (파일명: step04_2_elasticsearch_bulk.py).
from elasticsearch import Elasticsearch
from elasticsearch import helpers
from faker import Faker

fake=Faker()
es = Elasticsearch() #or pi {127.0.0.1}

actions = [
  {
    "_index": "users",
    "_type": "doc",
    "_source": {
	"name": fake.name(),
	"street": fake.street_address(), 
	"city": fake.city(),
	"zip":fake.zipcode()}
  }
  for x in range(998) # or for i,r in df.iterrows()
]

response = helpers.bulk(es, actions)
print(response)
  • 색인 이름과 형식을 "_index""_type" 으로 지정해야 한다.
  • "_source" 필드가 NoSQL 에 추가할 JSON 문서이다.
  • 반복문은 해당 문서를 999(색인이 0부터 998까지 반복)개의 데이터를 만든다는 뜻이다.
  • 마지막으로 bulk 를 실행하면 삽입이 진행된다.
(venv) $ python3 step04_2_elasticsearch_bulk.py 
/Users/evan/Desktop/data_engineering_python/venv/lib/python3.8/site-packages/elasticsearch/connection/base.py:208: ElasticsearchWarning: Elasticsearch built-in security features are not enabled. Without authentication, your cluster could be accessible to anyone. See https://www.elastic.co/guide/en/elasticsearch/reference/7.14/security-minimal-setup.html to enable security.
  warnings.warn(message, category=ElasticsearchWarning)
/Users/evan/Desktop/data_engineering_python/venv/lib/python3.8/site-packages/elasticsearch/connection/base.py:208: ElasticsearchWarning: [types removal] Specifying types in bulk requests is deprecated.
  warnings.warn(message, category=ElasticsearchWarning)
(998, [])

실습 3 - 키바나 확인

  • 쿼리는 정상적으로 작동이 되었다. 실제 데이터가 잘 들어갔는지 확인하도록 한다. 이 때, 반드시 ElasticsearchKibana 가 먼저 구동이 되고 있어야 한다.
  • 아래 그림과 같이 왼쪽 상단 햄버거 메뉴 - 하단 Management 섹션의 Stack Management 를 클릭한다.

kibana_01.png

  • 이번에는 Index Patterns 를 선택 한다.

kibana_02.png

  • Create index pattern 버튼 화면을 클릭한다.

kibana_03.png

  • 색인 이름란에 아래와 같이 users 입력 후, Next Step 버튼을 클릭한다. 그리고 다음 화면에서 Create index Pattern 을 또 클릭한다.

kibana_04.png

kibana_05.png

  • 아래와 같이 정상적으로 색인 패턴이 나타는 것을 확인할 수 있다.

kibana_06.png

  • 그 후에, 다시 햄버거 메뉴를 클릭 후, Analytics - Discover 를 클릭 후, users 색인을 클릭하면 아래와 같이 정상적으로 데이터가 들어간 것을 확인할 수 있을 것이다.

kibana_07.png

References