Big Data: 78개의 글
다른 모든것처럼 "얼마나 빠른가?"라는 질문에 대한 대답은 유스케이스, 하드웨어, 설정에 따라 달라진다. 유스케이스에 맞게 엘라스틱서치의 성능을 극대화할 수 있도록 설정하는 방법에 대해 알아보자. 언제나 성능 향상에는 상응하는 대가가 따른다. 따라서 먼저 무엇을 희생할지를 결정해야 한다. 애플리케이션 복잡도 - 어떻게 다수의 요청(색인, 갱신, 삭제, 조회, 검색 등의 요청)을 하나의 HTTP 요청으로 그룹화하는지에 대해 살펴본다. 이 그룹화는 때로는 애플리케이션에서 경계해야 할 때도 있지만, 전반적인 성능을 획기적으로 끌어올릴수 있는 방법이기도 하다. 네트워크 오버헤드가 더 적기 때문에 20~30배의 성능 향상을 기대할 수 있다.색인과 검색 중 어느 것의 성능에 초점을 맞출 것인가 - 엘라스틱서치가 루..
엘라스틱서치의 집계는 검색과 일치하는 문서를 적재하고, 문자 필드의 단어를 세거나, 숫자 필드의 평균을 구하는 것과 같은 계산 업무를 해결할 수 있다. 집계가 동작하는 걸 보기 위해, 예시를 확인한다. 사용자는 태그를 선택할 수 있고 선택된 태그에 포함되는 문서를 필터할 수 있다. 이것은 사용자가 자신의 관심 그룹을 쉽게 찾을 수 있도록 한다. 엘라스틱서치에서 인기있는 태그 목록을 얻으려면, 집계를 사용하면 된다. 이 경우에 텀즈 집계를 태그 필드에 사용하여 필드에서 단어의 발생을 계산하고 가장 많이 반복되는 단어를 돌려보내면 된다. facet은 무엇인가?루씬, 솔라 또는 엘라스틱서치를 써본 경험이 있다면, facets을 들어봤을 것이다. facets은 집계와 유사하다. 이것도 질의에 일치하는 문서를 적..
문서의 구조가 정형화되지 않은 환경에서 다양한 저장소와 검색엔진이 검색조건에 맞는 문서를 찾을 수 있다. 엘라스틱 서치가 "SELECT * FROM users WHERE name LIKE 'bob%'"이라는 질의와 갖는 차이점은 관련 있는 문서를 점수를 통해 묶어주는 기능이다. 이 점수로부터 찾고자 하는 질의와 문서가 얼마나 관련있는지 알 수 있다. 사용자가 웹사이트 검색창에 입력하는 검색어는 입력한 검색어에 꼭 맞는 것뿐만 아니라, 유사한 것들도 같이 보기를 원한다. 알려진 대로 엘라스틱서치는 문서의 연관성을 결정하는데 유연성을 가지고 있고, 관련성 높은 결과를 얻기 위하여 사용자가 검색을 정의하는 많은 방법이 있다. 문서가 질의에 얼마나 잘맞는지 특별히 고려하지 않고 단지 문서가 일치하는지 안하는지 ..
엘라스틱서치에 데이터를 전송할때 실제 무슨일이 일어날까? 도큐먼트에서 텍스트를 엘라스틱서치로 전송하면 어떤 일이 발생할까? 엘라스틱서치는 대소문자가 변경될 때조차 문장 내에서 어떻게 특정 단어를 찾을 수 있을까? 엘라스틱서치의 분석이 더 유연한 방식으로 도큐먼트 집합을 검색하도록 하는지 알아보자. 분석은 엘라스틱서치가 도큐먼트를 역색인에 추가되도록 전송하기 전에 도큐먼트 본문에서 수행하는 과정이다. 엘라스틱서치는 도큐먼트가 색인에 추가되기 전에 모든 문석된 필드를 위해 수많은 단계를 거친다.문자 필터링 - 문자 필터를 이용해서 문자들을 변환한다.텍스트를 토큰으로 분해 - 텍스트를 한 개 이상의 토큰의 집합으로 분해한다.토큰 필터링 - 토큰 필터를 사용해서 개별 토큰을 변환한다.토큰 색인 - 토큰을 색인에..
엘라스틱서치는 루씬 검색 기능을 모두 사용해서 데이터를 검색할 수 있도록 풍부한 API를 제공한다. 엘라스틱서치는 그 형식 덕분에 다양한 조합으로 검색 요청을 만들 수 있다. 데이터에 사용할 적절한 필터 조합 쿼리를 찾는데 가장 나은 방법은 시험해보는 것이다. 프로젝트 데이터에서 원하는 가장 적합한 것을 찾기 위해 여러가지 조합을 시도해보는 것이 가장 중요하다. 검색 요청과 검색 요청의 결과가 일반적으로 어떻게 보여질까?검색 API의 주요 구성 요소 중 하나인 쿼리와 필터 DSL를 알아본다.필터와 쿼리에 사용하는 가장 일반적인 방법 / 쿼리와 필터의 차이점엘라스틱서치가 도큐먼트의 점수를 어떻게 계산할까?REST API 검색 요청은 처음 접속하려고 선택한 노드에 전송되고 검색 요청을 모든 샤드(주 또는 레..
ETL이라는 것은 데이터를 추출, 변확하고 저장소에서 읽게하는 스텝을 뜻한다. 데이터 분석 시스템의 운영에서 가장 중요한 것은 ETL 각각이 정상적으로 동작하는 것이다. Fluentd로 스트림처리에 있어서 ETL을 담당하는 툴인 것이다. ExtractExtract는 데이터 추출의 스텝이다. Fluentd에서는 Input계의 플러그인에 해당한다. 예를 들어 파일이나 HTTP 요청을 소스로 해서 추출할 수 있다. 로그 파일의 경우 파일을 받은 뒤에 각 행이 어떤 데이터를 가지고 있는지를 파악하는게 이 스텝의 역할이다. Nginx의 액세스 로그를 받는 예시에서는 각 필드의 값을 Fluentd가 식별해서 읽는다. TransformTransform은 데이터 변환을 위한 스텝이다. 추출된 데이터를 저장소에 저장하기..
분석 기반을 만든다는 것은 분석에 의한 결과를 지속적으로 만들어 내기 위한 구조를 만드는 것이다. 분석이라는 것은 현황을 확인하고, 비즈니스적인 의사결정을 하는 것이다. 의사결정을 위해서 분석을 하는 것이다. 데이터 분석 기반은 그 의사결정을 장기적으로 지원하기 위해 설계해야 한다. [수집]: 어떤 데이터를 모을 것인가. 어떤 데이터를 보관할 것인가. [변환]: 데이터를 어떻게 전처리해서 분석하기 쉬운 형태로 바꿀 것인가. [보존]: 데이터를 어디에 저장할 것인가. [분석]: 어떤 기반에 넣어서 데이터를 분석하고 활용할 것인가. 데이터를 넣는 것 뿐만 아니라 분석을 위한 좋은 환경을 만들기 위해서 어떻게 해야할까. [표시]: 어떻게 데이터를 시각화하고, 결과를 전달할까. [운영]: 데이터를 분석하기위한 ..
엘라스틱 서치는 실시간 검색을 제공하면서 집계 기능을 제공하고, 시스템 확장에도 용이하여 로그 시스템 개발에 활용하기 적합하다. 결과에 대한 통계를 제공해서 사용자가 흥미를 느끼는 것에 대해 범위를 좁혀 갈 수 있어야 한다. 데이터 검색을 위해서는 몇가지 이슈를 다루어야 한다. 관련 검색 결과를 내놓고, 통계를 제공하고, 빠른 처리 속도가 필요하다. 이러한 경우 엘라스틱서치와 같은 검색엔진을 사용하는 것이 적합하다. 관계형 데이터베이스 위에 검색엔진을 배포해서 색인을 생성하고 SQL 질의 속도를 올릴 수 있다. 검색 기능을 추가하기 위해서 NoSQL 저장소의 데이터 색인을 만들 수 있는데, 엘라스틱서치에서 모두 사용 가능한 기능이다. 앨라스틱서치 클러스터를 색인/검색/관리 하기 위해 데이터를 JSON 형..
예전에는 여러대의 장비에서 데이터 필터링/서칭 등이 필요하면, 큰 하나의 파일을 n개로 나눠서 n개의 장비에 두고, 각 장비별로 filter/grep/join 등의 작업을 수행하는 방식이였다. (데이터가 있는 장비에서 필요한 작업은 데이터있는 장비에서 수행) 이런 경우. 장비에 장애가 났을때 원상태로 복원하는데까지 시간이 오래걸릴 수 밖에 없었다. 데이터 복사, 작업을 위한 데이터 정제. (MTTR 시간 지연) 현재는 계산 노드가 데이터를 갖고있는것이 아니라 각 노드가 무슨일을 하고 있는지 일을하는데 필요한 데이터를 그때그때 fetch하는 방식이다. 따라서 장애가 나더라도 장애난 노드의 역할을 다른 노드의 위임하는 방식으로 MTTR에 대한 이슈를 해결했다. 이를 내결함성(fault-tolerance)라고..
ElasticSearch에서의 검색은 인덱스/타입 단위로 수행됨. Document는 그 자체가 1개의 최소 데이터 단위이므로 Document 단위로 검색한다는 것은 불가능. 클러스터의 모든 인덱스는 _all 로 검색 가능. $ curl 'localhost:9200/_all/_search?q=time&pretty' ElasticSearch URI 검색 q(query)특정 필드만 검색하려면 q 매개변수에 필드명:질의어 형식으로 값을 일력한다. title 필드에서 검색어 time을 검색하는 명령 $ curl 'localhost:9200/_search?q=title:time&pretty' $ curl 'localhost:9200/_search?q=title:time%20AND%20machine&pretty' d..