주요 컨텐츠로 이동

Spark Elasticsearch (스파크 엘라스틱서치)

Databricks 무료로 시작하기

Spark Elasticsearch이란 무엇입니까?

Spark Elasticsearch는 NoSQL 분산형 데이터베이스의 일종으로 문서 중심적 반정형 데이터를 저장하고 검색하고 관리합니다. 이 데이터베이스는 Apache Lucene 기반 GitHub 오픈 소스 RESTful 검색 엔진이며 Apache License 약관에 따라 릴리스되었습니다.Elasticsearch는 Java 기반이기 때문에 여러 가지 다양한 형식으로 문서 파일을 검색 및 인덱싱할 수 있는 수많은 플랫폼에서 이용할 수 있습니다. Elasticsearch에 저장된 데이터는 NoSQL 데이터베이스와 유사하게 스키마리스(schema-less) JSON 문서 형식을 취합니다.

Spark Elasticsearch(엘라스틱서치) 프로세스

 

Elasticsearch의 역사 및 소개

Elastic Stack이라고 알려진 오픈 소스 툴로 구성된 더 큰 툴 세트의 한 구성 요소인 Elasticsearch는 원래 Google Brain Team의 엔지니어들이 설계하여 개발한 널리 사용되는 풀텍스트(full-text) 검색 엔진입니다. Elasticsearch는 Reddit부텨 Youtube 그리고 eBay까지 많은 상용 애플리케이션에서 널리 사용됩니다. 많은 기업에게 텍스트 기반 검색은 비즈니스 프로세스의 필수 요소가 되었습니다. Elasticsearch는 다른 검색 엔진과 유사합니다.

Elasticsearch와 다른 검색 엔진의 주요 차이점 중 하나는 Elasticsearch가 분산된 데이터를 저장하고 관리할 수 있다는 것입니다. 다시 말해, Elasticsearch는 끊임없이 크기가 변하는 데이터를 처리하도록 설계되었습니다. 이 덕분에 데이터 세트의 크기가 아무리 크더라도 매우 복잡한 쿼리를 수행할 수 있습니다. 그러나 하나의 데이터베이스 서버가 여러 사용자의 데이터를 처리해야 하므로 이로 인한 잠재적 영향이 상당히 증가할 수 있습니다.

Elasticsearch는 누가 사용합니까?

수천 개의 상위 기업들이 온라인 및 오프라인 데이터를 위해 Elasticsearch를 사용합니다. 그 예로는 Google, Oracle, Microsoft와 같은 빅 테크 외에도 많은 유명 기업들이 있습니다.

그러나 빅 테크만 정형 데이터를 인덱싱하는 손쉬운 방법을 사용할 수 있는 것은 아닙니다. 이러한 방법이 존재한다는 것을 알고 그 작동 원리를 이해하기만 하면 됩니다.

그런데 정확히 무엇을 위해 Elasticsearch가 사용되나요?

Elasticsearch는 다음과 같은 다양한 사용 사례에 사용됩니다.

  • 로깅 및 로그 분석:  Elasticsearch는 보완적 오픈 소스 소프트웨어 및 플랫폼으로 구성된 에코시스템 덕분에 구현과 확장이 가장 쉬운 로깅 솔루션 중 하나가 되었습니다.
  • 공개 데이터 스크레이핑 및 조합: Elasticsearch에는 여러 가지 데이터 소스를 모두 관리할 수 있고 검색할 수 있는 상태로 보관하는 데 필요한 유연성이 있습니다.
  • 풀텍스트 검색: ElasticSearch는 문서 중심적입니다. 문서를 저장하고 인덱싱한다는 뜻입니다. 인덱싱은 문서를 생성하거나 업데이트하는 작업을 말합니다. 인덱싱이 완료되면 전체 문서를 검색, 정렬, 필터링할 수 있습니다(여러 행의 열 형식 데이터가 아님).
  • 이벤트 데이터와 메트릭: Elasticsearch는 메트릭과 애플리케이션 이벤트와 같은 시계열 데이터에 적합한 것으로 알려져 있습니다. 어떤 기술을 사용하든, ElasticSearch에 일반적인 애플리케이션에서 손쉽게 데이터를 가져오는 데 필요한 구성 요소가 있을 것입니다. 그리고 드문 경우지만 필요한 구성 요소가 없다고 해도 그러한 기능을 무척 쉽게 추가할 수 있습니다.

Elasticsearch 아키텍처: 주요 구성 요소

