Embulk で Operation failed (0:08003) エラーが出た場合は out のサイズを見直してみる

Embulk でインターネット越しの転送

ローカルネットワークでは問題なかったのですが、インターネット越しに*1 Embulk で大量のデータを送信しようとするとOperation failed (0:08003)というエラーが出てしまいました。Output pluginsembulk-output-mysqlhttps://github.com/embulk/embulk-output-jdbc/tree/master/embulk-output-mysql)です。

結論

outの設定の中にbatch_sizeというものがありました。デフォルトではこれが16777216に設定されているのですが、程よく小さく指定することでエラーが出なくなりました。あまりに小さくすると細切れにデータを送りすぎて時間がかかったりログがえらいことになったりしますが、まあ失敗するよりかはいいのではないでしょうか。

余裕があれば値を変えて試してみて、最適な値を見つけるのも良いかと思います。

補足

batch_sizeの値によっては処理が速すぎるため(?)にERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'みたいなエラーが出ます。

なのでmodemerge系を選択するのが無難です。さらにfetch_rowsの値を抑えたほうがよいと思います。ただmergeだと困る運用もあると思いますので、そこはやはり値の微調整ということになるかと思います。

そもそもこのエラーが出る場合はネットワークの状況に疑いがある可能性が強いと踏んでいますので、上記はかなりのグレーパターンだとは思います。

*1:これが異常なオペレーションだとは思いますが

Powered by はてなブログ