SlideShare une entreprise Scribd logo
1  sur  51
ElasticSearch의 이해와 
성능 최적화 
정호욱 책임 / BigData Platform Team 
그루터
저는 요… 
• 정호욱 
• Bigdata Platform, Gruter Inc 
• hwjeong@gruter.com 
• http://jjeong.tistory.com 
• E-book: 실무 예제로 배우는 
Elasticsearch 검색엔진 - 입문편
CONTENTS 
1.ElasticSearch 이해 
2.ElasticSearch 성능 최적화 이해 
3.ElasticSearch 빅데이터 활용
1.ElasticSearch 
이해 
1.1.ElasticSearch와 동작 방식 
1.2.설치 및 실행하기 
1.3.Modeling 하기
1.1.ElasticSearch와 동작 방식 
ElasticSearch란? 
Lucene 기반의 오픈 소스 검색엔진 
ElasticSearch 특징 
Easy 
Real time search & analytics 
Distributed & highly available search engine
1.1.ElasticSearch와 동작 방식 
ElasticSearch 구성 
Physical 구성 
Logical 구성 
Cluster Index 
Node Node Node 
Indice Indice Indice 
Shard 
Shard 
Shard 
Shard 
Shard 
Shard 
Shard 
Shard 
Shard 
Type Type Type 
Document Document Document 
field:value 
field:value 
field:value 
field:value 
field:value 
field:value 
field:value 
field:value 
field:value 
[Physical 구성] [Logical 구성]
1.1.ElasticSearch와 동작 방식 
ElasticSearch Nodes 
Master node 
Data node 
Search load balancer node 
Client node 
Master 
node.master: true 
Data 
node.data: true 
Search LB 
node.master: false 
node.data: false 
Client 
node.client: true
1.1.ElasticSearch와 동작 방식 
ElasticSearch Nodes 구성 예 
Case 1) 
All round player 
node.master: true 
node.data: true 
node.master: true 
node.data: true 
node.master: true 
node.data: true 
Case 2) 
Master 
Data 
node.master: true 
node.data: false 
node.master: true 
node.data: false 
node.master: false 
node.data: true 
node.master: false 
node.data: true 
Case 3) 
Master 
Data 
Search LB 
node.master: true 
node.data: false 
node.master: true 
node.data: false 
node.master: false 
node.data: true 
node.master: false 
node.data: true 
node.master: false 
node.data: false 
node.master: false 
node.data: false
1.1.ElasticSearch와 동작 방식 
ElasticSearch vs RDBMS 
Relational Database ElasticSearch 
Database Index 
Table Type 
Row Document 
Column Field 
Index Analyze 
Primary key _id 
Schema Mapping 
Physical partition Shard 
Logical partition Route 
Relational Parent/Child, Nested 
SQL Query DSL
1.1.ElasticSearch와 동작 방식 
ElasticSearch shard replication 
POST /my_index/_settings 
{ 
"number_of_replicas": 1 
} 
POST /my_index/_settings 
{ 
"number_of_replicas": 2 
} 
http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/replica-shards
1.1.ElasticSearch와 동작 방식 
Creating, indexing and deleting a document 
http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/distrib-write.html
1.1.ElasticSearch와 동작 방식 
Retrieve, query and fetch a document 
http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/distrib-read.html 
http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/_query_phase.html 
http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/_fetch_phase.html
1.2.설치 및 실행하기 
설치하기 
다운로드 
압축해제 
실행하기 
실행 
테스트 
Create index 
Add document 
Get document 
Search document
1.3.Modeling 하기 
Indice/type design 
Time-based/User-based data 
Relational data 
1TB 
Field design 
검색 대상 필드 
분석 대상 필드 
정렬 대상 필드 
저장 대상 필드 
Primary key 필드
1.3.Modeling 하기 
Modeling 구성 예 
Indice1 Indice2 Indice3 
IndiceA IndiceB IndiceC 
Type 
Parent 
Type 
Child 
Type 
1 : N 
Parent 
Type 
Child 
Type 
Child 
1 : N 
1 : N Type
1.3.Modeling 하기 
Shard design 
number_of_shards >= number_of_data_nodes 
number_of_replica <= number_of_data_nodes - 1 
Shard sizing 
Index 당 최대 shard 수 : 200 개 이하 
Shard 하나 당 최대 크기 : 20 ~ 50GB 
Shard 하나 당 최소 크기 : ~ 3GB
1.3.Modeling 하기 
Hash partition test 
public class EsHashPartitionTest { 
@Test 
public void testHashPartition() { 
……중략…… 
for ( int i=0; i<1000000; i++ ) { 
int shardId = MathUtils.mod(hash(String.valueOf(i)), shardSize); 
shards.add(shardId, (long) ++partSize[shardId]); 
} 
……중략…… 
} 
public int hash(String routing) { 
return hashFunction.hash(routing); 
} 
}
2.ElasticSearch 
성능 최적화 
이해 
2.1.성능에 영향을 미치는 요소들 
2.2.설정 최적화 
2.3.색인 최적화 
2.4.질의 최적화
2.1.성능에 영향을 미치는 요소들 
장비 관점 
Network bandwidth? 
Disk I/O? 
RAM? 
CPU cores? 
문서 관점 
Document size? 
Total index data size? 
Data size increase? 
Store period? 
서비스 관점 
Analyzer? 
Analyze fields? 
Indexed field size? 
Boosting? 
Realtime or batch? 
Queries?
2.1.성능에 영향을 미치는 요소들 
In ElasticSearch site: 
If 1 shard is too few and 1,000 shards are too many, how do I know how many 
shards I need? 
This is a question that is impossible to answer in the general case. There are 
many variables: the hardware that you use, the size and complexity of your 
documents, how you index and analyze those documents, the types of queries 
that you run, the aggregations that you perform, how you model your data, 
etc., etc. 
http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/capacity-planning.html
2.1.성능에 영향을 미치는 요소들 
In ElasticSearch site: 
Fortunately, it is an easy question to answer in the specific case: yours. 
1. Create a cluster consisting of a single server, with the hardware that you are 
considering using in production. 
2. Create an index with the same settings and analyzers that you plan to use in 
production, but with only on primary shard and no replicas. 
3. Fill it with real documents (or as close to real as you can get). 
4. Run real queries and aggregations (or as close to real as you can get). 
http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/capacity-planning.html
2.2.설정 최적화 
운영체제 관점 
Increase File descriptor 
Avoid swap 
검색엔진 관점 
Avoid swap 
Thread pool 
Segment merge 
Index buffer size 
Storage device 
Use recent version
2.2.설정 최적화 
Cluster restart 관점 
Optimize (max segments: 5) 
Close index 
Restart after set “disable_allocation: true” 
Increase recovery limits
2.3.색인 최적화 
Modeling 
Disable “_all” fields 
Disable “_source” fields, so far as possible 
Set right value to “_id” fields 
Set false to “store” fields, so far as possible
2.3.색인 최적화 
Sizing 
Indice는 데이터의 크기를 관리 할 수 있는 용도로 사용한다. 
Indice 당 primary shard 수는 data node 수 보다 크거나 같아야 한다. 
(number_of_shards >= number_of_data_nodes) 
Indice 당 shard 수는 200개 미만으로 구성한다. 
Shard 하나의 크기는 50GB 미만으로 구성한다.
2.3.색인 최적화 
Client 
Bulk API를 사용한다. 
Hardware 성능을 점검한다. 
Exception을 확인한다. 
Thread pools을 점검한다. 
1110(Node,Indice,Shard,Replica)으로 점검한다. 
Optimize 대신 Flush와 Refresh를 활용한다.
2.3.색인 최적화 
Bulk indexing 
Request 당 크기는 5 ~ 15MB 
Request 당 문서 크기는 1,000 ~ 5,000개 
Server bulk thread pool 크기는 core size × 5 보다 작거나 같게 설정 
Client bulk connection pool 크기는 3 ~ 10개 × number_of_data_nodes 
Client ping timeout은 30 ~ 90초로 설정 
Client node sampler interval은 30 ~ 90초로 설정 
Client transport sniff를 true로 설정 
Client network TCP blocking을 false로 설정
2.3.색인 최적화 
Bulk indexing 
Disable refresh_interval 
Disable replica 
Use flush & refresh (instead of optimize) 
Bulk indexing flow 
Update 
Settings 
Bulk 
Request 
Flush & 
Refresh 
Update 
Settings
2.4.질의 최적화 
Shards 
Data 분산을 위해 shard 수를 늘린다. 
Replica shard 수를 늘린다. 
Data distribution 
Use routing 
Check _id 
ShardId = hash(_id) % number_of_primary_shards
2.4.질의 최적화 
Query 
항상 같은 node 로 query hitting이 되지 않도록 한다. 
Zero hit query를 줄여야 한다. 
Query 결과를 cache 한다. 
Avoid deep pagination. 
Sorting : number_of_shard × (from +size) 
Script 사용 시 _source, _field 대신 doc[‘field’]를 사용한다. 
Search type 
Query and fetch 
Query then fetch 
Count 
Scan
2.4.질의 최적화 
Queries vs. Filters 
Query 대신 filtered query와 filter를 사용한다. 
And/or/not filter 대신 bool filter를 사용한다. 
Queries Filters 
Relevance Binary yes/no 
Full text Exact values 
Not cached Cached 
Slower Faster 
“query” : { 
“match_all” : { 
} 
} 
“query” : { 
“filtered” : { 
“query” : { 
“match_all” : {} 
} 
} 
}
3.ElasticSearch 
빅데이터 
활용 
3.1.Hadoop 통합 
3.2.SQL on ElasticSearch
3.1.Hadoop 통합 
ElasticSearch Hadoop 활용 
Big data 분석을 위한 도구 
Snapshot & Restore 저장소 
ElasticSearch Hadoop plugin 도구 제공
3.1.Hadoop 통합 
Indexing 
BulkRequestBuilder REST API 
ElasticSearch 
Hadoop plugin 
Bulk indexing 
Integrate natively 
Read raw data 
Java client 
application 
Control concurrency request
3.1.Hadoop 통합 
Indexing 
ElasticSearch 
Hadoop 
Plugin 
MapReduce 
Configuration conf = new Configuration(); 
…중략… 
conf.set(Configuration.ES_NODES, “localhost:9200”); 
conf.set(Configuration.ES_RESOURCE, “blog/post”); 
…중략… 
Job job = new Job(conf); 
job.setInputFormatClass(TextInputFormat.class); 
job.setOutputFormatClass(EsOutputFormat.class); 
job.setMapOutputValueClass(LinkedMapWritable.class); 
job.setMapperClass(TabMapper.class); 
job.setNumReduceTasks(0); 
File fl = new File(“blog/post.txt”); 
long splitSize = fl.length() / 3; 
TextInputFormat.setMaxInputSplitSize(job, splitSize); 
TextInputFormat.setMinInputSplitSize(job, 50); 
boolean result = job.waitForCompletion(true);
3.1.Hadoop 통합 
Indexing 
Java 
Client 
Application 
MapReduce 
public static void main(String[] args) throws Exception { 
...중략... 
settings = Connector.buildSettings(esCluster); 
client = Connector.buildClient(settings, esNodes.split(",")); 
runBeforeConfig(esIndice); 
Job job = new Job(conf); 
...중략... 
for ( String distJar : esDistributedCacheJars) { 
DistributedCache.addFileToClassPath( 
new Path(esDistributedCachePath+"/"+distJar), 
job.getConfiguration()); 
} 
...중략... 
if ( "true".equalsIgnoreCase(esOptimize) ) { 
runOptimize(esIndice); 
} else { 
runRefreshAndFlush(esIndice); 
} 
runAfterConfig(esIndice, replica); 
}
3.1.Hadoop 통합 
Indexing 
Java 
Client 
Application 
MapReduce 
public void map(Object key, Object value, Context context) 
throws Exception { 
...중략... 
IndexRequest indexRequest = new IndexRequest(); 
indexRequest = indexRequest.index(esIndice) 
.type(esType) 
.source(doc); 
...중략... 
bulkRequest.add (indexRequest); 
...중략... 
bulkResponse = bulkRequest.setConsistencyLevel(QUORUM) 
.setReplicationType(ASYNC) 
.setRefresh(false) 
.execute() 
.actionGet(); 
...중략... 
}
3.1.Hadoop 통합 
Searching 
ElasticSearch Hadoop plugin 
Query request 
Integrate natively 
Java client application 
Query request
3.1.Hadoop 통합 
Searching 
ElasticSearch 
Hadoop 
Plugin 
MapReduce 
public static class SearchMapper extends Mapper { 
@Override 
public void map(Object key, Object value, Context context) 
throws IOException, InterruptedException { 
Text docId = (Text) key; 
LinkedMapWritable doc = (LinkedMapWritable) value; 
System.out.println(docId); 
} 
} 
public static void main(String[] args) throws Exception { 
Configuration conf = new Configuration(); 
...중략... 
Job job = new Job(conf); 
...중략... 
conf.set(ConfigurationOptions.ES_QUERY, 
"{ "query" : { "match_all" : {} } }"); 
job.setNumReduceTasks(0); 
boolean result = job.waitForCompletion(true); 
}
3.1.Hadoop 통합 
Searching 
Java 
Client 
Application 
SearchResponse searchResponse; 
MatchAllQueryBuilder 
matchAllQueryBuilder = new MatchAllQueryBuilder(); 
searchResponse = client.prepareSearch(esIndice) 
.setQuery(matchAllQueryBuilder) 
.execute() 
.actionGet(); 
System.out.println(searchResponse.toString());
3.2.SQL on ElasticSearch 
ElasticSearch SQL 이란? 
쉬운 접근성과 데이터 분석 도구를 제공한다. 
표준 SQL 문법을 Query DSL로 변환한다. 
표준 SQL 문법을 사용하여 검색엔진으로 CRUD 연산을 수행할 수 있다. 
JDBC drive와 CLI 기능을 제공하고 있다. 
Apache Tajo용 SQL analyzer를 사용하고 있다.
3.2.SQL on ElasticSearch 
ElasticSearch JDBC driver 
Client 
Application 
JDBC 
Driver 
Elastic 
Search 
SQL 
Analyzer 
Algebra 
Expression 
Query DSL 
Planner 
Query 
Execution 
SQL DSL
3.2.SQL on ElasticSearch 
ElasticSearch SQL Syntax 
Create database/table 
Drop database/table 
Select/Insert/Upsert/Delete 
Use database 
Show databases/tables 
Desc table
3.2.SQL on ElasticSearch 
ElasticSearch Analytics(Aggregations) SQL 
Min/max/sum/avg/stats/extended_stats 
Value_count/percentiles/cardinality 
Global_* 
Terms/range/date_range
3.2.SQL on ElasticSearch 
ElasticSearch SQL vs. Query DSL 
SQL Query DSL 
SELECT * 
FROM type_name 
LIMIT 0/10 
"match_all": {} 
… 
“from” : 0, 
“size” : 10 
SELECT field1, field2 
FROM type_name 
WHERE search_field = ‘elasticsearch’ 
"term": { 
"search_field": { 
"value": "elasticsearch" 
} 
} 
… 
"fields": [ 
"field1","field2" 
]
3.2.SQL on ElasticSearch 
ElasticSearch SQL vs. Query DSL 
SQL Query DSL 
SELECT * 
FROM type_name 
WHERE search_ field > ‘20140624235959’ 
ORDER BY search_field DESC 
"range": { 
"search_field": { 
"gt": "20140624235959" 
} 
} 
… 
"sort": [ 
{ 
"search_field": { 
"order": "desc" 
} 
} 
]
SQL on ElasticSearch 
Demo
마무리 하며… 
ElasticSearch 이해 
Lucene 기반의 분산 검색 엔진 
ElasticSearch 성능 최적화 이해 
정답은 없지만… 
항상 좋은 장비에 최신버전을 사용한다. 
확장 가능한 modeling과 sizing을 구성한다. 
병목 구간을 항상 모니터링 한다. 
Query와 filter를 목적에 맞게 사용한다. 
Bulk API를 사용한다. 
ElasticSearch 빅데이터 활용 
Hadoop과 SQL로 쉽게 분석도구로 활용한다.
Q&A 
E-mail : sophistlv@gmail.com
THANK YOU