Spark Elasticsearch의 작동 원리와 이 검색 엔진을 사용해야 하는 경우, 그리고 사용하지 않아야 하는 경우를 이해하려면, 먼저 Elasticsearch 아키텍처를 뒷받침하는 인프라를 이해해야 합니다. 그 핵심 구성 요소는 Elasticsearch 클러스터, 포트 9200 및 9300, Elasticsearch 샤드부터 Elasticsearch 복제본, 분석기 및 문서까지 다양합니다.

Elasticsearch 클러스터

Elasticsearch 클러스터는 상호 연결된 컴퓨팅 노드의 그룹입니다. 이 노드는 모두 서로 다른 클러스터 데이터 조각을 저장합니다. 사용자는 구성 폴더에서 찾을 수 있는 "elasticsearch.yml" 파일을 변경하여 각 클러스터가 실행하도록 할당된 노드 수를 조정할 수 있습니다. 원하는 만큼 많은 노드를 실행하는 것이 가능하지만, 대부분의 사용자는 일반적으로 원하는 결과를 얻기 위해 노드를 하나만 사용해도 충분하다는 것을 알게 됩니다.

Elasticsearch 노드

Elasticsearch 노드는 데이터베이스 검색, 인덱싱 및 스케일링을 위해 특별히 튜닝된 컴퓨팅 리소스입니다. Elasticsearch는 분산 데이터베이스이므로 단일 정보 출처를 사용하며 이 출처는 모든 데이터를 보관하는 Elasticsearch 데이터 노드입니다. 클러스터의 각 노드는 다른 이름을 사용합니다. 일반적으로 Elasticsearch 노드의 각 인덱스에는 약 1,000만~5,000만 개의 문서가 있습니다.

포트 9200 및 9300

Elasticsearch 샤드에서는 두 가지 유형의 포트를 사용할 수 있습니다. 이 두 샤드 포트 중 첫 번째는 항상 열려 있고, 두 번째 샤드 포트는 Elasticsearch 인덱스가 생성되고 클러스터가 초기화되는 경우에만 열립니다. 9200은 기본 샤드에 사용되는 기본 포트이고, 9300은 그 복제본에 사용되는 기본 포트입니다.

Elasticsearch 샤드

Elasticsearch 샤드는 하나의 인덱스 안에 있는 Kibana 인덱스들의 집합입니다. Elasticsearch에는 Elasticsearch 문서(doc) 및 Elasticsearch 인덱스라는 두 가지 유형의 인덱스가 있습니다. 문서는 고유한 이름이 있는 식별자와 인덱스에 의해 바인딩됩니다.

Elasticsearch 복제본

복제본은 샤드의 복사본으로, 모든 변경 사항은 보조 복제본에 반영되지만 클라이언트에게는 투명한 상태로 남아 있습니다. 기본 복제본은 새 데이터가 추가되거나 삭제, 업데이트 또는 변경되는 경우 자동으로 업데이트됩니다.

Elasticsearch 분석기

분석기는 데이터베이스에서 데이터를 가져와 분석을 수행하는 Elasticsearch 클러스터의 일부로 사용자에게 반환된 데이터의 필터링 및 정렬을 가능하게 합니다.

Elasticsearch 문서

Elasticsearch 문서는 Elasticsearch의 기본 인덱스 유형입니다. 각 문서는 데이터 세트에서 ID로서 생성되며, 문서 유형당 하나의 열이 있습니다. Elasticsearch 문서 ID의 간단한 예는 {doc id}입니다. 일반적으로 Elasticsearch 클러스터의 각 문서에는 샤드 ID, 이름, 그리고 일련의 인덱스가 있으며, 모든 필드에는 샤드 전체에 적용되는 자체 식별자가 있습니다.

Elasticsearch는 어떻게 작동하나요?

간단히 말해, Elasticsearch는 데이터를 클러스터의 모든 노드에 게시한 후 현재 저장되는 데이터의 양에 따라 데이터를 확장 및 축소합니다. Elasticsearch는 탄력적인 인덱스 컨테이너를 사용하여 하나의 데이터베이스에 모든 데이터를 저장할 수 있는 기능을 유용하게 활용합니다.

Elasticsearch는 문서 중심의 RESTful 검색 엔진이기 때문에 다양한 유용한 툴이 있으며, 대규모의 데이터 세트로 작업할 수 있습니다. Elasticsearch가 없다면 이러한 대규모 데이터 세트는 감당하기가 벅찰 것입니다. 또한 이 소프트웨어는 다른 소프트웨어와 함께 보완적 툴로 사용할 수 있습니다. 그 예로는 Elasticsearch + Spark가 있습니다.

