EMRFS S3 向けに最適化されたコミットプロトコルとマルチパートアップロード - Amazon EMR

EMRFS S3 向けに最適化されたコミットプロトコルとマルチパートアップロード

EMRFS S3 向けに最適化されたコミットプロトコルで動的パーティション上書きの最適化を使用するには、Amazon EMR でマルチパートアップロードを有効にする必要があります。マルチパートアップロードは、デフォルトで有効になっています。また、必要に応じて再度有効にすることができます。詳細については、「Amazon EMR 管理ガイド」の「Amazon S3 用のマルチパートアップロードを設定する」を参照してください。

動的パーティション上書きの間、EMRFS S3 向けに最適化されたコミットプロトコルは、マルチパートアップロードのトランザクションのような特性を利用して、ジョブのコミット時にタスクの試行によって書き込まれたファイルのみがジョブの出力場所に表示されるようにします。このようにマルチパートアップロードを使用することにより、コミットプロトコルはジョブコミットのパフォーマンスをデフォルトの SQLHadoopMapReduceCommitProtocol よりも向上させます。EMRFS S3 向けに最適化されたコミットプロトコルを使用するにあたっては、従来のマルチパートアップロードとのいくつかの重要な違いを考慮する必要があります。

  • マルチパートアップロードは常にファイルサイズに関係なく実行されます。これは EMRFS のデフォルトの動作とは異なり、マルチパートアップロードがトリガーされるファイルサイズは fs.s3n.multipart.uploads.split.size プロパティで制御されます。

  • タスクがコミットされるか中止されるまで、マルチパートアップロードは長期間不完全な状態になります。これは EMRFS のデフォルトの動作とは異なり、タスクで指定されたファイルの書き込みが終了するとマルチパートアップロードが完了します。

このような違いにより、タスクが実行されて Amazon S3 へのデータの書き込みが行われているときに Spark Executor JVM がクラッシュしたり強制終了されたりする、またはジョブが実行しているときに Spark Driver JVM がクラッシュしたり強制終了されたりすると、不完全なマルチパートアップロードが残される可能性が高くなります。そのため、EMRFS S3 に最適化されたコミットプロトコルを使用するときは、失敗したマルチパートアップロードの管理に関するベストプラクティスに従ってください。詳細については、「Amazon EMR 管理ガイド」の Amazon S3 バケットの処理に関するベストプラクティスを参照してください。