Contenu connexe

Tendances

20151022 elasticsearch 적용및활용_송준이_sds발표용
20151022 elasticsearch 적용및활용_송준이_sds발표용20151022 elasticsearch 적용및활용_송준이_sds발표용
20151022 elasticsearch 적용및활용_송준이_sds발표용Junyi Song
 
elasticsearch_적용 및 활용_정리
elasticsearch_적용 및 활용_정리elasticsearch_적용 및 활용_정리
elasticsearch_적용 및 활용_정리Junyi Song
 
Fundamental of ELK Stack
Fundamental of ELK StackFundamental of ELK Stack
Fundamental of ELK Stack주표 홍
 
Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문SeungHyun Eom
 
Data discovery & metadata management (amundsen installation)
Data discovery & metadata management (amundsen installation)Data discovery & metadata management (amundsen installation)
Data discovery & metadata management (amundsen installation)창언 정
 
Expanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with TajoExpanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with TajoMatthew (정재화)
 
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항Minchul Jung
 
Ch1 일래스틱서치 클러스터 시작
Ch1 일래스틱서치 클러스터 시작Ch1 일래스틱서치 클러스터 시작
Ch1 일래스틱서치 클러스터 시작Minchul Jung
 
Introduction to Apache Tajo
Introduction to Apache TajoIntroduction to Apache Tajo
Introduction to Apache TajoGruter
 