Elasticsearch 쿼리의 예

여러분이 "Telecommunications"라는 단어를 검색한다고 가정해 보겠습니다. 다음과 같은 간단한 검색 구문을 사용하면 해결됩니다.

$"Telecommunications"

Elasticsearch는 문서를 사용하므로 문서의 목록을 검색할 수는 없습니다. "문서 유형"을 쿼리해야 합니다. 검색 기준을 충족하는 문서만 검색되도록 하기 위해 "type:Telecommunications"라는 구문을 사용하겠습니다.

이 쿼리를 수행하기 위해 문서 ID 번호를 쿼리 매개변수로 전달합니다.

$"type:telecommunications"

이를 추가로 테스트하려면 다음 명령을 실행하여 간단한 예시 문서를 만들 수도 있습니다.

create index:type:telecommunications create partition:type:telecommunications --data-urlencode /tasks --data-urlencode tasks/

Elasticsearch는 어떤 유형의 데이터베이스를 사용합니까?

Elasticsearch 툴은 Lucene 인덱싱 빌드를 견고한 분산 데이터베이스 모델과 결합하여 데이터를 샤드라고 하는 작은 구성 요소로 쪼개어 여러 노드에 분산시킬 수 있습니다.

그러면 Elasticsearch는 어디에 데이터를 저장하나요?

Elasticsearch에 저장된 데이터는 JSON 형식이나 CSV 형식입니다. 모든 인덱스에는 인덱스에 저장된 문서를 위한 자체 템플릿이 있습니다. 인덱스는 보조 복제와 통신하기 위해 메시지 버스를 사용하여 완전히 복제됩니다. 로그 파일은 Elasticsearch 인덱스로 작성됩니다.

이러한 문서는 "memcached set"이라는 데이터 구조에 일련의 키-값 쌍으로 저장됩니다. memcached set은 확장 가능한 경량 저메모리(low-memory) 데이터 구조이며, 큰 메모리 볼륨으로 데이터를 보관하고 처리할 수 있습니다.

파일이 정기적으로 디스크에 작성되면서 Elasticsearch의 스토리지는 수집, 인덱싱, 검색 작업에 최적화됩니다. 사실, 인덱스의 크기를 변경하는 유일한 방법은 마지막으로 삽입된 문서를 삭제하고 이를 새 문서로 교체하는 것입니다. 이 작업을 "데이터 마이그레이션"이라고 부릅니다. 이는 새 문서를 새 인덱스로부터 만들고, 업데이트한 다음 재삽입하는 것을 말합니다.

Elasticsearch 집계란 무엇입니까?

Elasticsearch 집계, 즉 동일한 클러스터를 여러 엔드포인트에 배정하는 것은 프로덕션 클러스터의 성능에 영향을 주지 않고 추가적인 데이터와 기능에 동일한 Elasticsearch 클러스터를 사용할 수 있게 해주는 강력한 기능입니다.클러스터를 집계할 때 각 노드에는 세 가지 워크로드 유형 중 하나가 할당됩니다. 이 세 가지 워크로드 유형은 아래와 같습니다.

  1. 비관계형
  2. 온라인 트랜잭션 처리(OLTP)
  3. 온라인 분석 처리(OLAP)

비관계형

Elasticsearc가 생성하는 모든 네트워크 요청은 Elasticsearch 클러스터에 실행되는 쿼리에 의해 생성됩니다.

Elasticsearch 노드가 유휴 상태인 경우, 백그라운드 스레드에서 쿼리를 실행하고 결과에 대해 지속적으로 보고하는 일은 운영 체제의 책임입니다. Elasticsearch 노드가 사용 중인 경우에는 (노드 장애 발생 시) 페일오버 메커니즘에 참여하거나 (노드 과부하 발생 시) 쿼리 요청을 다수의 다른 노드에게 전달하고 다른 노드 중 하나를 사용할 수 있을 때까지 기다립니다.

Elasticsearch가 생성한 네트워크 트래픽은 대부분의 경우 쿼리와 관련된 데이터이지만, Elasticsearch를 활용할 수 있는 다른 상황도 많습니다.

OLTP

여전히 Elasticsearc가 생성하는 모든 네트워크 요청은 Elasticsearch 클러스터에 실행되는 쿼리에 의해 생성됩니다.

대규모 시스템에 (좋은 시작을 위해) Elasticsearch 클러스터만 사용할 수 있지만, Elasticsearch를 관계형 데이터 소스와 결합하는 것이 바람직한 경우가 있습니다. 이런 경우, Elasticsearch는 처리를 위해 보조 관계형 데이터 소스에 대해 실행되며, 실행한 쿼리의 일부만을 추적합니다. 이 시나리오에서는 각 노드에 하나의 보조 소스만 할당되며, 나머지는 유휴 상태로 남아 있습니다.

