'elasticsearch'에 해당되는 글 420건

  1. 2015.04.30 [Elasticsearch] NodeBuilder 이용 시 connection pool 주의.
  2. 2015.04.16 [Elasticsearch] Elasticsearch Reference 문서 정독 시작 합니다.
  3. 2015.03.27 [Elasticsearch] elasticsearch를 apache tajo의 external storage로 사용하기 3
  4. 2015.03.24 [Elasticsearch] document count 제한 사항.
  5. 2015.03.24 [Elasticsearch] 1.5.0 released 살펴보기.
  6. 2015.03.11 로그생성 프로그램 - makelogs
  7. 2015.03.09 실무 예제로 배우는 Elasticsearch 검색엔진(활용편) 2
  8. 2015.01.19 [Kibana] structured aggregation query...
  9. 2014.12.09 [Elasticsearch] SearchType.SCAN 기능 테스트
  10. 2014.12.05 [Elasticsearch] dynamic template 이란?

[Elasticsearch] NodeBuilder 이용 시 connection pool 주의.

Elastic/Elasticsearch 2015. 4. 30. 18:58

별건 아니고 간혹 실수 하는 경우가 있어서 잊지 않기 위해 적어 봅니다.

 그 동안 TransportClient 만 이야기 한것 같아 NodeBuilder 사용 시 주의해야 하는 점을 공유해 봅니다.


NodeBuilder는 응용프로그램을 통한 자체 Cluster 환경 구성이나 Client 노드를 구성하는데 아주 유용합니다.

또한 TestCode 작성 시 프로그램적으로 Elasticsearch Mini Cluster 구성을 하기도 쉽죠.


오늘 공유하는 내용은 NodeBuilder 이용 시 connection pool 설정을 할 때 size 를 잘못하는 오류에 대해서 입니다.


[소스코드 : NettyTransport.java]

// we want to have at least 1 for reg/state/ping

if (this.connectionsPerNodeReg == 0) {

    throw new ElasticsearchIllegalArgumentException("can't set [connection_per_node.reg] to 0");

}

if (this.connectionsPerNodePing == 0) {

    throw new ElasticsearchIllegalArgumentException("can't set [connection_per_node.ping] to 0");

}

if (this.connectionsPerNodeState == 0) {

    throw new ElasticsearchIllegalArgumentException("can't set [connection_per_node.state] to 0");

}


위 코드를 보면 명확 합니다.

적어도 1 이상 설정을 해주셔야 한다는 이야기 입니다.

가끔 TestCode 작성 시 너무 많은 Thread의 생성과 리소스를 낭비하게 하는 원이이 될 수도 있으니 참고 하셔서 사용 하시면 좋을 것 같습니다.


위 설정에서 node.local 이 true 로 설정 되어 있다면 당연히 모두 0 으로 설정 하셔도 됩니다.

:

[Elasticsearch] Elasticsearch Reference 문서 정독 시작 합니다.

Elastic/Elasticsearch 2015. 4. 16. 14:12

그 동안 Elasticsearch가 많이 업그레이드 되면서 API 동작 방식이나 내용이 변경 되었는데요. 한 동안 공부를 소홀히 한 것 같아 오늘 부터 정독해 볼까 합니다.


정독의 시작점은 

http://www.elastic.co/guide/en/elasticsearch/reference/current/index.html

부터 시작 합니다.


Elasticsearch를 처음 시작하시는 분들은 꼭 저와 같이 정독후 입문 하시면 더 멋지게 사용하실 수 있을거라 생각됩니다.

:

[Elasticsearch] elasticsearch를 apache tajo의 external storage로 사용하기

Elastic/Elasticsearch 2015. 3. 27. 00:26


지난 주 부터 작업하던게 있는데요.

아직 어찌 될지는 알수 없지만 일단 안되더라도 필요하신 분들이 있을지 몰라 공유해 봅니다.


https://issues.apache.org/jira/plugins/servlet/mobile#issue/TAJO-1451


