なんちゃってエンジニアぶろぐ

プログラムがガリガリ書けるわけじゃない。でもなんか新しいことに手を出したいそんな人のブログ。

embulk × digdag 動かしてみた1

前回、即席ではありますが、digdagがバックグラウンド動くように設定を行いました。

inui-beta.hatenablog.com

なので、今回はdigdagでジョブ定義して、embulkによるデータ連携を動かしたいと思います。

事前準備が長かったですね。 とりあえず、手元に何もデータが無いので適当にローカルからS3とかやってみましょうかね。

今回の手順は以下のような感じ。

  1. プラグインの導入

  2. embulkのymlを作成

  3. S3アップロード

  4. digdagを利用してのファイルアップロード

  5. ちょっとした応用 そんな感じで、はじめていきます。

とりあえずテストデータは手元にあったのを利用。 AWSのコンソールからs3にアップロードして、 embulkでダウンロードしたのを別バケットにアップロードしてみます。

ダウンロードするファイルとアップロード先は、こんな感じです。

f:id:inui_beta:20171119235611p:plainf:id:inui_beta:20171119235619p:plain
実行前

上記を行うためには、s3からダウンロードしてアップロードするプラグインが必要になります。 以下のコマンドで導入できます。

$ embulk gem install embulk-input-s3
2017-11-19 13:27:29.101 +0000: Embulk v0.8.36

********************************** INFORMATION **********************************
  Join us! Embulk-announce mailing list is up for IMPORTANT annoucement such as
    compatibility-breaking changes and key feature updates.
  https://groups.google.com/forum/#!forum/embulk-announce
*********************************************************************************


Gem plugin path is: /home/centos/.embulk/jruby/2.3.0

Fetching: embulk-input-s3-0.2.11.gem (100%)
Successfully installed embulk-input-s3-0.2.11
1 gem installed

$ embulk gem install embulk-output-s3
2017-11-19 13:28:03.321 +0000: Embulk v0.8.36

********************************** INFORMATION **********************************
  Join us! Embulk-announce mailing list is up for IMPORTANT annoucement such as
    compatibility-breaking changes and key feature updates.
  https://groups.google.com/forum/#!forum/embulk-announce
*********************************************************************************


Gem plugin path is: /home/centos/.embulk/jruby/2.3.0

Fetching: embulk-output-s3-1.4.0.gem (100%)
Successfully installed embulk-output-s3-1.4.0
1 gem installed


$ embulk gem list --local
2017-11-19 13:49:59.794 +0000: Embulk v0.8.36

********************************** INFORMATION **********************************
  Join us! Embulk-announce mailing list is up for IMPORTANT annoucement such as
    compatibility-breaking changes and key feature updates.
  https://groups.google.com/forum/#!forum/embulk-announce
*********************************************************************************


Gem plugin path is: /home/centos/.embulk/jruby/2.3.0


*** LOCAL GEMS ***

did_you_mean (default: 1.0.1)
embulk-input-s3 (0.2.11)
embulk-output-s3 (1.4.0)
jar-dependencies (default: 0.3.10)
jruby-openssl (default: 0.9.21 java)
jruby-readline (default: 1.1.1 java)
json (default: 1.8.3 java)
minitest (default: 5.4.1)
net-telnet (default: 0.1.1)
power_assert (default: 0.2.3)
psych (default: 2.2.4 java)
rake (default: 10.4.2)
rdoc (default: 4.2.0)
test-unit (default: 3.1.1)

うん入ってる入ってる。 次にymlを作成。 こんな感じでいいんじゃないですかね。 s3のパスやアクセス情報は適宜変更してください。

in:
  type: s3
  bucket: inui-input
  path_prefix: data/input
  endpoint: s3-ap-northeast-1.amazonaws.com ←環境に合わせて
  access_key_id: ひみつ ←環境に合わせて
  secret_access_key: ひみつ ←環境に合わせて
  parser:
    charset: UTF-8
    newline: CRLF
    type: csv
    delimiter: ','
    skip_header_lines: 1
    columns:
    - {name: year, type: string}
    - {name: day, type: string}
    - {name: hh, type: string}
    - {name: num, type: long}
out:
  type: s3
  path_prefix: data/output
  file_ext: .csv
  bucket: inui-output ←環境に合わせて
  endpoint: s3-ap-northeast-1.amazonaws.com ←環境に合わせて
  access_key_id: ひみつ ←環境に合わせて
  secret_access_key: ひみつ ←環境に合わせて
  formatter:
    type: csv
  parser:
    charset: UTF-8
    newline: CRLF
    type: csv
    delimiter: ','
    skip_header_lines: 1
    columns:
    - {name: year, type: string}
    - {name: day, type: string}
    - {name: hh, type: string}
    - {name: num, type: long}

それじゃあembulkを実行してみましょう! 以下のコマンドで実行。

※ここで、はじめてembulkがなんか言ってる(INFORMATION)のに気づきました。←

$ embulk run s3.yml
2017-11-19 14:40:22.740 +0000: Embulk v0.8.36

********************************** INFORMATION **********************************
  Join us! Embulk-announce mailing list is up for IMPORTANT annoucement such as
    compatibility-breaking changes and key feature updates.
  https://groups.google.com/forum/#!forum/embulk-announce
*********************************************************************************

2017-11-19 14:40:31.055 +0000 [INFO] (0001:transaction): Loaded plugin embulk-input-s3 (0.2.11)
2017-11-19 14:40:31.153 +0000 [INFO] (0001:transaction): Loaded plugin embulk-output-s3 (1.4.0)
2017-11-19 14:40:32.781 +0000 [INFO] (0001:transaction): Using local thread executor with max_threads=2 / tasks=1
2017-11-19 14:40:32.854 +0000 [INFO] (0001:transaction): {done:  0 / 1, running: 0}
2017-11-19 14:40:33.250 +0000 [INFO] (0015:task-0000): Writing S3 file 'data/output.000.00.csv'
2017-11-19 14:40:34.015 +0000 [INFO] (0001:transaction): {done:  1 / 1, running: 0}
2017-11-19 14:40:34.020 +0000 [INFO] (main): Committed.
2017-11-19 14:40:34.020 +0000 [INFO] (main): Next config diff: {"in":{"last_path":"data/input.csv"},"out":{}}

はい上手くいきました。 では確認。

f:id:inui_beta:20171119235621p:plain
実行後

アップロードされてますね。 diffとった結果も問題なし。

※厳密にはヘッダの大文字・小文字が統一されてませんでしたが・・・

あ、結構書いちゃった。digdagは来週で。←

なんか、そろそろこれ書き終わるので、なんかこういうの書いてほしいとかあったらテーマください。笑