転送したデータが重複しています

FlyData Autoloadを利用して転送したデータが重複しているとお問い合わせいただくことがございます。

弊社がこれまでに確認したケースでは、ファイルのローテーションに関係して発生している傾向にあります。重複が発生した場合の原因調査では、ファイルのローテーションをまずは確認することをお勧めいたします。

下記は弊社にて確認した重複事例とその原因です。

シンボリックリンクを貼り直した場合

FlyData Autoloadのデータエントリにシンボリックリンクを設定いただくことで、ログローテーションに対応することができます。そのため、シンボリックリンクをご利用いただくことをおすすめしておりますが、シンボリックリンクを作成し直す場合、注意が必要です。

$ ls -l
total 80
-rw-rw-r-- 1 john john 81920 Aug 26 16:53 real_log_to_load.log
lrwxrwxrwx 1 john john    20 Aug 26 18:08 symlink_log_to_load.log -> real_log_to_load.log
$ rm symlink_log_to_load.log
$ ln -s real_log_to_load.log symlink_log_to_load.log

結果

上記のように、real_log_to_load.logへのシンボリックリンク symlink_log_to_load.log がすでに設定されている状態で、シンボリックリンクのみ作り直しをすると、同じデータが2度FlyData Autoloadによって転送されていまいます。

上記の例では、real_log_to_load.logのデータが重複してしまいます。

原因

シンボリックリンクがターゲットとなるファイルに設定されている状態で、別の新たなファイルへと変更された場合、FlyData Agentはその変更を検知します。

$ ls -l
total 80
-rw-rw-r-- 1 john john 81920 Aug 26 16:53 real_log_to_load1.log
-rw-rw-r-- 1 john john   920 Aug 26 16:53 real_log_to_load2.log
lrwxrwxrwx 1 john john    20 Aug 26 18:08 symlink_log_to_load.log -> real_log_to_load1.log
$ rm symlink_log_to_load.log
$ ln -s real_log_to_load2.log symlink_log_to_load.log

この例では、FlyData Agentは最初のファイル(real_log_to_load1.log`)を最後まで転送し、その後新しいファイル(`real_log_to_load2.log`)の最初からデータを転送します。

同様の状況が、重複が発生する同一ファイルへのシンボリックリンク張り直しでも発生します。FlyData Agentはシンボリックリンクを貼り直す前のデータをすべて転送し、その後貼り直した後の同じファイルを最初から転送します。結果としてシンボリックリンクの張り直しでデータが重複してしまいます。

解決方法

シンボリックリンクを設定する場合は、新しいファイルへとリンクを変更するときに制限してください。

バッチでデータを洗い替えする場合

MySQLなどのデータベースのデータを、FyData Syncを利用せずにReshiftへと反映させる場合、バッチでデータをファイル出力し、FlyData AutoloadでRedhisftへと転送する方法が考えられます。転送前にRedhisftのデータを全件削除し、その後全データをファイルへ出力し取り込む、「洗い替え」をバッチで実行する場合、注意が必要です。場合によっては予期せずデータが重複してしまうかもしれません。

原因

ファイル出力が、次の洗い替えで実行されるファイル削除までに完了していない場合、新旧2つのファイルがそれぞれのセッションで転送されるため、データが重複してしまいます。

解決策

後続の洗い替えバッチが起動するときには、先行するバッチで生成されたデータが転送完了していることを確認ください。そしてスケジュール設定する際は、転送に十分な時間を設定してください。アップロードに必要な時間は、Redshfitのデータサイズが拡大するのに会わせ、増加する傾向にあります。

 

他にご質問がございましたら、リクエストを送信してください

0 コメント

ログインしてコメントを残してください。
Powered by Zendesk