LoginSignup
5
5

More than 5 years have passed since last update.

【Embulk】Vagrantで環境構築

Last updated at Posted at 2017-10-18

概要

業務でEmbulkの設定変更を行う機会があったので、仮想環境で環境構築を行い、
プラグインなどの挙動を確認したのでメモ
※本記事はEmbulkの最低限の環境構築手順と動作確認のみしか記載しておりません

環境

OS バージョン
CentOS 6.7

手順

1. vagrant環境構築

  • vagrant初期化
$ vagrnat init centos6.7
$ vagrant up
  • vagrantにsshログイン
$ vagrant ssh

2. Javaインストール

  • javaインストール
$ sudo yum install -y java-1.8.0-openjdk
  • 確認
$ java -version
openjdk version "1.8.0_144"
OpenJDK Runtime Environment (build 1.8.0_144-b01)
OpenJDK 64-Bit Server VM (build 25.144-b01, mixed mode)

3. Embulkインストール

  • 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.8.35

4. mkbundleでgemを管理できるようにする

  • embulk mkbundleすると、Gemfileやプラグインの雛形が作られる
$ embulk mkbundle {ディレクトリ名}

下記のようなディレクトリ及び、ファイルが作成される。

{ディレクトリ名}/
   ├── Gemfile
   └── embulk
       ├── filter
       │   └── example.rb
       ├── input
       │   └── example.rb
       └── output
           └── example.rb

※追加したい外部プラグインはGemfileに追記する

例: embulk-filter-evalの追加

Gemfile
source 'https://rubygems.org/'
gem 'embulk', '~> 0.8.0'
+ gem 'embulk-filter-eval'

Gemfileの書き方はこちらを参考にすると良いです

  • Gemfileを更新した場合には、ディレクトリに移って、embulk bundleする。
$ cd bundle_dir
$ embulk bundle

5. サンプルファイル作成

  • embulk example {任意のディレクトリ名}でサンプルプロジェクト?を作成する
    • サンプルのCSVや設定が作成される
$ embulk example {任意のディレクトリ名}
  • ディレクトリ構成
{任意のディレクトリ名}./
    ├── csv
    │   └── sample_01.csv.gz
    └── seed.yml

6. 設定ファイルの雛形を作成

  • embulkの設定を1から作成するのもいいが、元となるCSVがあれば、embulk guessコマンドで大体の設定を行ったファイルを作成してくれる

  • 例えば今回だとcsv/sample_01.csv.gzを元にconfig.ymlを作成するとすると下記のようなコマンドとなる。

$ embulk guess ./dev_dir/seed.yml -o config.yml
  • 作成されたconfig.yml
config.yml
in:
  type: file
  path_prefix: /home/vagrant/./dev_dir/csv/sample_
  decoders:
  - {type: gzip}
  parser:
    charset: UTF-8
    newline: LF
    type: csv
    delimiter: ','
    quote: '"'
    escape: '"'
    null_string: 'NULL'
    trim_if_not_quoted: false
    skip_header_lines: 1
    allow_extra_columns: false
    allow_optional_columns: false
    columns:
    - {name: id, type: long}
    - {name: account, type: long}
    - {name: time, type: timestamp, format: '%Y-%m-%d %H:%M:%S'}
    - {name: purchase, type: timestamp, format: '%Y%m%d'}
    - {name: comment, type: string}
out: {type: stdout}
  • デファルトの設定では、path_prefixで指定したcsvファイルの中身を標準出力する設定になっている。

7. 実行する

$ embulk run config.yml
2017-10-18 09:25:22.512 +0100: Embulk v0.8.35
2017-10-18 09:25:28.922 +0100 [INFO] (0001:transaction): Listing local files at directory '/home/vagrant/dev_dir/csv' filtering filename by prefix 'sample_'
2017-10-18 09:25:28.926 +0100 [INFO] (0001:transaction): "follow_symlinks" is set false. Note that symbolic links to directories are skipped.
2017-10-18 09:25:28.932 +0100 [INFO] (0001:transaction): Loading files [/home/vagrant/dev_dir/csv/sample_01.csv.gz]
2017-10-18 09:25:29.003 +0100 [INFO] (0001:transaction): Using local thread executor with max_threads=4 / output tasks 2 = input tasks 1 * 2
2017-10-18 09:25:29.020 +0100 [INFO] (0001:transaction): {done:  0 / 1, running: 0}
1,32864,2015-01-27 19:23:49,20150127,embulk
2,14824,2015-01-27 19:01:23,20150127,embulk jruby
3,27559,2015-01-28 02:20:02,20150128,Embulk "csv" parser plugin
4,11270,2015-01-29 11:54:36,20150129,
2017-10-18 09:25:29.284 +0100 [INFO] (0001:transaction): {done:  1 / 1, running: 0}
2017-10-18 09:25:29.290 +0100 [INFO] (main): Committed.
2017-10-18 09:25:29.290 +0100 [INFO] (main): Next config diff: {"in":{"last_path":"/home/vagrant/dev_dir/csv/sample_01.csv.gz"},"out":{}}
  • わかりにくいが、抜粋すると下記のようにcsvファイルの中身が出力されている
1,32864,2015-01-27 19:23:49,20150127,embulk
2,14824,2015-01-27 19:01:23,20150127,embulk jruby
3,27559,2015-01-28 02:20:02,20150128,Embulk "csv" parser plugin
4,11270,2015-01-29 11:54:36,20150129,
  • sample_01.csv.gzの中身を確認して比較してみる
$ zcat dev_dir/csv/sample_01.csv.gz
id,account,time,purchase,comment
1,32864,2015-01-27 19:23:49,20150127,embulk
2,14824,2015-01-27 19:01:23,20150127,embulk jruby
3,27559,2015-01-28 02:20:02,20150128,"Embulk ""csv"" parser plugin"
4,11270,2015-01-29 11:54:36,20150129,NULL

ヘッダーを除いて、csvファイルの中身が出力されていることがわかる

おわり

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5