개요
Eland는 Elasticsearch와 연동하여 데이터 분석 및 머신러닝을 수행할 수 있는 Python 라이브러리다. Elastic 공식 프로젝트로, Pandas와 유사한 DataFrame API를 제공하여 Elasticsearch 인덱스를 친숙한 방식으로 다룰 수 있게 한다.
Eland의 핵심 장점은 데이터 처리를 로컬 메모리가 아닌 Elasticsearch에서 수행한다는 점이다. 이를 통해 대용량 데이터를 메모리 제약 없이 처리할 수 있으며, scikit-learn, XGBoost, PyTorch 등으로 학습한 모델을 Elasticsearch에 배포할 수 있다.
주요 기능
1. DataFrame API
Elasticsearch 인덱스를 Pandas DataFrame처럼 다룰 수 있는 API를 제공한다. 데이터는 Elasticsearch에 저장되며, 모든 연산은 Elasticsearch에서 실행된다.
주요 특징:
- Pandas API와 유사한 인터페이스
- 필터링, 그룹화, 집계 연산 지원
- 로컬 메모리 제약 없이 대용량 데이터 처리
- Elasticsearch 쿼리를 자동 생성
2. 머신러닝 모델 배포
다양한 머신러닝 프레임워크에서 학습한 모델을 Elasticsearch에 배포할 수 있다.
지원 프레임워크:
- scikit-learn: 회귀, 분류 모델
- XGBoost: 그래디언트 부스팅 모델
- LightGBM: 경량 그래디언트 부스팅
- PyTorch: BERT 등 트랜스포머 기반 NLP 모델
3. Hugging Face 모델 통합
eland_import_hub_model
스크립트를 통해 Hugging Face Model Hub의 사전 학습된 트랜스포머 모델을 Elasticsearch에 직접 가져올 수 있다.
지원 NLP 과제:
- Named Entity Recognition (NER) - 개체명 인식
- Text Classification - 텍스트 분류
- Text Embedding - 텍스트 임베딩
- Question Answering - 질의응답
- Fill Mask - 마스크 언어 모델링
- Text Similarity - 텍스트 유사도
- Zero-shot Classification - 제로샷 분류
- Text Expansion - 텍스트 확장 (ELSER 등)
설치
# 기본 설치
pip install eland
# Elasticsearch 8.x용
pip install "eland>=8,<9"
# Elasticsearch 7.x용
pip install "eland>=7,<8"
요구사항:
- Python 3.9, 3.10, 3.11, 3.12
- Pandas 1.5 또는 2.0
- Elasticsearch 8+ (권장: 8.16 이상)
사용 예시
DataFrame으로 데이터 조회
import eland as ed
from elasticsearch import Elasticsearch
# Elasticsearch 연결
es = Elasticsearch(
"http://localhost:9200",
basic_auth=("elastic", "password")
)
# Eland DataFrame 생성
df = ed.DataFrame(es, es_index_pattern="flights")
# 데이터 필터링 및 집계
filtered = df[df.Carrier != "Kibana Airlines"]
result = filtered.groupby("Carrier").mean()
print(result.head())
Pandas DataFrame을 Elasticsearch로 전송
import pandas as pd
import eland as ed
# Pandas DataFrame 생성
pd_df = pd.DataFrame({
"name": ["Alice", "Bob", "Charlie"],
"age": [25, 30, 35],
"city": ["Seoul", "Busan", "Incheon"]
})
# Elasticsearch 인덱스로 저장
ed.pandas_to_eland(
pd_df,
"http://localhost:9200",
"users",
es_if_exists="replace",
es_refresh=True
)
Elasticsearch에서 Pandas로 변환
import eland as ed
# Eland DataFrame 생성
ed_df = ed.DataFrame("http://localhost:9200", es_index_pattern="users")
# Pandas DataFrame으로 변환
pd_df = ed.eland_to_pandas(ed_df)
# CSV로 저장
pd_df.to_csv("output.csv", index=False)
Hugging Face 모델 가져오기
# 명령줄에서 모델 가져오기
eland_import_hub_model \
--url http://localhost:9200 \
--hub-model-id elastic/distilbert-base-cased-finetuned-conll03-english \
--task-type ner \
--start
# 인증이 필요한 경우
eland_import_hub_model \
--url https://elastic:password@hostname:9200 \
--hub-model-id sentence-transformers/msmarco-MiniLM-L-12-v3 \
--task-type text_embedding \
--start
# Docker로 실행
docker run -it --rm docker.elastic.co/eland/eland \
eland_import_hub_model \
--url $ELASTICSEARCH_URL \
--hub-model-id elastic/distilbert-base-uncased-finetuned-conll03-english \
--start
오프라인 환경에서 모델 가져오기
네트워크가 제한된 환경에서는 모델을 로컬로 먼저 다운로드한 후 가져올 수 있다.
# 1. 로컬에 모델 복제 (Git LFS 필요)
git lfs install
git clone https://huggingface.co/elastic/distilbert-base-cased-finetuned-conll03-english
# 2. 로컬 모델을 Elasticsearch에 가져오기
eland_import_hub_model \
--url http://localhost:9200 \
--hub-model-id ./distilbert-base-cased-finetuned-conll03-english \
--task-type ner \
--start
주요 활용 사례
1. 대용량 데이터 분석
로컬 메모리 제약 없이 Elasticsearch에 저장된 대용량 데이터를 Pandas와 유사한 방식으로 분석할 수 있다.
적용 분야:
- 로그 분석
- 시계열 데이터 분석
- 비즈니스 인텔리전스
- 사용자 행동 분석
2. 시맨틱 검색
Hugging Face의 문장 임베딩 모델(Sentence Transformers)을 Elasticsearch에 배포하여 의미 기반 검색을 구현할 수 있다.
예시:
eland_import_hub_model \
--url http://localhost:9200 \
--hub-model-id sentence-transformers/all-MiniLM-L6-v2 \
--task-type text_embedding \
--start
3. 개체명 인식 (NER)
사전 학습된 NER 모델을 배포하여 텍스트에서 인명, 지명, 기관명 등을 자동으로 추출할 수 있다.
활용:
- 문서 자동 태깅
- 정보 추출
- 콘텐츠 분류
4. 텍스트 분류
감성 분석, 주제 분류 등의 텍스트 분류 모델을 Elasticsearch에 배포하여 실시간 분류 작업을 수행할 수 있다.
활용:
- 고객 리뷰 감성 분석
- 스팸 필터링
- 뉴스 카테고리 분류
5. ETL 파이프라인
Pandas DataFrame과 Elasticsearch 간의 변환을 통해 데이터 ETL(Extract, Transform, Load) 파이프라인을 구축할 수 있다.
장점
- 친숙한 API: Pandas 경험이 있다면 쉽게 사용 가능
- 확장성: 로컬 메모리 제약 없이 대용량 데이터 처리
- 성능: 데이터 처리를 Elasticsearch에 위임하여 효율적
- 통합성: Elasticsearch 생태계와 완벽히 통합
- 유연성: 다양한 머신러닝 프레임워크 지원
- 접근성: Hugging Face 모델을 명령어 하나로 배포
제약사항
- Pandas API 완전 호환 아님: 모든 Pandas 기능을 지원하지 않음
- 실시간 학습 불가: 모델은 사전에 학습된 것만 배포 가능
- Elasticsearch 의존성: Elasticsearch 클러스터가 필수
- 일부 연산 제약: 복잡한 데이터 조작은 Pandas로 변환 후 수행 필요
Elasticsearch ML과의 관계
Eland는 Elasticsearch의 머신러닝 기능을 활용하기 위한 Python 클라이언트 역할을 한다:
- 모델 배포: Eland로 모델을 Elasticsearch에 업로드
- 추론 실행: Elasticsearch의 인제스트 파이프라인이나 검색 시점에 모델 사용
- 결과 조회: Eland DataFrame으로 추론 결과 분석
이를 통해 검색과 머신러닝을 통합한 강력한 애플리케이션을 구축할 수 있다.
OpenSearch 지원
Eland는 Elasticsearch 전용 라이브러리이며 OpenSearch와는 호환되지 않는다. OpenSearch를 사용하는 경우 대신 **opensearch-py-ml**을 사용해야 한다.
opensearch-py-ml은 Eland의 오픈소스 포크로, OpenSearch를 위한 데이터 분석 및 머신러닝 도구를 제공한다. Eland와 유사한 DataFrame API와 ML 모델 배포 기능을 제공하며, OpenSearch의 ML Commons 플러그인과 긴밀하게 통합되어 있다.
자세한 내용은 opensearch-py-ml 문서를 참고하라.