내용은 apache tajo에 external storage로 elasticsearch를 이용할수 있도록 컨트리븃 하고 있습니다.


정리하면 이런게 가능 합니다.

1. Sql을 이용한 elasticsearch index 질의 (ansi sql fully support 됩니다.)

2. Hdfs 나 기타 tajo 에서 지원하는 다양한 스토리지 데이터와 조인 (최근 1.5에서 inner hits가 추가 되었지만 비교할바가 안됩니다.)

3. 기타 다양한 활용도 가능 하겠죠. (상상력을 발휘하세요.)


뭐 최종 커밋이 안되더라도 제가 테스트 해보니 매우 유용해 보입니다. ^^


많은 분들이 데뷰에서 보여드린 es jdbc 드라이버를 원하실텐데요. 일단 이걸로 대리 만족 하심 어떨까해서 공유해 봅니다.

:

[Elasticsearch] document count 제한 사항.

Elastic/Elasticsearch 2015. 3. 24. 16:30

Apache Tajo 프로젝트에 external storage 로 elasticsearch 를 사용할 수 있도록 작업 중에 있습니다.

작업을 하다 보니 빅데이터를 처리 하기에 약간의 문제점(?)이 보여서 기록해 봅니다.


우선 빅데이터라고 하면 용량, 크기 말고 row 수로 이야기 하면 몇 십억건이 넘어 가는 경우가 많을 거라고 생각 합니다.

뭐 몇 천만건 가지고 빅데이터라고 요즘 하지는 않으니까요.


암튼 여기서 문제는 이 수십억건에 달하는 문서 수 인데요.

뭐 elasticsearch 를 사용하면서 단일 샤드에 수십억건을 넣어 놓고 사용하는 것 자체가 모델링이나 설계를 잘 못했다고 하는게 맞을 것 같습니다.

그럼에도 불구하고, elasticsearch 에서 질의 시 from 과 size 파라미터가 있습니다.


이것들의 데이터 형이 int 형입니다.

딱 감이 오시죠.


[SearchSourceBuilder.java]

public class SearchSourceBuilder implements ToXContent {

..........

    private int from = -1;

    private int size = -1;

..........

}


코드에 int 형으로 선언된 것을 확인 할 수 있습니다.

꼭 이게 문제라기 보다 apache tajo external storage 로 작업을 하다 보니 약간의 문제 처럼 느껴지기도 해서 기록해 봤습니다.

:

[Elasticsearch] 1.5.0 released 살펴보기.

Elastic/Elasticsearch 2015. 3. 24. 10:35

3월 23일 릴리즈 되었내요.

https://www.elastic.co/blog/elasticsearch-1-5-0-released


가장 눈에 띄는 기능은 블로그에도 있지만 아래 두 개 기능 입니다.


1. Inner hits

기존에 has_child query 사용 시 불편했던 점을 개선한 내용입니다.

이걸 통해서 join 기능 구현이 좀 더 편해 졌습니다.


old)

has_child query 사용 시 parent document 결과만 나와서 child document 에 대해서는 추가 질의를 해야만 했습니다.


new)

has_child query  사용 시 inner_hits 파라미터 추가로 parent document 와 child document 가 함께 결과로 리턴 됩니다.


좀 더 자세한 내용은 아래 문서 참고 하세요.

http://www.elastic.co/guide/en/elasticsearch/reference/1.5/search-request-inner-hits.html



2. Shadow replica

Shared file system 을 이용해서 shard 에 대한 추가 저장 이나 색인 작업을 하지 않고 노드 추가만으로 검색 처리 성능을 향상 시킬수 있는 방법 입니다.

shadow replica 는 기본 read-only 이며 기본 개념은 view 와 비슷 하다고 생각 하시면 됩니다.


검색 성능을 높이고 싶다면 사용해 보는 것도 좋을 것 같내요.


좀 더 자세한 내용은 아래 문서 참고 하세요.

http://www.elastic.co/guide/en/elasticsearch/reference/1.5/indices-shadow-replicas.html



