embulk × digdag 動かしてみた1
前回、即席ではありますが、digdagがバックグラウンド動くように設定を行いました。
なので、今回はdigdagでジョブ定義して、embulkによるデータ連携を動かしたいと思います。
事前準備が長かったですね。 とりあえず、手元に何もデータが無いので適当にローカルからS3とかやってみましょうかね。
今回の手順は以下のような感じ。
プラグインの導入
embulkのymlを作成
S3アップロード
digdagを利用してのファイルアップロード
ちょっとした応用 そんな感じで、はじめていきます。
とりあえずテストデータは手元にあったのを利用。 AWSのコンソールからs3にアップロードして、 embulkでダウンロードしたのを別バケットにアップロードしてみます。
ダウンロードするファイルとアップロード先は、こんな感じです。
上記を行うためには、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":{}}
はい上手くいきました。 では確認。
アップロードされてますね。 diffとった結果も問題なし。
※厳密にはヘッダの大文字・小文字が統一されてませんでしたが・・・
あ、結構書いちゃった。digdagは来週で。←
なんか、そろそろこれ書き終わるので、なんかこういうの書いてほしいとかあったらテーマください。笑