Embulkをインストールする手順 – データ分析入門シリーズ

データ分析基盤
スポンサーリンク

準備編

embulkにはJavaが必要です。今回用意していたサーバにはJavaを準備していなかったので下記の手順でJavaを使えるようにしました。

EC2インスタンスにJavaをインストールする手順
プレインストールのJavaが存在していると思ってたが存在していなかった。Amazon CorrettoディストリビューションとしてAmazon Correto 8を選びました。というのもEmbulkを使いたかったのですが、 ...

インストール手順

公式ページ(https://www.embulk.org/)のクイックスタートに従って進めていきます。

$curl --create-dirs -o ~/.embulk/bin/embulk -L "https://dl.embulk.org/embulk-latest.jar"

まずは最新版のjarファイルをダウンロードします。

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100   623  100   623    0     0   1905      0 --:--:-- --:--:-- --:--:--  8197
100 42.4M  100 42.4M    0     0  18.6M      0  0:00:02  0:00:02 --:--:-- 24.2M

実行中はこんな感じです。数秒で終わります。

$chmod +x ~/.embulk/bin/embulk

続いて実行権限を付与します。コンソール上で動きはありませんが、実行権限が付与されていればOK。

$echo 'export PATH="$HOME/.embulk/bin:$PATH"' >> ~/.bashrc

次に環境変数にembulkを追加します。sourceで読み込むか端末にログインしなおしておきます。

動作確認

$ embulk
Embulk v0.9.23
Usage: embulk [-vm-options] <command> [--options]
Commands:
   mkbundle   <directory>                             # create a new plugin bundle environment.
   bundle     [directory]                             # update a plugin bundle environment.
   run        <config.yml>                            # run a bulk load transaction.
   cleanup    <config.yml>                            # cleanup resume state.
   preview    <config.yml>                            # dry-run the bulk load without output and show preview.
   guess      <partial-config.yml> -o <output.yml>    # guess missing parameters to create a complete configuration file.
   gem        <install | list | help>                 # install a plugin or show installed plugins.
   new        <category> <name>                       # generates new plugin template
   migrate    <path>                                  # modify plugin code to use the latest Embulk plugin API
   example    [path]                                  # creates an example config file and csv file to try embulk.
   selfupdate [version]                               # upgrades embulk to the latest released version or to the specified version.

コマンドを実行してみるとUsageが表示されるようになりました。これでembulkコマンドが有効になっていることを確認できました。

実行例

コマンドが使えるようになったので実際に使ってみようと思います。

公式でサンプルが提供されていたので、何も調べずに実行してみました。

$ embulk example ./try1

2021-09-15 20:23:55.886 +0900: Embulk v0.9.23
Creating ./try1 directory...
  Creating ./try1/
  Creating ./try1/csv/
  Creating ./try1/csv/sample_01.csv.gz
  Creating ./try1/seed.yml

Run following subcommands to try embulk:

   1. embulk guess ./try1/seed.yml -o config.yml
   2. embulk preview config.yml
   3. embulk run config.yml

サンプルを実行するのに必要なファイルが設置されたようです。

次の3つのサブコマンドを実行するように指示があります。

  • embulk guess
  • embulk preview
  • embulk run

embulk guess

まずはguessコマンドです。seed.ymlを使ってconfig.ymlというファイルを作るようです。

$ embulk guess ./try1/seed.yml -o config.yml

(中略) 
in:
  type: file
  path_prefix: ./try1/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}

Created 'config.yml' file.

先ほど作られたファイルを元にして、embulkの実行設定ファイル(入力と出力)が作られたようです。

yamlを見ると、inにあるようにcsvディレクトリ以下のsample_で始まるファイルを読み込んでパースし、outにあるように標準出力(stdout)に出力するという設定のように見えますね。

embulk preview

$ embulk preview config.yml

(中略)
+---------+--------------+-------------------------+-------------------------+----------------------------+
| id:long | account:long |          time:timestamp |      purchase:timestamp |             comment:string |
+---------+--------------+-------------------------+-------------------------+----------------------------+
|       1 |       32,864 | 2015-01-27 19:23:49 UTC | 2015-01-27 00:00:00 UTC |                     embulk |
|       2 |       14,824 | 2015-01-27 19:01:23 UTC | 2015-01-27 00:00:00 UTC |               embulk jruby |
|       3 |       27,559 | 2015-01-28 02:20:02 UTC | 2015-01-28 00:00:00 UTC | Embulk "csv" parser plugin |
|       4 |       11,270 | 2015-01-29 11:54:36 UTC | 2015-01-29 00:00:00 UTC |                            |
+---------+--------------+-------------------------+-------------------------+----------------------------+

コマンド名からするにdry-runの動きでしょうか。読み込み元からロードして、出力はせずにプレビューを表示してくれているようです。

embulk run

$ embulk run config.yml

(中略)
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,
2021-09-15 20:28:14.944 +0900 [INFO] (0001:transaction): {done:  1 / 1, running: 0}
2021-09-15 20:28:14.947 +0900 [INFO] (main): Committed.
2021-09-15 20:28:14.947 +0900 [INFO] (main): Next config diff: {"in":{"last_path":"./try1/csv/sample_01.csv.gz"},"out":{}}

実際に実行した結果がこちら。

config.ymlの設定にしたがってファイルを読み込み、標準出力に出力されることを確認できました。

タイトルとURLをコピーしました