그 이외 많은 개선 사항들이 있는데 그건 블로그 원문을 보시면 될 것 같습니다.

:

로그생성 프로그램 - makelogs

Elastic/Logstash 2015. 3. 11. 16:35

logstash에서 제공하는 generator가 쓸만하지 않아서 아래 도구 사용합니다.


[링크]

https://www.npmjs.com/package/makelogs


to install

npm install -g makelogs
makelogs --count=10m --days=-2,+10


[Command Help]

jeong-ui-MBP:makelogs hwjeong$ makelogs --help

A utility to generate sample log data.


Usage: makelogs [options]


Options:

  --count, -c     Total event that will be created, accepts expressions like "1m" for 1 million (b,m,t,h)       [default: 14000]

  --days, -d      The number of days ± today or two numbers, seperated by a comma, like "-1,+10" or "-10,+100"  [default: 1]

  --host, -h      The host name and port                                                                        [default: "localhost:9200"]

  --auth          user:password when you want to connect to a secured elasticsearch cluster over basic auth     [default: null]

  --shards, -s    The number of primary shards                                                                  [default: 1]

  --replicas, -r  The number of replica shards                                                                  [default: 0]

  --dry           Test/Parse your arguments, but don't actually do anything                                     [default: false]

  --help          This help message

  --reset         Clear all logstash-* indices before genrating logs

  --verbose       Log more info to the console

  --trace         Log every request to elastisearch, including request bodies. BE CAREFULL


[예제]

makelogs -c 100 -d 0 -h localhost:9200 -s 1 -r 0 --reset

makelogs -c 100 --days=-1,+1 -h localhost:9200 -s 1 -r 0 --reset


설명) -d 0 는 오늘 날짜 기준으로 데이터 생성

logstash-20150311


설명) --days=-1,+1 은 오늘 날짜 기준으로 앞뒤로 하나씩 인덱스를 더 생성

logstash-20150310

logstash-20150311

logstash-20150312

:

실무 예제로 배우는 Elasticsearch 검색엔진(활용편)

Elastic/Elasticsearch 2015. 3. 9. 18:43

4월에 종이책이 나옵니다.

그리고 책에 대한 부족한 부분이나 틀린 내용들에 대해서는 지속적으로 업데이트 하도록 하겠습니다.

블로그와 페북 커뮤니티를 통해서 제가 도움 드릴 수 있는 부분들은 열심히 지원도 하겠습니다.


감사합니다.


책소개

eBook & DRM-free

쉽고 빠르게 배울 수 있는 Elasticsearch 검색엔진 활용서


전작인 『실무 예제로 배우는 Elasticsearch 검색엔진 <기본편>』에서는 Elasticsearch의 기본 개념과 설치 방법, 검색서비스 구성을 다뤘고, 이번 <활용편>에서는 <기본편>에서 다루지 못한 확장 기능과 다양한 서비스의 활용 방법, Elasticsearch의 성능 최적화 방법을 소개한다.


검색엔진을 이용한 다양한 기술과의 접목과 활용, 사용자 정의 기능을 구현해서 적용할 수 있는 플러그인 구현 방법까지 Elasticsearch를 적극적으로 활용할 수 있는 방법을 보여주며, 기본적인 성능 최적화 방법과 가이드를 제공하여 대용량 트래픽의 처리와 안정성을 확보하는 데 도움을 줄 수 있도록 구성되어 있다.


이 책은 설치와 구성 등 기본적인 내용은 다루지 않으므로 Elasticsearch의 기본 내용을 알고 싶다면 『실무 예제로 배우는 Elasticsearch 검색엔진(기본편)』(한빛미디어, 2014)이 더 적합하다. 


대상 독자

  • 검색 서비스 개발에 관심 있는 기획자 또는 개발자
  • 상용 검색엔진을 오픈 소스 검색엔진으로 대체하길 원하는 서비스 관리자 또는 개발자
  • Elasticsearch의 고급 기능과 성능 최적화 등 활용 방법을 자세히 알고 싶은 개발자