Gruter TECHDAY 2014 MelOn BigData
Gruter TECHDAY 2014 MelOn BigDataGruter TECHDAY 2014 MelOn BigData
Gruter TECHDAY 2014 MelOn BigDataGruter
 
Meteor Elasticsearch 연동 Trial
Meteor Elasticsearch 연동 TrialMeteor Elasticsearch 연동 Trial
Meteor Elasticsearch 연동 TrialSangwon Lee
 
[Open Technet Summit 2014] 쓰기 쉬운 Hadoop 기반 빅데이터 플랫폼 아키텍처 및 활용 방안
[Open Technet Summit 2014] 쓰기 쉬운 Hadoop 기반 빅데이터 플랫폼 아키텍처 및 활용 방안[Open Technet Summit 2014] 쓰기 쉬운 Hadoop 기반 빅데이터 플랫폼 아키텍처 및 활용 방안
[Open Technet Summit 2014] 쓰기 쉬운 Hadoop 기반 빅데이터 플랫폼 아키텍처 및 활용 방안치완 박
 
[225]yarn 기반의 deep learning application cluster 구축 김제민
[225]yarn 기반의 deep learning application cluster 구축 김제민[225]yarn 기반의 deep learning application cluster 구축 김제민
[225]yarn 기반의 deep learning application cluster 구축 김제민NAVER D2
 
검색 서비스 간략 교육
검색 서비스 간략 교육 검색 서비스 간략 교육
검색 서비스 간략 교육 Rjs Ryu
 
[Td 2015]microsoft 개발자들을 위한 달콤한 hadoop, hd insight(최종욱)
[Td 2015]microsoft 개발자들을 위한 달콤한 hadoop, hd insight(최종욱)[Td 2015]microsoft 개발자들을 위한 달콤한 hadoop, hd insight(최종욱)
[Td 2015]microsoft 개발자들을 위한 달콤한 hadoop, hd insight(최종욱)Sang Don Kim
 
Elasticsearch server Chapter5
Elasticsearch server Chapter5Elasticsearch server Chapter5
Elasticsearch server Chapter5Mungyu Choi
 
Elasticsearch Modeling - 정호욱
Elasticsearch Modeling - 정호욱Elasticsearch Modeling - 정호욱
Elasticsearch Modeling - 정호욱NAVER D2
 
스타트업사례로 본 로그 데이터분석 : Tajo on AWS
스타트업사례로 본 로그 데이터분석 : Tajo on AWS스타트업사례로 본 로그 데이터분석 : Tajo on AWS
스타트업사례로 본 로그 데이터분석 : Tajo on AWSGruter
 
Spark_Overview_qna
Spark_Overview_qnaSpark_Overview_qna
Spark_Overview_qna현철 박
 

Tendances (20)

20151022 elasticsearch 적용및활용_송준이_sds발표용
20151022 elasticsearch 적용및활용_송준이_sds발표용20151022 elasticsearch 적용및활용_송준이_sds발표용
20151022 elasticsearch 적용및활용_송준이_sds발표용
 
elasticsearch_적용 및 활용_정리
elasticsearch_적용 및 활용_정리elasticsearch_적용 및 활용_정리
elasticsearch_적용 및 활용_정리
 
Fundamental of ELK Stack
Fundamental of ELK StackFundamental of ELK Stack
Fundamental of ELK Stack
 
Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문
 
Data discovery & metadata management (amundsen installation)
Data discovery & metadata management (amundsen installation)Data discovery & metadata management (amundsen installation)
Data discovery & metadata management (amundsen installation)
 
Expanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with TajoExpanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with Tajo
 
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
 
Ch1 일래스틱서치 클러스터 시작
Ch1 일래스틱서치 클러스터 시작Ch1 일래스틱서치 클러스터 시작
Ch1 일래스틱서치 클러스터 시작
 
Introduction to Apache Tajo
Introduction to Apache TajoIntroduction to Apache Tajo
Introduction to Apache Tajo
 
Gruter TECHDAY 2014 MelOn BigData
Gruter TECHDAY 2014 MelOn BigDataGruter TECHDAY 2014 MelOn BigData
Gruter TECHDAY 2014 MelOn BigData
 
Meteor Elasticsearch 연동 Trial
Meteor Elasticsearch 연동 TrialMeteor Elasticsearch 연동 Trial
Meteor Elasticsearch 연동 Trial
 
[Open Technet Summit 2014] 쓰기 쉬운 Hadoop 기반 빅데이터 플랫폼 아키텍처 및 활용 방안
[Open Technet Summit 2014] 쓰기 쉬운 Hadoop 기반 빅데이터 플랫폼 아키텍처 및 활용 방안[Open Technet Summit 2014] 쓰기 쉬운 Hadoop 기반 빅데이터 플랫폼 아키텍처 및 활용 방안
[Open Technet Summit 2014] 쓰기 쉬운 Hadoop 기반 빅데이터 플랫폼 아키텍처 및 활용 방안
 
[225]yarn 기반의 deep learning application cluster 구축 김제민
[225]yarn 기반의 deep learning application cluster 구축 김제민[225]yarn 기반의 deep learning application cluster 구축 김제민
[225]yarn 기반의 deep learning application cluster 구축 김제민
 
검색 서비스 간략 교육
검색 서비스 간략 교육 검색 서비스 간략 교육
검색 서비스 간략 교육
 
[Td 2015]microsoft 개발자들을 위한 달콤한 hadoop, hd insight(최종욱)
[Td 2015]microsoft 개발자들을 위한 달콤한 hadoop, hd insight(최종욱)[Td 2015]microsoft 개발자들을 위한 달콤한 hadoop, hd insight(최종욱)
[Td 2015]microsoft 개발자들을 위한 달콤한 hadoop, hd insight(최종욱)
 
Elasticsearch server Chapter5
Elasticsearch server Chapter5Elasticsearch server Chapter5
Elasticsearch server Chapter5
 
Elasticsearch Modeling - 정호욱
Elasticsearch Modeling - 정호욱Elasticsearch Modeling - 정호욱
Elasticsearch Modeling - 정호욱
 
Spark sql
Spark sqlSpark sql
Spark sql
 
스타트업사례로 본 로그 데이터분석 : Tajo on AWS
스타트업사례로 본 로그 데이터분석 : Tajo on AWS스타트업사례로 본 로그 데이터분석 : Tajo on AWS
스타트업사례로 본 로그 데이터분석 : Tajo on AWS
 
Spark_Overview_qna
Spark_Overview_qnaSpark_Overview_qna
Spark_Overview_qna
 

Similaire à Elastic Search Performance Optimization - Deview 2014

Elastic Stack & Data pipeline
Elastic Stack & Data pipelineElastic Stack & Data pipeline
Elastic Stack & Data pipelineJongho Woo
 
정보검색과 Elasticsearch (크몽)
정보검색과 Elasticsearch (크몽)정보검색과 Elasticsearch (크몽)
정보검색과 Elasticsearch (크몽)크몽
 
DeView2013 Big Data Platform Architecture with Hadoop - Hyeong-jun Kim
DeView2013 Big Data Platform Architecture with Hadoop - Hyeong-jun KimDeView2013 Big Data Platform Architecture with Hadoop - Hyeong-jun Kim
DeView2013 Big Data Platform Architecture with Hadoop - Hyeong-jun KimGruter
 
스타트업 사례로 본 로그 데이터 분석 : Tajo on AWS
스타트업 사례로 본 로그 데이터 분석 : Tajo on AWS스타트업 사례로 본 로그 데이터 분석 : Tajo on AWS
스타트업 사례로 본 로그 데이터 분석 : Tajo on AWSMatthew (정재화)
 
스프링군살없이세팅하기(The way to setting the Spring framework for web.)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)스프링군살없이세팅하기(The way to setting the Spring framework for web.)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)EunChul Shin
 
[오픈소스컨설팅]openstack_monitoring_session
[오픈소스컨설팅]openstack_monitoring_session[오픈소스컨설팅]openstack_monitoring_session
[오픈소스컨설팅]openstack_monitoring_sessionChanyeol yoon
 
Expanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with TajoExpanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with TajoGruter
 
Spark streaming tutorial
Spark streaming tutorialSpark streaming tutorial
Spark streaming tutorialMinho Kim
 
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기ksdc2019
 
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4Seok-joon Yun
 
Elasticsearch development case
Elasticsearch development caseElasticsearch development case
Elasticsearch development case일규 최
 
[D2 COMMUNITY] Spark User Group - 스파크를 통한 딥러닝 이론과 실제
[D2 COMMUNITY] Spark User Group - 스파크를 통한 딥러닝 이론과 실제[D2 COMMUNITY] Spark User Group - 스파크를 통한 딥러닝 이론과 실제
[D2 COMMUNITY] Spark User Group - 스파크를 통한 딥러닝 이론과 실제NAVER D2
 
Fundamentals of Oracle SQL
Fundamentals of Oracle SQLFundamentals of Oracle SQL
Fundamentals of Oracle SQLJAEGEUN YU
 
AWS를 통한 빅데이터 기반 비지니스 인텔리전스 구축- AWS Summit Seoul 2017
AWS를 통한 빅데이터 기반 비지니스 인텔리전스 구축- AWS Summit Seoul 2017AWS를 통한 빅데이터 기반 비지니스 인텔리전스 구축- AWS Summit Seoul 2017
AWS를 통한 빅데이터 기반 비지니스 인텔리전스 구축- AWS Summit Seoul 2017Amazon Web Services Korea
 
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020Jinwoong Kim
 
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020 AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020 AWSKRUG - AWS한국사용자모임
 
고성능 빅데이터 수집 및 분석 솔루션 - 티맥스소프트 허승재 팀장
고성능 빅데이터 수집 및 분석 솔루션 - 티맥스소프트 허승재 팀장고성능 빅데이터 수집 및 분석 솔루션 - 티맥스소프트 허승재 팀장
고성능 빅데이터 수집 및 분석 솔루션 - 티맥스소프트 허승재 팀장eungjin cho
 
REST Ovewview
REST OvewviewREST Ovewview
REST OvewviewTerry Cho
 
2016년 인문정보학 Sql세미나 1/3
2016년 인문정보학 Sql세미나 1/32016년 인문정보학 Sql세미나 1/3
2016년 인문정보학 Sql세미나 1/3in2acous
 

Similaire à Elastic Search Performance Optimization - Deview 2014 (20)

Elastic Stack & Data pipeline
Elastic Stack & Data pipelineElastic Stack & Data pipeline
Elastic Stack & Data pipeline
 
