データエンジニアの吉田啓二です。私が昨年末から今年にかけて担当したデータエンジニアリング関連ソフトウェアの障害対応内容をいくつかご紹介します。サービスのデータを収集して一元管理しているものがあります。アプリケーションが実行され、これらのデータに対する集計・加工などの処理が実施されます。システム構成は以下の通りです。フェイルオーバーするようになりました。ログには以下の情報が出力されていました。送信できなかったことが、フェイルオーバーの直接的な原因となっていたようでした。ハートビートを規定の時間内に送信できなかったのか?」を調査することにしました。原因である可能性は無さそうでした。ハートビートを規定の時間内に送信できなかったこと」の原因がありそうでした。ログを読み進めていくと、以下のような情報が大量に出力されていました。まで増加していました。ソースコードを読んで理解することにしました。使用して蓄積・処理されるようになっていました。メソッドが実行され、そのイベントが処理されます。ログから下記の通りであることがわかりました。メイン処理が行われるもののようでした。内容の中でorg.apache.spark.sql.execution.OptimizeMetadataOnlyQueryというクラスが気になり、ソースコードを見てみると、以下のような記述がありました。いずれかに合致する集計が実施されるクエリについては、実際のデータファイルへアクセスするのではなく、パーティションのメタデータのみを使ってクエリの検索結果を算出するような最適化が実施されるようでした。ときにこの最適化が実施されるようでした。ため、デフォルトの挙動ではこの最適化が実施されるようになっていました。頻発してクエリの実行に時間がかかるようになっていました。設定することで、今回の最適化が実施されないようにしました。コミュニティへの働きかけ、などが重要になります。コミュニティへの働きかけ・貢献に関しては、今後より一層積極的に行い、我々の経験・知見をフィードバックしていきたいと考えています。さんによる「LTOドライブを使ってみた」です。内に滞留していた、ということがわかりました。ハートビートを規定の時間内に送信できなかった」ことに直接的な関連は無さそうに見えました。上で各種メトリクスを時系列で可視化・グラフ化することにしました。数が通常時と比べて急増していたことがわかりました。増加していたことがわかりました。取得してその内容を確認してみました。数は以下のようになっていました。占めていたことがわかりました。どのようなものであるのか」を確認することにしました。クラスにおいて、以下のいずれかのイベントハンドリング処理で生成されることがわかりました。停止時のイベントハンドリング処理になります。削除のリクエストが送信されます。リクエスト送信完了待ちの状態で残存するようになっているようでした。あるときのみ実施されることがわかりました。つが追加されるようでした。設定されてしまっていたようでした。フェイルオーバーが発生しないようになるかを検証することにしました。フェイルオーバーも発生せずに安定稼働するようになり、本件は解決しました。フェイルオーバーしてしまう、というのは既知の事象のようでした。経由で各サーバのアクセスログ・アプリケーションログを受け取るものがあります。テーブルへ登録されます。システム構成は以下の通りです。テーブルへ登録されるまでのデータフローは以下の通りです。ディレクトリへログデータファイルが書き込まれる。文の実行により、ログデータファイルが中間テーブルのディレクトリへ移動される。文の実行により、中間テーブルのデータが最終テーブルへ登録される。文の実行により、中間テーブルへロードされたログデータファイルが削除される。時頃)にたまにフェイルオーバーするようになりました。秒)で失敗し、その結果、フェイルオーバーが発生したようでした。ヘルスチェックがタイムアウトとなった原因を探ることにしました。ログを確認すると、以下の情報が出力されていました。秒間)取得されていたようでした。取得が断続的に発生していたようでした。個ほど)滞留している状態になっていました。ポート番号と同じになっていました。フェイルオーバーが発生していたようでした。つの対応を実施して解決することにしました。ディレクトリ配下のファイルの削除が行われていました。取得時間を短縮するようにしました。)からのヘルスチェック(およびブロックレポート)専用のポート番号を設定できることがわかりました。使用することにしました。社内で限定的に提供して運用していました。スケジュール実行が実施されない」という事象が頻繁に発生するようになりました。一度再起動するとこの事象は解消するものの、またしばらく運用していると、この事象が再発するようになっていました。状態になっていました。状態となっていました。実行され続けているようでした。いずれでもない」こと、であることがわかりました。状態のままスタックする、ということがわかりました。ソースコードにも適用して、本件は解決しました。再起動するまで全く操作できなくなる」という事象がたびたび発生していました。以下の通り、内部処理でデッドロックが発生していました。間で、以下の通りデッドロックが発生しているようでした。