맨위로

저자소개

[지은이] 정호욱

지난 13년 동안 야후코리아, NHN Technology, 삼성전자에서 커뮤니티, 소셜 검색, 광고 검색 관련 서비스를 개발해 오면서 검색엔진을 활용한 다양한 프로젝트를 수행하였다. 현재 빅 데이터 전문 기업인 그루터에서 오픈 소스 기반 검색엔진 개발자로 근무하고 있다. elasticsearch 기술에 대한 정보와 경험을 현재 개인 블로그(http://jjeong.tistory.com)를 통해 공유하고 있다.



맨위로

목차

chapter 1 검색 기능 확장 
    1.1 자동 완성 
    1.2 Percolator 
    1.3 Join 
    1.4 River 
    1.5 정리 


chapter 2 검색 데이터 분석
    2.1 Bucket Aggregation
    2.2 Metric Aggregation 
    2.3 정리 


chapter 3 Plugin
    3.1 Plugin 제작 
    3.2 REST Plugin 만들기 
    3.3 Analyzer Plugin 만들기 
    3.4 정리 


chapter 4 Hadoop 연동 
    4.1 MapReduce 연동 
    4.2 Hive 연동 
    4.3 정리 


chapter 5 ELK 연동 
    5.1 Logstash 
    5.2 Elasticsearch 
    5.3 Kibana 
    5.4 정리 


chapter 6 SQL 활용하기
    6.1 RDB 관점의 Elasticsearch 
    6.2 SQL 정의하기 
    6.3 SQL 변환하기 
    6.4 JDBC Driver 만들기 
    6.5 정리 


chapter 7 Elasticsearch 성능 최적화 
    7.1 하드웨어 관점 
    7.2 Document 관점 
    7.3 Operation 관점 
    7.4 정리 


:

[Kibana] structured aggregation query...

Elastic/Elasticsearch 2015. 1. 19. 12:53

한줄 정리)

- sub aggregation 과 같은 복잡한 분석 질의는 3.x에서 지원 되지 않으며, 4.x에서 지원 된다.


kibana를 많이 사용하시는 분들은 잘 아실 것 같습니다.

kibana 3.x 까지는 sub aggregation과 같은 좀 복잡한 aggregation 을 사용할 수 없었습니다.

저도 3.x를 가지고 구성을 하려다 보니 막혀 버리더라구요.

그래서 복잡한 aggregation 질의를 사용하고자 한다면 kibana 4.x 로 올려서 사용하시면 될 것 같습니다.

아직은 베타 버전이긴 하지만 조만간 베타 딱지 떼지 않을까 싶내요.


아래는 kibana 3.x에서 제공하고 있는 aggregation 종류 입니다.



여기 보여 지는걸 저도 다 사용은 안해봤구요.

가장 많이 사용하는게 아마도

- column

- histogram

- stats

- terms

정도가 아닐까 합니다. (아닐 수도 있구요. ^^;)


여기서 테스트 하던 것 중 trends panel type은 더 이상 사용되지 않는 것 같습니다.

4.x 에서는 아예 빠졌으니까요.

:

[Elasticsearch] SearchType.SCAN 기능 테스트

Elastic/Elasticsearch 2014. 12. 9. 18:58

일단 가볍게 코드 부터 keeping 합니다.


     SearchResponse searchResponse = client.prepareSearch(INDICE_NAME)

                .setSearchType(SearchType.SCAN)

                .setQuery(new MatchAllQueryBuilder())

                .setSize(FETCH_SIZE)

                .setScroll(TimeValue.timeValueMinutes(10))

                .execute().actionGet(TimeValue.timeValueMinutes(10));


        while (true) {

            searchResponse = client.prepareSearchScroll(searchResponse.getScrollId()).setScroll(TimeValue.timeValueMinutes(10)).execute().actionGet(TimeValue.timeValueMinutes(10));

                    

            if (searchResponse.getHits().hits().length == 0) {

                break;

            }

        }


뭐 간단 합니다.