OLAP

Elasticsearch 집계와 일반적인 집계의 주된 차이점은, 일반적인 집계는 여러 가지 목적으로 동일한 Elasticsearch 클러스터를 사용할 수 있지만 Elasticsearch 집계는 집계된 데이터를 저장하고 처리하기 위해 보조 데이터 소스를 사용한다는 것입니다. 이를 통해 Elasticsearch 집계는 SQL 또는 NoSQL 데이터 세트와 같은 기본 데이터 세트에 추가적인 쿼리를 수행하지 않고 더 많은 데이터를 저장할 수 있습니다.

Elasticsearch를 설치하고 사용하는 방법

설치는 꽤 간단합니다. Elasticsearc의 기본 리포지토리를 사용하고 Elasticsearch를 위한 기본 환경을 설정할 수 있습니다.

Elasticsearch는 구성을 위해 Kibana.yml이라는 구성 파일을 사용하며 필요에 따라 이 파일을 수정할 수 있습니다. 또한 InfluxDB, Logstash 등 더 널리 사용되는 Elasticsearch 플러그인 공급자 중 한 곳을 이용할 수도 있습니다.

Elasticsearch 설치 단계:

  1. Elasticsearch Development 버전 및 서버를 설치하고 종속 항목을 설치
  2. Java용 BOSH Extension 설치. BOSH 확장자를 사용하면 사용자와 데이터 조작 툴이 데이터에 더 쉽게 액세스하고 읽을 수 있도록 Elasticsearch용 HTML 템플릿을 작성하는 데 도움이 됩니다. BOSH 확장자에는 Java 런타임이 필요합니다. 운영 체제에서 Java용 기본 리포지토리를 사용하여 이 런타임을 설치할 수 있습니다.
  3. Elasticsearch 실행
  4. BOSH용 Java 플러그인 설치
  5. 이제 다 됐습니다. Elasticsearch가 머신에서 작동 중이고 읽기 쉬운 방법으로 모든 데이터에 액세스할 수 있습니다.

ElasticSearch 데이터 시각화

Elasticsearch를 이용하면 단순한 API 하나만 가지고 온갖 종류의 데이터를 검색하고 필터링할 수 있습니다. 이 API를 RESTful이라고 하며, 이것은 데이터 분석에만 사용할 수 있는 것이 아니라 웹 기반 애플리케이션 제작에도 사용할 수 있습니다. 현재 Elasticsearch에는 패싯 검색도 포함되는데, 이것은 집계된 형태의 데이터를 컴퓨팅하는 기능입니다. 주요 기능을 몇 가지만 소개하면 다음과 같습니다.

  • 확장할 수 있는 검색 솔루션을 제공합니다.
  • 실시간에 가깝게(near-real-time) 검색을 수행합니다.
  • 멀티 테넌시 지원을 제공합니다.
  • 백업 프로세스를 간소화하고 데이터 무결성을 보장합니다.
  • 서버가 다운되는 경우 인덱스를 복원할 수 있습니다.
  • JSON(Javascript Object Notation)과 Java API(Application Program Interface)를 사용합니다.
  • 자동으로 JSON 문서를 인덱싱합니다.
  • 인덱싱에 고유한 유형 수준 식별자를 사용합니다.
  • 인덱스마다 개별 설정이 있습니다.
  • Lucene 기반 쿼리 문자열로 검색을 수행할 수 있습니다.

SQL 대신 Elasticsearch를 사용하는 이유는 무엇입니까?

Elasticsearch 서비스는 지금까지 가장 널리 도입된 강력하고 유용한 검색 기술입니다. 대량의 데이터를 신속하게 효율적으로 처리해야 하는 경우 Elasticsearch가 대부분의 SQL 검색 기술보다 눈에 띄게 더 앞서기 때문입니다.

Elasticsearch는 엔터프라이즈 검색용으로 특별히 설계되어 데이터 분석에 의존하는 기업들에게 강력한 기능과 사용하기 쉬운 툴을 제공합니다. 그리고 리소스를 덜 사용하면서 데이터 배치를 저장, 검색, 분석할 수 있는 더 실용적이고 유연한 방법을 제공합니다.

Elasticsearch의 버전을 확인하는 방법

