お久しぶりです皆さま、お元気ですか!?最近私は韓国語を勉強し直しており、ハングル文字が読めるようになってきました。(元々高校の時第二外国語で少し話せるレベル)
それよりも!
今回仕事で、Embulkをバージョンアップをする機会がありました。初めて経験したということもあり、ハマりポイントや気をつけることなどをブログしていこうと思います。
embulkのバージョンアップついにテストが終わった。来週本番適用してエラーなければ最高!しかし大変だったわ😩
— adachin👾SRE (@adachin0817) September 4, 2020
■Environment
- embulk 0.8.35 → embulk 0.9.23
- Ruby 2.4.4p296
現時点でEmbulkの最新バージョンはv0.9.23なのでv0.8から上げることとなりました。あとはステージング環境でバシバシ検証しまくるという感じです。
■Embulk update
- embulk selfupdate
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$ embulk selfupdate 2020-06-05 16:28:17.506 +0900: Embulk v0.8.35 Checking the latest version... Found a newer version 0.10.2. Downloading https://dl.bintray.com/embulk/maven/embulk-0.10.2.jar ... java.io.FileNotFoundException: Unexpected HTTP status code: 404 at org.embulk.cli.EmbulkSelfUpdate.updateSelfWithExceptions(EmbulkSelfUpdate.java:93) at org.embulk.cli.EmbulkSelfUpdate.updateSelf(EmbulkSelfUpdate.java:33) at org.embulk.cli.EmbulkRun.runSubcommand(EmbulkRun.java:395) at org.embulk.cli.EmbulkRun.run(EmbulkRun.java:99) at org.embulk.cli.Main.main(Main.java:28) java.io.FileNotFoundException: Unexpected HTTP status code: 404 at org.embulk.cli.EmbulkSelfUpdate.updateSelfWithExceptions(EmbulkSelfUpdate.java:93) at org.embulk.cli.EmbulkSelfUpdate.updateSelf(EmbulkSelfUpdate.java:33) at org.embulk.cli.EmbulkRun.runSubcommand(EmbulkRun.java:395) at org.embulk.cli.EmbulkRun.run(EmbulkRun.java:99) at org.embulk.cli.Main.main(Main.java:28) |
v0.8.35ということもあってかなり古いバージョンとなります。404となった場合はそもそも公式がv0.10を取ってきてしまうということもあり、まずはv0.8のマイナーバージョンアップから行いましょう。
1 2 3 4 5 6 7 8 9 |
$ sudo /usr/local/bin/embulk selfupdate 0.8.39 2020-06-05 16:32:29.295 +0900: Embulk v0.8.35 Checking version 0.8.39... Found version 0.8.39. Downloading https://dl.bintray.com/embulk/maven/embulk-0.8.39.jar ... Updated to 0.8.39. $ embulk --version embulk 0.8.39 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ sudo /usr/local/bin/embulk selfupdate 0.9.23 [sudo] password for adachin: 2020-06-17 18:44:08.284 +0900: Embulk v0.8.39 ********************************** 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 ********************************************************************************* Checking version 0.9.23... Found version 0.9.23. Downloading https://dl.bintray.com/embulk/maven/embulk-0.9.23.jar ... Updated to 0.9.23. $ embulk -version embulk 0.9.23 |
これでv0.9.23にバージョンアップできたかと思います。あとは各プロジェクトが問題なく動作できるか確認をしましょう。以下wikiでもまとめてます。
■digdag runする前に
そのまま以下のように digdag run
するとv0.8で実行する前にGemfileを修正します。まずは2行目のEmbulkのバージョンをv0.9.23に変更し、それ以外バージョン指定されていたので、全て最新のものを取得するように変更しました。その後 embulk bundle update
を実行します。updateするとGemfile.lockが書き換わるのでgit addしておきましょう。その他embulkコマンドは以下wikiを参考にしてみてください。
はじめてembulkのバージョンアップ試したけど、Pluginのバージョンアップもしないとまったく動かないことがわかった。
— adachin👾SRE (@adachin0817) September 3, 2020
1 2 3 4 5 6 7 8 9 10 11 12 |
source 'https://rubygems.org/' gem 'embulk', '~> 0.9.23' gem 'embulk-input-jdbc' gem 'embulk-input-mysql' gem 'embulk-input-s3' gem 'embulk-input-bigquery' gem 'embulk-parser-jsonl' gem 'embulk-output-jdbc' gem 'embulk-output-mysql' gem 'embulk-output-bigquery' ~省略~ |
- embulk bundle update
1 2 3 4 5 6 7 8 9 10 |
$ embulk bundle update 2020-09-03 11:50:25.895 +0900: Embulk v0.9.23 Fetching gem metadata from https://rubygems.org/....... Fetching gem metadata from https://rubygems.org/. Resolving dependencies............... Using concurrent-ruby 1.1.7 Using i18n 1.8.5 Using minitest 5.14.2 ~省略~ Bundle updated! |
■各エラー対応
- embulk-input-mysql
Caused by: java.lang.RuntimeException: java.sql.SQLException: The server time zone value ‘Asia/Tokyo’ is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
MySQLからデータを取ってくる場合、上記のプラグインが必須になるのですが、v0.9になったことでMySQLのTime ZoneをUTCであると判断してしまい、9時間ずれた状態でTimeStamp型のデータを取得してしまうとのことです。なので以下のようなオプションをつけてあげましょう。
1 |
options: {useLegacyDatetimeCode: false, serverTimezone: Asia/Tokyo} |
- embulk-output-bigquery
Caused by: org.jruby.exceptions.RaiseException: (ArgumentError) unknown keyword: location
それは、google-api-clientだったかgoogle関連のgemのバージョンが古いんだと思います。それとembulk-output-bigqueryを一旦消して、embulk-output-bigqueryすればなおる気がします。
— Hiroyuki Sato (@hiroysato) September 3, 2020
一度Gemfileからgoogle-api-clientを削除して embulk bundle update
からの再度Gemfile追加してupdateすればエラーは消えます。
- embulk-input-s3
org.embulk.exec.PartialExecutionException: java.lang.RuntimeException: java.lang.AbstractMethodError
そもそもバージョンアップをしたときにv0.9.9だったのでv0.9.23にすればこのエラーはそもそも出ません(これは恥ずかしい!!)
それ以外はエラー出ていませんでしたが、前のバージョンと新バージョンでBigQueryに専用のテーブルを作って相違確認するとさらにベストです!値が違うとかあったら冷や汗。。
■まとめ
来月にようやくembulkのバージョンアップが実施できるぞ!!!
— adachin👾SRE (@adachin0817) September 25, 2020
なかなか相当古いバージョンからバージョンアップを行いましたが、@hiroysatoさんフォローありがとうございました!!とりあえずステージング環境は動作確認OKなので来月本番適用してまた何かあれば追記していきます!あとRubyもバージョンアップしないと…
本番環境のembulkバージョンアップ完了!
達成感やばし。— adachin👾SRE (@adachin0817) October 6, 2020
0件のコメント