elasticsearch(6.3.0)+kibana(6.3.0)를 windows 환경에서 실행

소개

나도 세상의 이케하고 있는 엔지니어처럼 빅데이터를 가시화해 도야 얼굴하고 싶다! … 그래서 친구로부터 가르쳐 주신 elasticsearch와 kibana를 헵포코 엔지니어가 로컬 환경에서 작동 할 때까지의 메모

환경

Windows 10 Home 1803 elasticsearch 6.3.0 kibana 6.3.0 curl 7.61.0

이번 테스트에 사용할 데이터

각 가정이나 공장 등의 전력 소비량을 모은 데이터 세트 htps : // 아 r ゔ ぇ. 이 cs. 우시. 에즈 / ML / 어리석은 ts / e ct 리시 ty ぉ 아 ぢ 아 g ms20112014

특징

데이터 취득 기간: [2011/1/1, 2015/1/1] 측정결측값은 존재하지 않음 기간 중에 이용 개시·종료가 있는 경우, 측정값은 0으로 표시된다

데이터 형식

CSV 형식 열 구분 기호: semicolon (;) 소수점 구분 기호: colon (,) (포르투갈에서는 이것이 표준 인 것 같습니다) 첫 번째 열: 데이터 획득 시간(15분 간격) 두 번째 열에서: 전력 소비(kW)

설치

자바


windows 환경이므로 zip을 선택

elasticsearch는 Java로 만들어져 JRE 설치 java version "1.8.0_171" Java(TM) SE Runtime Environment (build 1.8.0_171-b11) Java HotSpot(TM) 64-Bit Server VM(build 25.171-b11, mixed mode) 설정하지 않으면 JAVA_HOME을 환경 변수로 설정 C:\Program Files\Java\jre1.8.0_171(설치한 위치 지정) elasticsearch와 kibana

elasticsearch
windows 링크를 클릭하여 zip 다운로드

kibana

시작