정보검색과 Elasticsearch (크몽)
정보검색과 Elasticsearch (크몽)정보검색과 Elasticsearch (크몽)
정보검색과 Elasticsearch (크몽)
 
DeView2013 Big Data Platform Architecture with Hadoop - Hyeong-jun Kim
DeView2013 Big Data Platform Architecture with Hadoop - Hyeong-jun KimDeView2013 Big Data Platform Architecture with Hadoop - Hyeong-jun Kim
DeView2013 Big Data Platform Architecture with Hadoop - Hyeong-jun Kim
 
스타트업 사례로 본 로그 데이터 분석 : Tajo on AWS
스타트업 사례로 본 로그 데이터 분석 : Tajo on AWS스타트업 사례로 본 로그 데이터 분석 : Tajo on AWS
스타트업 사례로 본 로그 데이터 분석 : Tajo on AWS
 
스프링군살없이세팅하기(The way to setting the Spring framework for web.)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)스프링군살없이세팅하기(The way to setting the Spring framework for web.)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)
 
Infiniflux introduction
Infiniflux introductionInfiniflux introduction
Infiniflux introduction
 
[오픈소스컨설팅]openstack_monitoring_session
[오픈소스컨설팅]openstack_monitoring_session[오픈소스컨설팅]openstack_monitoring_session
[오픈소스컨설팅]openstack_monitoring_session
 
Expanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with TajoExpanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with Tajo
 
Spark streaming tutorial
Spark streaming tutorialSpark streaming tutorial
Spark streaming tutorial
 
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기
 
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4
 
Elasticsearch development case
Elasticsearch development caseElasticsearch development case
Elasticsearch development case
 
[D2 COMMUNITY] Spark User Group - 스파크를 통한 딥러닝 이론과 실제
[D2 COMMUNITY] Spark User Group - 스파크를 통한 딥러닝 이론과 실제[D2 COMMUNITY] Spark User Group - 스파크를 통한 딥러닝 이론과 실제
[D2 COMMUNITY] Spark User Group - 스파크를 통한 딥러닝 이론과 실제
 
Fundamentals of Oracle SQL
Fundamentals of Oracle SQLFundamentals of Oracle SQL
Fundamentals of Oracle SQL
 
AWS를 통한 빅데이터 기반 비지니스 인텔리전스 구축- AWS Summit Seoul 2017
AWS를 통한 빅데이터 기반 비지니스 인텔리전스 구축- AWS Summit Seoul 2017AWS를 통한 빅데이터 기반 비지니스 인텔리전스 구축- AWS Summit Seoul 2017
AWS를 통한 빅데이터 기반 비지니스 인텔리전스 구축- AWS Summit Seoul 2017
 
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020
 
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020 AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020
 
고성능 빅데이터 수집 및 분석 솔루션 - 티맥스소프트 허승재 팀장
고성능 빅데이터 수집 및 분석 솔루션 - 티맥스소프트 허승재 팀장고성능 빅데이터 수집 및 분석 솔루션 - 티맥스소프트 허승재 팀장
고성능 빅데이터 수집 및 분석 솔루션 - 티맥스소프트 허승재 팀장
 
REST Ovewview
REST OvewviewREST Ovewview
REST Ovewview
 
2016년 인문정보학 Sql세미나 1/3
2016년 인문정보학 Sql세미나 1/32016년 인문정보학 Sql세미나 1/3
2016년 인문정보학 Sql세미나 1/3
 

Plus de Gruter

MelOn 빅데이터 플랫폼과 Tajo 이야기
MelOn 빅데이터 플랫폼과 Tajo 이야기MelOn 빅데이터 플랫폼과 Tajo 이야기
MelOn 빅데이터 플랫폼과 Tajo 이야기Gruter
 
Introduction to Apache Tajo: Future of Data Warehouse
Introduction to Apache Tajo: Future of Data WarehouseIntroduction to Apache Tajo: Future of Data Warehouse
Introduction to Apache Tajo: Future of Data WarehouseGruter
 
Introduction to Apache Tajo: Data Warehouse for Big Data
Introduction to Apache Tajo: Data Warehouse for Big DataIntroduction to Apache Tajo: Data Warehouse for Big Data
Introduction to Apache Tajo: Data Warehouse for Big DataGruter
 
What's New Tajo 0.10 and Its Beyond
What's New Tajo 0.10 and Its BeyondWhat's New Tajo 0.10 and Its Beyond
What's New Tajo 0.10 and Its BeyondGruter
 
Efficient In­‐situ Processing of Various Storage Types on Apache Tajo
Efficient In­‐situ Processing of Various Storage Types on Apache TajoEfficient In­‐situ Processing of Various Storage Types on Apache Tajo
Efficient In­‐situ Processing of Various Storage Types on Apache TajoGruter
 
Tajo TPC-H Benchmark Test on AWS
Tajo TPC-H Benchmark Test on AWSTajo TPC-H Benchmark Test on AWS
Tajo TPC-H Benchmark Test on AWSGruter
 
Data analysis with Tajo
Data analysis with TajoData analysis with Tajo
Data analysis with TajoGruter
 
Gruter TECHDAY 2014 Realtime Processing in Telco
Gruter TECHDAY 2014 Realtime Processing in TelcoGruter TECHDAY 2014 Realtime Processing in Telco
Gruter TECHDAY 2014 Realtime Processing in TelcoGruter
 
Gruter_TECHDAY_2014_04_TajoCloudHandsOn (in Korean)
Gruter_TECHDAY_2014_04_TajoCloudHandsOn (in Korean)Gruter_TECHDAY_2014_04_TajoCloudHandsOn (in Korean)
Gruter_TECHDAY_2014_04_TajoCloudHandsOn (in Korean)Gruter
 
Gruter_TECHDAY_2014_03_ApacheTajo (in Korean)
Gruter_TECHDAY_2014_03_ApacheTajo (in Korean)Gruter_TECHDAY_2014_03_ApacheTajo (in Korean)
Gruter_TECHDAY_2014_03_ApacheTajo (in Korean)Gruter
 
Gruter_TECHDAY_2014_01_SearchEngine (in Korean)
Gruter_TECHDAY_2014_01_SearchEngine (in Korean)Gruter_TECHDAY_2014_01_SearchEngine (in Korean)
Gruter_TECHDAY_2014_01_SearchEngine (in Korean)Gruter
 
Apache Tajo - BWC 2014
Apache Tajo - BWC 2014Apache Tajo - BWC 2014
Apache Tajo - BWC 2014Gruter
 
Big Data Camp LA 2014 - Apache Tajo: A Big Data Warehouse System on Hadoop
Big Data Camp LA 2014 - Apache Tajo: A Big Data Warehouse System on HadoopBig Data Camp LA 2014 - Apache Tajo: A Big Data Warehouse System on Hadoop
Big Data Camp LA 2014 - Apache Tajo: A Big Data Warehouse System on HadoopGruter
 
Hadoop Summit 2014: Query Optimization and JIT-based Vectorized Execution in ...
Hadoop Summit 2014: Query Optimization and JIT-based Vectorized Execution in ...Hadoop Summit 2014: Query Optimization and JIT-based Vectorized Execution in ...
Hadoop Summit 2014: Query Optimization and JIT-based Vectorized Execution in ...Gruter
 
