[Embulk] MySQLからElasticSearchへデータ投入

環境

  • Elasticsearch6.2.3 (バージョン5でも動作しました)
  • Java8

Embulkのインストール

$ curl --create-dirs -o ~/.embulk/bin/embulk -L "https://dl.embulk.org/embulk-latest.jar"
$ chmod +x ~/.embulk/bin/embulk
$ echo 'export PATH="$HOME/.embulk/bin:$PATH"' >> ~/.bashrc
$ source ~/.bashrc

確認

$ embulk -version
embulk 0.9.5

プラグインインストール

作業用にembulkディレクトリを作ります。

$ mkdir embulk
$ cd embulk
$ embulk mkbundle plugins

embulk/plugins/Gemfile に以下を追記します

gem 'embulk-input-mysql'
gem 'embulk-output-elasticsearch_ruby'

インストール

$ cd plugins/
$ embulk bundle --path=vendor/bundle

環境変数の設定

(面倒な方は後述するデータ投入用ymlに直接書いても大丈夫です)
embulk/.envファイルを作成します。

$ cd ..
$ vim .env

内容は以下のイメージ

MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_USER=hoge
MYSQL_PASSWORD=hoge123
ELS_HOST=localhost
ELS_PORT=9200

環境変数に反映

$ export $(cat .env | xargs)

データ投入用ymlの作成

embulk/mysql-to-elasticsearch.yml.liquidを作成します

in:
  type: mysql
  host: {{ env.MYSQL_HOST }}
  port: {{ env.MYSQL_PORT }}
  user: {{ env.MYSQL_USER }}
  password: {{ env.MYSQL_PASSWORD }}
  database: hoge_db
  query: SELECT * FROM hoge

out:
  type: elasticsearch_ruby
  index: hoge_index
  index_type: hoge_type
  nodes:
    - host: {{ env.ELS_HOST }}
    - port: {{ env.ELS_PORT }}

動作確認

$ embulk preview mysql-to-elasticsearch.yml.liquid -b plugin/

特にエラーがでなければOK

実行

$ embulk run mysql-to-elasticsearch.yml.liquid -b plugin/

確認

$ curl http://localhost:9200/hoge_index/hoge_type/_search?pretty
{
  "took" : 6,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 7,
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "hoge_index",
        "_type" : "hoge_type",
        "_id" : "mSdacWIBSDVu_8Naaaa",
        "_score" : 1.0,
        "_source" : {
(省略)

おまけ

Embulkのアップデート

$ embulk selfupdate
サーバサイドエンジニア。オムライスが好物

シェアする

  • このエントリーをはてなブックマークに追加

フォローする