실행 중인 Elasticsearch의 버전을 확인하는 간단한 방법은 두 가지입니다. 첫 번째는 Elasticsearch 콘솔을 실행하여 로그인한 후 소프트웨어 버전을 확인하는 것입니다. 두 번째는 Elasticsearch의 공식 문서를 확인하는 것입니다.

Elasticsearch의 대안이 되는 시중의 주요 제품 3가지

사용할 소프트웨어를 결정하기 전에 고려할 수 있는 주요 대체 제품이 3가지 있습니다.

AWS

AWS(Amazon Web Services)는 컴퓨팅 인프라를 향상하려는 스타트업, 첨단 연구 기관 및 대기업이 가장 많이 선택하는 컴퓨팅 플랫폼이 되었습니다. 업계에서 가장 광범위한 클라우드 컴퓨팅 서비스와 함께 고객이 자체 가상 서버를 사용하고 구축하도록 지원하는 기술을 제공하는 AWS는 Microsoft Azure와 Google의 GCP 사이에서 소위 말하는 "클라우드 전쟁"을 벌이고 있습니다.

Solr

Apache Solr는 Java로 작성된 (BSD 라이선스 기반) 오픈 소스 검색 분석 엔진 데몬이며, 가장 인기 있는 오픈 소스 검색 엔진 중 하나입니다. 사실 Solr는 Twitter, Yahoo, Amazon, eBay 및 eBay Enterprise와 같은 세계 최대 규모의 전자상거래 사이트와 많ㅇㄴ 소셜 미디어 플랫폼에 검색 기능을 지원합니다.

Solr는 분산 아키텍처를 사용하여 빠른 검색을 지원하며, 검색 엔진이 엔터프라이즈가 사용하는 거의 모든 스토리지 메커니즘과 원활하게 통합될 수 있도록 고유한 통합 스토리지 API를 사용합니다.

ArangoDB

ArangoDB는 분산된 문서 중심적 NoSQL 데이터베이스로, 강력한 데이터 분석 처리 성능과 사용 편의성 때문에 인기를 얻었습니다. SQL과 유사한 언어가 ArangoDB의 키-값 저장소에서 사용되므로 사용자는 관계형 데이터베이스와 같은 방식으로 테이블을 만들고, 조인하고, 쿼리할 수 있습니다.ArangoDB는 모든 코드를 최신 상태로 유지하는 기능이 뛰어나며 지원 페이지가 잘 준비되어 있습니다. 프로젝트가 발전하고 더 많은 사람들이 참여하게 되면, 탐색하기 쉬운 최신형 지원 페이지가 될 것입니다. 물론, ArangoDB는 Python 및 Javascript와 같은 모든 주요 프로그래밍 언어와 호환됩니다.

가장 좋은 Elasticsearch 툴 3가지

데이터를 최대한 유용하게 활용하려면 다른 툴이나 소프트웨어(특히, Hevo Data, Logstash 및 Apache Nifi)와 함께 Elasticsearch를 사용할 것을 권장합니다.

Hevo Data

Hevo Data Elasticsearch는 Elasticsearch 데이터를 수집하여 쿼리로 파싱하고 이를 클러스터 노드에서 이벤트 로그로 실행하는 무료 오픈 소스 분산 검색 엔진입니다. 이 소프트웨어를 사용하면 실시간 데이터와 데이터의 백업에 대해 실시간으로 분석 쿼리를 실행할 수 있습니다.

Logstash

간단히 말해, Logstash는 Elasticsearch가 추출하자마자 들어오는 데이터를 관리하도록 돕는 규칙을 정의하기 위한 Elasticsearch 툴입니다. Logstash는 데이터를 즉각적으로 처리하므로 데이터를 최대한 유용하게 활용하는 데 완벽한 분석과 시각화 툴을 제공합니다.

Apache NiFi

Apache Nifi는 여러 데이터 소스 사이의 딥 링킹("deep linking")을 가능하게 하는 라이브러리 세트입니다. 이러한 데이터 소스로는 Facebook의 Core Location API, Twitter의 REST API 그리고 Yelp의 In-App Feature API에 이르기까지 널리 사용되는 오픈 소스 API에만 국한되지 않습니다. Apache NiFi를 사용하면 사용자는 자체 API를 연결하여 데이터 세트의 모든 정보를 다양한 다른 소프트웨어에 제공할 수 있습니다.

Elasticsearch가 여러분에게 적합할까요?

Elasticsearch의 기능부터 인프라 그리고 아키텍처에 대해 알아보았으니 이제 남은 일은 Elasticsearch가 여러분의 비즈니스에 적합한 툴인지 결정하는 것입니다.

추가 자료

용어집으로 돌아가기