Septeni Engineer's Blog

セプテーニ・オリジナルのエンジニアが綴る技術ブログ

digdagを使っててハマった事メモ

S3にあるファイルを加工したり中間結果のファイルを保存したりTreasureDataに格納するような処理を書いていったときに発生したエラーメモ。

digdag version 0.9.24 github.com

サーバーモードでdownload_fileオプションが使えない

プロジェクト外のディレクトリを参照できない

  • SQLファイル動的に生成してtdオペレータに渡すようなタスクを作った
  • 生成したファイルをプロジェクトディレクトリに保存するようにしたが次のタスクでNo such file or directoryになり参照できず(ローカルモードでは成功するがサーバーモードでは失敗)
  • プロジェクトディレクトリがダメなら/var/tmp/等に置けばいいと思ってこんな感じtd>: /var/tmp/???.sql で試したがダメだった
  • ファイルに保存せずにSELECT * FROM hoge WHERE id=${id}みたいなテンプレートファイルを作り、スクリプトでDigdag.envを使って変数を設定して対応
  • (shオペレータはプロジェクト外のファイルもいけた。sh>: echo /var/tmp/hoge 等)

dockerでプロジェクト外のディレクトリも参照できなかった

  • ruby環境をサーバーに構築するのがだるかったのでdockerを使ってみた
  • /var/tmpに保存したファイルも消え去った
  • 諦めた

サーバー複数台で実行したらファイルが参照できない

  • 複数のサーバーで動作させたときに各サーバーがタスクをいい感じに取っていった
  • 中間結果のファイルがサーバーに無いため参照できなかった(そりゃそうか)
  • 処理順序を勘違いしていた(下記のコードの場合、number 1の処理step_a,b,cは同じサーバー上で実行すると勘違い)
  • goofysでS3をマウントして対応
# test.dig
+sample:
  for_each>:
    number: [1,2,3]

  _parallel: true

  _do:
    +step_a:
      echo>: a_${number}

    +step_b:
      echo>: b_${number}

    +step_c:
      echo>: c_${number}
$ digdag run test.dig --rerun
...
2018-05-18 20:26:03 +0900 [INFO] (0018@[0:default]+test+sample): for_each>: {number=[1, 2, 3]}
2018-05-18 20:26:03 +0900 [INFO] (0018@[0:default]+test+sample^sub+for-0=number=0=1+step_a): echo>: a_1
2018-05-18 20:26:03 +0900 [INFO] (0019@[0:default]+test+sample^sub+for-0=number=1=2+step_a): echo>: a_2
2018-05-18 20:26:03 +0900 [INFO] (0020@[0:default]+test+sample^sub+for-0=number=2=3+step_a): echo>: a_3
a_3
a_2
a_1
2018-05-18 20:26:04 +0900 [INFO] (0019@[0:default]+test+sample^sub+for-0=number=0=1+step_b): echo>: b_1
2018-05-18 20:26:04 +0900 [INFO] (0020@[0:default]+test+sample^sub+for-0=number=2=3+step_b): echo>: b_3
2018-05-18 20:26:04 +0900 [INFO] (0018@[0:default]+test+sample^sub+for-0=number=1=2+step_b): echo>: b_2
b_1
b_2
b_3
2018-05-18 20:26:04 +0900 [INFO] (0020@[0:default]+test+sample^sub+for-0=number=2=3+step_c): echo>: c_3
2018-05-18 20:26:04 +0900 [INFO] (0018@[0:default]+test+sample^sub+for-0=number=1=2+step_c): echo>: c_2
2018-05-18 20:26:04 +0900 [INFO] (0019@[0:default]+test+sample^sub+for-0=number=0=1+step_c): echo>: c_1
c_1
c_3
c_2

shオペレータでargument too long

for_eachオペレータを使っていたらファイル名が長すぎますエラー

  • for_eachの対象にかなり長い日本語名が入ったリストを指定していた
  • digdag側でワークスペースの名前に含めてディレクトリ作ってるからか、ファイル名が長すぎますというエラーが出た
  • for_eachに渡していたリストの内容をなんとか短縮して対応
  • 既にPRが出ていたのでマージされることを祈った

タスクに異様に時間がかかる

  • どんな状況だったか忘れたがシンプルな処理にも異様に時間がかかるようになっていた
  • 色々試した結果Digdag.envで持たせていたデータを減らしたら軽くなった
  • なぜか直ったので放置

タスクを増やしたら処理途中で必ず失敗

2018-04-27 04:41:10 +0000 [TRACE]
...
io.digdag.core.workflow.WorkflowExecutor: Task failed with error {"message":"Too many tasks. Limit: 1000, Current: 999, Adding: 4 (task limit exceeded)"

終わり

  • 色々ハマりましたが本来の用途と異なる使い方をしたのかなと思います
  • digdagは色々なオペレータが用意されていたり、記述がシンプルなのでさくっと書けて便利です
  • ローカルモードとサーバーモードとで挙動が少し違う部分があるため、早めに本番に近い環境で開発を進めるのがいいのかなと思いました

参加レポート:Global Scrum Gathering 2018 @ Minneapolis

こんにちは、スクラムマスターやってます貫名です。

先月のこととなりますがGlobal Scrum Gathering 2018 @ Minneapolisに参加してきましたのでそのレポート記事をアップしたいと思います。個人の主観を通した内容ではありますが、どんなカンファレンスだったのか参考になれば幸いです。

f:id:yhmcr999:20180507204210j:plain:w500

続きを読む

もくもく会@セプテーニオリジナルが10回目を迎えました

こんにちは。セプテーニ・オリジナルの池田です。

2016年よりセプテーニのカフェスペースで開催してきましたもくもく会ですが、
先日ようやく10回目を迎えました。

▲10回目の様子

タイミングが良いのでこれまでの内容や、実際の様子を紹介しようかと思います。

続きを読む

新宿Geek Lounge#4 分析基盤Meetup ver2 を開催しました

はじめまして、昨年 11 月に入社しました田邊(@emaggame)と申します。今回は先日 2018/04/02(月)に弊社にて実施いたしました 新宿Geek Lounge#4 分析基盤Meetup ver2 の開催模様をお伝えします。

オープニング

弊社 CTO 河内より、本 Meetup 開催の趣旨説明と乾杯です。年度初めというお忙い中、多くの方にご参加いただきありがとうございます!

f:id:spinningplates:20180402193318j:plain:w300

続きを読む

ScalaMatsuri2018で登壇してきました!

セプオリの下村です(@s10myk4)
3/16 ~ 3/18の初の3日間開催された ScalaMatsuri2018に参加してきました!

弊社では、カンファレンス、アンカンファレンスでの登壇やオーガナイズ含め 5人のメンバーが登壇しました。

Twitterから画像やコメントのリンクを拝借しております。
もし問題がある場合は対応いたしますので、お手数ですが@s10myk4までご連絡いただけますと幸いです。

カンファレンス

  • Purely Functional Play Framework Application(@AoiroAoino)

www.slideshare.net

アンカンファレンス

続きを読む