Cloumon sw제품설명회 발표자료
Cloumon sw제품설명회 발표자료Cloumon sw제품설명회 발표자료
Cloumon sw제품설명회 발표자료Gruter
 
Tajo and SQL-on-Hadoop in Tech Planet 2013
Tajo and SQL-on-Hadoop in Tech Planet 2013Tajo and SQL-on-Hadoop in Tech Planet 2013
Tajo and SQL-on-Hadoop in Tech Planet 2013Gruter
 
SQL-on-Hadoop with Apache Tajo, and application case of SK Telecom
SQL-on-Hadoop with Apache Tajo,  and application case of SK TelecomSQL-on-Hadoop with Apache Tajo,  and application case of SK Telecom
SQL-on-Hadoop with Apache Tajo, and application case of SK TelecomGruter
 
Tajo case study bay area hug 20131105
Tajo case study bay area hug 20131105Tajo case study bay area hug 20131105
Tajo case study bay area hug 20131105Gruter
 
Apache Tajo - Bay Area HUG Nov. 2013 LinkedIn Special Event
Apache Tajo - Bay Area HUG Nov. 2013 LinkedIn Special EventApache Tajo - Bay Area HUG Nov. 2013 LinkedIn Special Event
Apache Tajo - Bay Area HUG Nov. 2013 LinkedIn Special EventGruter
 
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-Hadoop
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-HadoopGRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-Hadoop
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-HadoopGruter
 

Plus de Gruter (20)

MelOn 빅데이터 플랫폼과 Tajo 이야기
MelOn 빅데이터 플랫폼과 Tajo 이야기MelOn 빅데이터 플랫폼과 Tajo 이야기
MelOn 빅데이터 플랫폼과 Tajo 이야기
 
Introduction to Apache Tajo: Future of Data Warehouse
Introduction to Apache Tajo: Future of Data WarehouseIntroduction to Apache Tajo: Future of Data Warehouse
Introduction to Apache Tajo: Future of Data Warehouse
 
Introduction to Apache Tajo: Data Warehouse for Big Data
Introduction to Apache Tajo: Data Warehouse for Big DataIntroduction to Apache Tajo: Data Warehouse for Big Data
Introduction to Apache Tajo: Data Warehouse for Big Data
 
What's New Tajo 0.10 and Its Beyond
What's New Tajo 0.10 and Its BeyondWhat's New Tajo 0.10 and Its Beyond
What's New Tajo 0.10 and Its Beyond
 
Efficient In­‐situ Processing of Various Storage Types on Apache Tajo
Efficient In­‐situ Processing of Various Storage Types on Apache TajoEfficient In­‐situ Processing of Various Storage Types on Apache Tajo
Efficient In­‐situ Processing of Various Storage Types on Apache Tajo
 
Tajo TPC-H Benchmark Test on AWS
Tajo TPC-H Benchmark Test on AWSTajo TPC-H Benchmark Test on AWS
Tajo TPC-H Benchmark Test on AWS
 
Data analysis with Tajo
Data analysis with TajoData analysis with Tajo
Data analysis with Tajo
 
Gruter TECHDAY 2014 Realtime Processing in Telco
Gruter TECHDAY 2014 Realtime Processing in TelcoGruter TECHDAY 2014 Realtime Processing in Telco
Gruter TECHDAY 2014 Realtime Processing in Telco
 
Gruter_TECHDAY_2014_04_TajoCloudHandsOn (in Korean)
Gruter_TECHDAY_2014_04_TajoCloudHandsOn (in Korean)Gruter_TECHDAY_2014_04_TajoCloudHandsOn (in Korean)
Gruter_TECHDAY_2014_04_TajoCloudHandsOn (in Korean)
 
Gruter_TECHDAY_2014_03_ApacheTajo (in Korean)
Gruter_TECHDAY_2014_03_ApacheTajo (in Korean)Gruter_TECHDAY_2014_03_ApacheTajo (in Korean)
Gruter_TECHDAY_2014_03_ApacheTajo (in Korean)
 
Gruter_TECHDAY_2014_01_SearchEngine (in Korean)
Gruter_TECHDAY_2014_01_SearchEngine (in Korean)Gruter_TECHDAY_2014_01_SearchEngine (in Korean)
Gruter_TECHDAY_2014_01_SearchEngine (in Korean)
 
Apache Tajo - BWC 2014
Apache Tajo - BWC 2014Apache Tajo - BWC 2014
Apache Tajo - BWC 2014
 
Big Data Camp LA 2014 - Apache Tajo: A Big Data Warehouse System on Hadoop
Big Data Camp LA 2014 - Apache Tajo: A Big Data Warehouse System on HadoopBig Data Camp LA 2014 - Apache Tajo: A Big Data Warehouse System on Hadoop
Big Data Camp LA 2014 - Apache Tajo: A Big Data Warehouse System on Hadoop
 
Hadoop Summit 2014: Query Optimization and JIT-based Vectorized Execution in ...
Hadoop Summit 2014: Query Optimization and JIT-based Vectorized Execution in ...Hadoop Summit 2014: Query Optimization and JIT-based Vectorized Execution in ...
Hadoop Summit 2014: Query Optimization and JIT-based Vectorized Execution in ...
 
Cloumon sw제품설명회 발표자료
Cloumon sw제품설명회 발표자료Cloumon sw제품설명회 발표자료
Cloumon sw제품설명회 발표자료
 
Tajo and SQL-on-Hadoop in Tech Planet 2013
Tajo and SQL-on-Hadoop in Tech Planet 2013Tajo and SQL-on-Hadoop in Tech Planet 2013
Tajo and SQL-on-Hadoop in Tech Planet 2013
 
SQL-on-Hadoop with Apache Tajo, and application case of SK Telecom
SQL-on-Hadoop with Apache Tajo,  and application case of SK TelecomSQL-on-Hadoop with Apache Tajo,  and application case of SK Telecom
SQL-on-Hadoop with Apache Tajo, and application case of SK Telecom
 
Tajo case study bay area hug 20131105
Tajo case study bay area hug 20131105Tajo case study bay area hug 20131105
Tajo case study bay area hug 20131105
 
Apache Tajo - Bay Area HUG Nov. 2013 LinkedIn Special Event
Apache Tajo - Bay Area HUG Nov. 2013 LinkedIn Special EventApache Tajo - Bay Area HUG Nov. 2013 LinkedIn Special Event
Apache Tajo - Bay Area HUG Nov. 2013 LinkedIn Special Event
 
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-Hadoop
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-HadoopGRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-Hadoop
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-Hadoop
 