htps //w w. 에 s c. 코 / 도 w 응 아 ds / 에 s s

  • 위의 URL에 액세스하여 버전 정보가 포함 된 JSON이 출력되면 OK
  • kibana
    htps //w w. 에 s c. 코 / Down A ds / Kibana
    위의 URL에 액세스하여 화면이 표시되면 OK

  • elasticsearch는 다음 배치 파일을 시작합니다. elasticsearch-6.3.0\bin\elasticsearch.bat kibana는 다음 배치 파일을 시작합니다. kibana-6.3.0-windows\bin\kibana 이번에는 다음과 같은 배치 파일을 작성하여 하나로 정리합니다. start elasticsearch-6.3.0\bin\elasticsearch start kibana-6.3.0-windows\bin\kibana

    실행 중인지 확인

    curl elasticsearch

    http://localhost:9200/

    http://localhost:5601/

    이번은 벌써 들어가 있던 것을 사용(샀던지의 Windows기인데 왜?) curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL Release-Date: [unreleased] Protocols: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp Features: AsynchDNS IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL

    데이터 삽입



    데이터 시각화

    색인 생성 우선은 index를 작성(MySQL로 말하는 곳의 데이타베이스) ?pretty를 붙이면 개행이있는 json이 돌아옵니다. curl -XPUT "localhost:9200/electric_power?pretty" 색인이 만들어졌는지 확인 curl -XGET "localhost:9200/_cat/indices?v" 방문하면 kibana 홈 화면이 표시됩니다.
    왼쪽 메뉴에서 visualize 메뉴를 클릭하십시오.
    index pattern에 electric_power를 입력하고 Next Step 버튼을 누르면
    뭔가 그래프를 할 수 있어야합니다.
    …라고 생각했지만 뭔가 잘 가지 않는다. (예쁘다)

    json 만들기

    elasticsearch의 BulkAPI로 로드하려면 다음과 같이 데이터를 2행 1조의 json으로 변환합니다. ID를 지정하지 않으면 적절한 고유 ID가 부여됩니다. { "index" : { "_index" : "(삽입하고 싶은 index)", "_type" : "(삽입하고 싶은 type)", "_id" : "(유일한 id)" } } {(실제 데이터 json)} 이번에는 파이썬을 사용하여 json으로 변환 #!/usr/bin/env python3 # -*- coding: utf-8 -*- import csv import json PATH = './dataset.txt' JSON_BASE_NAME = './dataset' def main(): with open(PATH, mode='r', encoding='utf-8', newline='') as f: dialect = csv.Sniffer().sniff(f.readline(), delimiters=';') f.seek(0) reader = csv.reader(f, dialect) header = reader.__next__() header[0] = "datetime" file_num = 0 writer = open(JSON_BASE_NAME + '_' + str(file_num) + '.json', mode='w', encoding='utf-8') line_num = 0 for line in reader: line_num = line_num + 1 writer.writelines(json.dumps({'index': {'_index': 'electric_power', '_type': 'portugal'}})) writer.writelines('\n') line_dict = make_line_dict(header, line) writer.writelines(json.dumps(line_dict)) writer.writelines('\n') # 큰 파일이므로 파일 분할 if line_num >= 1000: line_num = 0 file_num=file_num+1 writer.close() writer = open(JSON_BASE_NAME + '_' + str(file_num) + '.json', mode='w', encoding='utf-8') writer.writelines('\n') writer.close() def make_line_dict(header, line): line = list(map(lambda l: l.replace(',', '.'), line)) line[1:] = list(map(lambda val: float(val), line[1:])) line_dict = dict(zip(header, line)) return line_dict if __name__ == '__main__': main() elasticsearch에 투입
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    import os
    
    # ファイルの個数
    FILE_NUM = 141
    
    
    def main():
        for i in range(FILE_NUM):
            cmd = 'curl --noproxy localhost -H "Content-Type: application/json" ' \
                  '-XPUT localhost:9200/_bulk --data-binary @dataset_' + str(i) + '.json'
            print(cmd)
            os.system(cmd)
    
    
    if __name__ == '__main__':
        main()
    

    아무래도, 디폴트라고 시각 필드가 text로서 취급되고 있는 것이 원인과 같이

    매핑 확인 변환한 json을 BulkAPI로 투입. (데이터가 너무 커서 덧붙여서 Elasticsearch6 계에서 Content-Type 헤더가 필수인 것 같습니다. 나는 여기에서 빠졌습니다. (반길레) ~약 ~ "datetime" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } } ~약 ~

    이하에 액세스하면 넣은 데이터를 확인할 수 있다. http://localhost:9200/electric_power/_search?pretty

    매핑 변경

    데이터가 elasticsearch에 포함되었으므로 표시 할 수 있어야합니다. http://localhost:5601/ 방문하면 kibana 홈 화면이 표시됩니다.
    왼쪽 메뉴에서 Discover 메뉴를 클릭하십시오.index patternelectric_powerTime Filter field namedatetime 를 선택하고 Next Step 버튼을 클릭
    다시 Discover 메뉴를 클릭하면…



    했다~~~~

    결국 elasticsearch는 아무것도하지 않고 필드 유형을 정의하는 것 같습니다. 다음 URL에 액세스하여 기본 유형을 확인하십시오.

    http://localhost:9200/electric_power/_mapping?pretty

    시간으로 취급하고 싶기 때문에, 자동 생성된 매핑의 datetime의 정의를 이하와 같이 수정 { "mappings" : { "portugal" : { "properties" : { "MT_001" : { "type" : "float" }, "MT_002" : { "type" : "float" }, ~약 ~ "datetime" : { "type" : "date", "format" : "YYYY-MM-dd HH:mm:ss" } } } } } 다음 명령으로 정의한 매핑 등록 curl -XDELETE "localhost:9200/*" curl -H "Content-Type: application/json" -XPUT localhost:9200/electric_power --data-binary @mapping.json

    다시 액세스하여 의도한 정의가 되었는지 확인

    http://localhost:9200/electric_power/_mapping?pretty

    다시 데이터를 elasticsearch에 입력 http://localhost:5601/

    좋은 웹페이지 즐겨찾기