Embulk에서 MySQL에서 ElasticSearch로 데이터를로드했습니다.

9615 단어 EmbulkElasticsearch
MySQL에 포함 된 시계열 데이터를 elasticsearch에 넣고 kibana로 시각화 할 때의 메모.

"elasticsearch MySQL"라든지 구구하면 JDBC river plugin을 사용할 수있는 기사가 나오는데, 분명히
이 river plugin은 deprecated가 된 것 같았다.

거기서 embulk를 사용해 보았지만, 생각 외에 빨리 생겼기 때문에 메모.

싹둑 외관





그런 느낌을합니다.

elasticsearch + kibana 설치



둘 다 다운로드하고 시작 프로그램 스크립트를 실행하기 만하면 즉시 작동하므로 자세한 내용은 홈 사이트를 참조하십시오.
elasticsearch는 Java로 작동하므로 Java 설치가 필요합니다. kibana는 노드에서 작동하지만 노드 자체가 포함되어 있으므로 신경 쓰지 않아도 작동합니다.

다운로드 사이트

Elasticsearch
키바나

Embulk 설정



Embulk는 다른 종류의 데이터 스토어간에 데이터를 잘 내보내고 가져오는 너 같은 것.
Fluentd와 같이 다양한 데이터스토어에 대응한 Plugin이 공개되어 있어 이들을 이용함으로써 다양한 조합의 데이터스토어간에 데이터를 이동할 수 있다.

Embulk

설치 및 설정은 다음을 참조했습니다. 매우 간단.

Scheduled bulk data loading to Elasticsearch + Kibana 4 from CSV 파일
# Embulkをグローバルにインストール
sudo wget http://dl.embulk.org/embulk-latest.jar -O /usr/local/bin/embulk
sudo chmod +x /usr/local/bin/embulk

Embulk에 Plugin 설치



위의 상태에서 mysql이나 elasticsearch를 다루는 Plugin은 포함되어 있지 않으므로 넣습니다. embulk 자체에 plugin을 관리합니다.
명령이 있기 때문에 이것을 사용하십시오.

# embulk pluginの確認
# embulk-input-mysql embulk-output-elasticsearchは最初は入ってない.
$ embulk gem list
2015-09-06 23:51:06.933 +0900: Embulk v0.7.4

*** LOCAL GEMS ***
jar-dependencies (0.1.15)
jruby-openssl (0.9.7 java)
json (1.8.0 java)
minitest (5.4.1)
power_assert (0.2.3)
psych (2.0.14.pre1 java)
rake (10.1.0)
rdoc (4.1.0)
test-unit (3.0.3)

# mysqlのinputプラグイン、elasticsearchのoutputプラグインをインストール.
$ embulk gem install embulk-input-mysql embulk-output-elasticsearch  
...

# 確認
$ embulk gem list
2015-09-06 23:51:06.933 +0900: Embulk v0.7.4

*** LOCAL GEMS ***

embulk-input-mysql (0.6.0)
embulk-output-elasticsearch (0.1.8)
jar-dependencies (0.1.15)
jruby-openssl (0.9.7 java)
json (1.8.0 java)
minitest (5.4.1)
power_assert (0.2.3)
psych (2.0.14.pre1 java)
rake (10.1.0)
rdoc (4.1.0)
test-unit (3.0.3)


대량 로드 실행



Embulk를 실행하려면 Input 플러그인과 Output 플러그인 구성 파일을 작성하십시오.
다음과 같은 config 파일을 작성한다. 특히 데이터 포맷의 변환이나 컬럼의 리네임은 하지 않고, 모든 데이터를 어리석게 elasticsearch에 넣는다.

config.yml
in:
    type: mysql
    host: $mysql_host
    user: $user
    password: $password
    database: $database
    query: |
        SELECT * FROM $table

out:
    type: elasticsearch
    index: test
    index_type: embulk
    nodes:
    - host: $elasticsearch_host

이것을 Embulk에 읽어들여 실행하면 O.K.

# ロードされるデータの確認.
$ embulk preview config.yml

# load 
$ embulk run config.yml 
2015-09-07 00:07:17.785 +0900: Embulk v0.7.4
2015-09-07 00:07:21.932 +0900 [INFO] (transaction): Loaded plugin embulk-input-mysql (0.6.0)
2015-09-07 00:07:22.825 +0900 [INFO] (transaction): Loaded plugin embulk-output-elasticsearch (0.1.8)
2015-09-07 00:07:22.959 +0900 [INFO] (transaction): Fetch size is 10000. Using server-side prepared statement.
2015-09-07 00:07:23.846 +0900 [INFO] (transaction): [Ms. MODOK] loaded [], sites []
2015-09-07 00:07:25.364 +0900 [INFO] (transaction): {done:  0 / 1, running: 0}
2015-09-07 00:07:25.388 +0900 [INFO] (task-0000): [Arkady Rossovich] loaded [], sites []
2015-09-07 00:07:25.625 +0900 [INFO] (task-0000): Fetch size is 10000. Using server-side prepared statement.
2015-09-07 00:07:25.650 +0900 [INFO] (task-0000): SQL: SELECT * FROM test

2015-09-07 00:07:25.664 +0900 [INFO] (task-0000): > 0.01 seconds
2015-09-07 00:07:26.065 +0900 [INFO] (task-0000): Fetched 500 rows.
2015-09-07 00:07:26.174 +0900 [INFO] (task-0000): Fetched 1,000 rows.
2015-09-07 00:07:26.188 +0900 [INFO] (task-0000): Execute 1000 bulk actions
2015-09-07 00:07:26.241 +0900 [INFO] (task-0000): Execute 71 bulk actions
2015-09-07 00:07:26.379 +0900 [INFO] (elasticsearch[Arkady Rossovich][transport_client_worker][T#6]{New I/O worker #15}): 71 bulk actions succeeded
2015-09-07 00:07:26.841 +0900 [INFO] (elasticsearch[Arkady Rossovich][transport_client_worker][T#5]{New I/O worker #14}): 1000 bulk actions succeeded
2015-09-07 00:07:26.954 +0900 [INFO] (transaction): {done:  1 / 1, running: 0}
2015-09-07 00:07:27.047 +0900 [INFO] (main): Committed.
2015-09-07 00:07:27.048 +0900 [INFO] (main): Next config diff: {"in":{},"out":{}}


다음 명령을 사용하여 Elasticsearch 측에 맵핑이 생성되었는지 확인하십시오.
curl -XGET 'http://$elastisearch_host/test?pretty'

그리고는 Kibana에 액세스하고 잠시 후 MySQL 내의 시계열 데이터를 깨끗한 그래프로 볼 수 있었다!



참고 : Elasticsearch Plugin에서 자동으로 Elasticsearch의 object id (_id)를 설정하는 것 같습니다. 배치 등으로 실행할 때는주의가 필요합니다.

좋은 웹페이지 즐겨찾기