Elastic Search Performance Optimization - Deview 2014

  • 1.
  • 2. ElasticSearch의 이해와 성능 최적화 정호욱 책임 / BigData Platform Team 그루터
  • 3. 저는 요… • 정호욱 • Bigdata Platform, Gruter Inc • hwjeong@gruter.com • http://jjeong.tistory.com • E-book: 실무 예제로 배우는 Elasticsearch 검색엔진 - 입문편
  • 4. CONTENTS 1.ElasticSearch 이해 2.ElasticSearch 성능 최적화 이해 3.ElasticSearch 빅데이터 활용
  • 5. 1.ElasticSearch 이해 1.1.ElasticSearch와 동작 방식 1.2.설치 및 실행하기 1.3.Modeling 하기
  • 6. 1.1.ElasticSearch와 동작 방식 ElasticSearch란? Lucene 기반의 오픈 소스 검색엔진 ElasticSearch 특징 Easy Real time search & analytics Distributed & highly available search engine
  • 7. 1.1.ElasticSearch와 동작 방식 ElasticSearch 구성 Physical 구성 Logical 구성 Cluster Index Node Node Node Indice Indice Indice Shard Shard Shard Shard Shard Shard Shard Shard Shard Type Type Type Document Document Document field:value field:value field:value field:value field:value field:value field:value field:value field:value [Physical 구성] [Logical 구성]
  • 8. 1.1.ElasticSearch와 동작 방식 ElasticSearch Nodes Master node Data node Search load balancer node Client node Master node.master: true Data node.data: true Search LB node.master: false node.data: false Client node.client: true
  • 9. 1.1.ElasticSearch와 동작 방식 ElasticSearch Nodes 구성 예 Case 1) All round player node.master: true node.data: true node.master: true node.data: true node.master: true node.data: true Case 2) Master Data node.master: true node.data: false node.master: true node.data: false node.master: false node.data: true node.master: false node.data: true Case 3) Master Data Search LB node.master: true node.data: false node.master: true node.data: false node.master: false node.data: true node.master: false node.data: true node.master: false node.data: false node.master: false node.data: false
  • 10. 1.1.ElasticSearch와 동작 방식 ElasticSearch vs RDBMS Relational Database ElasticSearch Database Index Table Type Row Document Column Field Index Analyze Primary key _id Schema Mapping Physical partition Shard Logical partition Route Relational Parent/Child, Nested SQL Query DSL
  • 11. 1.1.ElasticSearch와 동작 방식 ElasticSearch shard replication POST /my_index/_settings { "number_of_replicas": 1 } POST /my_index/_settings { "number_of_replicas": 2 } http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/replica-shards
  • 12. 1.1.ElasticSearch와 동작 방식 Creating, indexing and deleting a document http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/distrib-write.html
  • 13. 1.1.ElasticSearch와 동작 방식 Retrieve, query and fetch a document http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/distrib-read.html http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/_query_phase.html http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/_fetch_phase.html
  • 14. 1.2.설치 및 실행하기 설치하기 다운로드 압축해제 실행하기 실행 테스트 Create index Add document Get document Search document
  • 15. 1.3.Modeling 하기 Indice/type design Time-based/User-based data Relational data 1TB Field design 검색 대상 필드 분석 대상 필드 정렬 대상 필드 저장 대상 필드 Primary key 필드
  • 16. 1.3.Modeling 하기 Modeling 구성 예 Indice1 Indice2 Indice3 IndiceA IndiceB IndiceC Type Parent Type Child Type 1 : N Parent Type Child Type Child 1 : N 1 : N Type
  • 17. 1.3.Modeling 하기 Shard design number_of_shards >= number_of_data_nodes number_of_replica <= number_of_data_nodes - 1 Shard sizing Index 당 최대 shard 수 : 200 개 이하 Shard 하나 당 최대 크기 : 20 ~ 50GB Shard 하나 당 최소 크기 : ~ 3GB
  • 18. 1.3.Modeling 하기 Hash partition test public class EsHashPartitionTest { @Test public void testHashPartition() { ……중략…… for ( int i=0; i<1000000; i++ ) { int shardId = MathUtils.mod(hash(String.valueOf(i)), shardSize); shards.add(shardId, (long) ++partSize[shardId]); } ……중략…… } public int hash(String routing) { return hashFunction.hash(routing); } }
  • 19. 2.ElasticSearch 성능 최적화 이해 2.1.성능에 영향을 미치는 요소들 2.2.설정 최적화 2.3.색인 최적화 2.4.질의 최적화
  • 20. 2.1.성능에 영향을 미치는 요소들 장비 관점 Network bandwidth? Disk I/O? RAM? CPU cores? 문서 관점 Document size? Total index data size? Data size increase? Store period? 서비스 관점 Analyzer? Analyze fields? Indexed field size? Boosting? Realtime or batch? Queries?
  • 21. 2.1.성능에 영향을 미치는 요소들 In ElasticSearch site: If 1 shard is too few and 1,000 shards are too many, how do I know how many shards I need? This is a question that is impossible to answer in the general case. There are many variables: the hardware that you use, the size and complexity of your documents, how you index and analyze those documents, the types of queries that you run, the aggregations that you perform, how you model your data, etc., etc. http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/capacity-planning.html
  • 22. 2.1.성능에 영향을 미치는 요소들 In ElasticSearch site: Fortunately, it is an easy question to answer in the specific case: yours. 1. Create a cluster consisting of a single server, with the hardware that you are considering using in production. 2. Create an index with the same settings and analyzers that you plan to use in production, but with only on primary shard and no replicas. 3. Fill it with real documents (or as close to real as you can get). 4. Run real queries and aggregations (or as close to real as you can get). http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/capacity-planning.html
  • 23. 2.2.설정 최적화 운영체제 관점 Increase File descriptor Avoid swap 검색엔진 관점 Avoid swap Thread pool Segment merge Index buffer size Storage device Use recent version
  • 24. 2.2.설정 최적화 Cluster restart 관점 Optimize (max segments: 5) Close index Restart after set “disable_allocation: true” Increase recovery limits
  • 25. 2.3.색인 최적화 Modeling Disable “_all” fields Disable “_source” fields, so far as possible Set right value to “_id” fields Set false to “store” fields, so far as possible
  • 26. 2.3.색인 최적화 Sizing Indice는 데이터의 크기를 관리 할 수 있는 용도로 사용한다. Indice 당 primary shard 수는 data node 수 보다 크거나 같아야 한다. (number_of_shards >= number_of_data_nodes) Indice 당 shard 수는 200개 미만으로 구성한다. Shard 하나의 크기는 50GB 미만으로 구성한다.
  • 27. 2.3.색인 최적화 Client Bulk API를 사용한다. Hardware 성능을 점검한다. Exception을 확인한다. Thread pools을 점검한다. 1110(Node,Indice,Shard,Replica)으로 점검한다. Optimize 대신 Flush와 Refresh를 활용한다.
  • 28. 2.3.색인 최적화 Bulk indexing Request 당 크기는 5 ~ 15MB Request 당 문서 크기는 1,000 ~ 5,000개 Server bulk thread pool 크기는 core size × 5 보다 작거나 같게 설정 Client bulk connection pool 크기는 3 ~ 10개 × number_of_data_nodes Client ping timeout은 30 ~ 90초로 설정 Client node sampler interval은 30 ~ 90초로 설정 Client transport sniff를 true로 설정 Client network TCP blocking을 false로 설정
  • 29. 2.3.색인 최적화 Bulk indexing Disable refresh_interval Disable replica Use flush & refresh (instead of optimize) Bulk indexing flow Update Settings Bulk Request Flush & Refresh Update Settings
  • 30. 2.4.질의 최적화 Shards Data 분산을 위해 shard 수를 늘린다. Replica shard 수를 늘린다. Data distribution Use routing Check _id ShardId = hash(_id) % number_of_primary_shards
  • 31. 2.4.질의 최적화 Query 항상 같은 node 로 query hitting이 되지 않도록 한다. Zero hit query를 줄여야 한다. Query 결과를 cache 한다. Avoid deep pagination. Sorting : number_of_shard × (from +size) Script 사용 시 _source, _field 대신 doc[‘field’]를 사용한다. Search type Query and fetch Query then fetch Count Scan
  • 32. 2.4.질의 최적화 Queries vs. Filters Query 대신 filtered query와 filter를 사용한다. And/or/not filter 대신 bool filter를 사용한다. Queries Filters Relevance Binary yes/no Full text Exact values Not cached Cached Slower Faster “query” : { “match_all” : { } } “query” : { “filtered” : { “query” : { “match_all” : {} } } }
  • 33. 3.ElasticSearch 빅데이터 활용 3.1.Hadoop 통합 3.2.SQL on ElasticSearch
  • 34. 3.1.Hadoop 통합 ElasticSearch Hadoop 활용 Big data 분석을 위한 도구 Snapshot & Restore 저장소 ElasticSearch Hadoop plugin 도구 제공
  • 35. 3.1.Hadoop 통합 Indexing BulkRequestBuilder REST API ElasticSearch Hadoop plugin Bulk indexing Integrate natively Read raw data Java client application Control concurrency request
  • 36. 3.1.Hadoop 통합 Indexing ElasticSearch Hadoop Plugin MapReduce Configuration conf = new Configuration(); …중략… conf.set(Configuration.ES_NODES, “localhost:9200”); conf.set(Configuration.ES_RESOURCE, “blog/post”); …중략… Job job = new Job(conf); job.setInputFormatClass(TextInputFormat.class); job.setOutputFormatClass(EsOutputFormat.class); job.setMapOutputValueClass(LinkedMapWritable.class); job.setMapperClass(TabMapper.class); job.setNumReduceTasks(0); File fl = new File(“blog/post.txt”); long splitSize = fl.length() / 3; TextInputFormat.setMaxInputSplitSize(job, splitSize); TextInputFormat.setMinInputSplitSize(job, 50); boolean result = job.waitForCompletion(true);
  • 37. 3.1.Hadoop 통합 Indexing Java Client Application MapReduce public static void main(String[] args) throws Exception { ...중략... settings = Connector.buildSettings(esCluster); client = Connector.buildClient(settings, esNodes.split(",")); runBeforeConfig(esIndice); Job job = new Job(conf); ...중략... for ( String distJar : esDistributedCacheJars) { DistributedCache.addFileToClassPath( new Path(esDistributedCachePath+"/"+distJar), job.getConfiguration()); } ...중략... if ( "true".equalsIgnoreCase(esOptimize) ) { runOptimize(esIndice); } else { runRefreshAndFlush(esIndice); } runAfterConfig(esIndice, replica); }
  • 38. 3.1.Hadoop 통합 Indexing Java Client Application MapReduce public void map(Object key, Object value, Context context) throws Exception { ...중략... IndexRequest indexRequest = new IndexRequest(); indexRequest = indexRequest.index(esIndice) .type(esType) .source(doc); ...중략... bulkRequest.add (indexRequest); ...중략... bulkResponse = bulkRequest.setConsistencyLevel(QUORUM) .setReplicationType(ASYNC) .setRefresh(false) .execute() .actionGet(); ...중략... }
  • 39. 3.1.Hadoop 통합 Searching ElasticSearch Hadoop plugin Query request Integrate natively Java client application Query request
  • 40. 3.1.Hadoop 통합 Searching ElasticSearch Hadoop Plugin MapReduce public static class SearchMapper extends Mapper { @Override public void map(Object key, Object value, Context context) throws IOException, InterruptedException { Text docId = (Text) key; LinkedMapWritable doc = (LinkedMapWritable) value; System.out.println(docId); } } public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); ...중략... Job job = new Job(conf); ...중략... conf.set(ConfigurationOptions.ES_QUERY, "{ "query" : { "match_all" : {} } }"); job.setNumReduceTasks(0); boolean result = job.waitForCompletion(true); }
  • 41. 3.1.Hadoop 통합 Searching Java Client Application SearchResponse searchResponse; MatchAllQueryBuilder matchAllQueryBuilder = new MatchAllQueryBuilder(); searchResponse = client.prepareSearch(esIndice) .setQuery(matchAllQueryBuilder) .execute() .actionGet(); System.out.println(searchResponse.toString());
  • 42. 3.2.SQL on ElasticSearch ElasticSearch SQL 이란? 쉬운 접근성과 데이터 분석 도구를 제공한다. 표준 SQL 문법을 Query DSL로 변환한다. 표준 SQL 문법을 사용하여 검색엔진으로 CRUD 연산을 수행할 수 있다. JDBC drive와 CLI 기능을 제공하고 있다. Apache Tajo용 SQL analyzer를 사용하고 있다.
  • 43. 3.2.SQL on ElasticSearch ElasticSearch JDBC driver Client Application JDBC Driver Elastic Search SQL Analyzer Algebra Expression Query DSL Planner Query Execution SQL DSL
  • 44. 3.2.SQL on ElasticSearch ElasticSearch SQL Syntax Create database/table Drop database/table Select/Insert/Upsert/Delete Use database Show databases/tables Desc table
  • 45. 3.2.SQL on ElasticSearch ElasticSearch Analytics(Aggregations) SQL Min/max/sum/avg/stats/extended_stats Value_count/percentiles/cardinality Global_* Terms/range/date_range
  • 46. 3.2.SQL on ElasticSearch ElasticSearch SQL vs. Query DSL SQL Query DSL SELECT * FROM type_name LIMIT 0/10 "match_all": {} … “from” : 0, “size” : 10 SELECT field1, field2 FROM type_name WHERE search_field = ‘elasticsearch’ "term": { "search_field": { "value": "elasticsearch" } } … "fields": [ "field1","field2" ]
  • 47. 3.2.SQL on ElasticSearch ElasticSearch SQL vs. Query DSL SQL Query DSL SELECT * FROM type_name WHERE search_ field > ‘20140624235959’ ORDER BY search_field DESC "range": { "search_field": { "gt": "20140624235959" } } … "sort": [ { "search_field": { "order": "desc" } } ]
  • 49. 마무리 하며… ElasticSearch 이해 Lucene 기반의 분산 검색 엔진 ElasticSearch 성능 최적화 이해 정답은 없지만… 항상 좋은 장비에 최신버전을 사용한다. 확장 가능한 modeling과 sizing을 구성한다. 병목 구간을 항상 모니터링 한다. Query와 filter를 목적에 맞게 사용한다. Bulk API를 사용한다. ElasticSearch 빅데이터 활용 Hadoop과 SQL로 쉽게 분석도구로 활용한다.
  • 50. Q&A E-mail : sophistlv@gmail.com