shard 별로 FETCH_SIZE 만큼씩 요청시 데이터를 가져 오는 로직 입니다.

기타 응용이나 자세한 설명은 다음에.. ^^


로직만 확인하세요.

:

[Elasticsearch] dynamic template 이란?

Elastic/Elasticsearch 2014. 12. 5. 11:12

Elasticsearch에서 제공하는 편리한 기능 중 하나 입니다.

이해하기 위해서는 dynamic mapping 부터 보고 들어 가셔야 합니다.


[원본 링크]

Dynamic mapping

- http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/dynamic-mapping.html


☞ 간단 설명

색인 필드의 데이터에 대한 data type을 지정하지 않고 동적으로 elasticsearch 에서 적절한 type을 지정해 주는 기능 입니다.


예) 

field1:"1" 은 string 으로

field2: 1   은 long 으로 type 맵핑이 됩니다.


그럼 dynamic template 에 대해서 알아 보겠습니다.

elasticsearch에서는 customizing dynamic mapping 하위에 subset으로 기술 되어 있습니다.


[원본 링크]

Dynamic template

- http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/custom-dynamic-mapping.html#dynamic-templates


dynamic template 이란?

이 기능은 말 그대로 type mapping 을 사전에 기술해 놓지 않고 동적으로 dynamic mapping에 의해 정의 되는 시점에 동적으로 구성을 하게 되는 내용입니다.


쉽게 말해 mapping type을 미리 선언하지 않고 패턴이나 분석 특성에 맞춰 구성하게 되는 것입니다.

주로 사용하는 경우는 대략 2 가지 정도로 보입니다.


1) 같은 유형의 indice/type을 time series 로 생성 및 관리 할 때 매번 만들지 않고 자동으로 mapping 생성을 하고자 할때.

2) 특정 조건 또는 패턴에 일치하는 field에 대해 자동으로 mapping 속성을 지정하고자 할때.


[_default_]

- 이 type이 dynamic template의 기본 type이 됩니다.

- 별도 구성 없이 동적으로 type을 생성하게 되면 이 정보를 기준으로 mapping type 정의가 됩니다.


내부 properties 설명은 elasticsearch 샘플 자료로 설명을 하겠습니다.


PUT /my_index
{
   
"mappings": {
       
"my_type": {
           
"dynamic_templates": [
               
{ "es": {
                     
"match":              "*_es",
                     
"match_mapping_type": "string",
                     
"mapping": {
                         
"type":           "string",
                         
"analyzer":       "spanish"
                     
}
               
}},
               
{ "en": {
                     
"match":              "*",
                     
"match_mapping_type": "string",
                     
"mapping": {
                         
"type":           "string",
                         
"analyzer":       "english"
                     
}
               
}}
           
]
}}}

- "my_type" 기본 type 이외 사용자가 정의한 type에도 dynamic template 설정이 가능 합니다.

- "match" 는 field에 대한 동적 매칭을 정의 하는 것이며, 패턴 사용이 가능 합니다. 예제에서는 field 명에서 _es 로 끝나는 모든 필드를 의미 합니다.

- "match_mapping_type"은 dynamic mapping 을 통해서 지정된 type 이 뭔지 확인 하는 것입니다. 예제에서는 string 으로 mapping 된 것을 의미 하며, "match"와 함께 해석을 해야 합니다. 즉, *_es 필드명 이어야 하고 string type이면 아래 mapping 정보를 가진다는 의미가 됩니다.

- "mapping"은 type mapping 시 각 field 에 속성을 정의 하게 됩니다. 이 정의 하는 부분에 대한 값을 설정하게 됩니다.


전체적으로 위 예제의 의미는 모든 문자열 필드에 대한 형태소분석기는 english를 적용하고, 필드명에 _es 가 들어간 문자열 필드에 대해서는 형태소분석기로 spanish를 적용하라는 것입니다.


dynamic template 과 mapping 기능은 매우 유용하게 활용이 가능 합니다.

이해 하시는데 도움이 되면 좋겠내요.



: