Jindo Job Committer は、Alibaba Cloud E-MapReduce (EMR) チームが Object Storage Service (OSS) へのジョブ出力書き込みを高速化するために開発したパフォーマンス最適化型のジョブコミッターです。OSS のマルチパートアップロード機能および OSS ファイルシステムのカスタマイズ機能を活用し、タスク出力を宛先ディレクトリに直接書き込みます。このため、ファイル名変更(rename)操作は一切不要です。中間データはジョブのコミット完了まで他の読み取り側から非表示の状態であり、データ整合性を確実に保証します。
EMR クラスターでは、Jindo OSS Committer がデフォルトで有効化されています。
Hive および Presto ジョブは Hadoop ジョブコミッターを使用しないため、これらの設定の影響を受けません。
使用するコミッターの選択
EMR では、3 種類のコミッターを提供しています。ご使用の OSS バケットでバージョン管理が有効化されているかどうかに基づいて、適切なコミッターを選択してください。
| コミッター | 使用タイミング | バケットのバージョン管理が必要 |
|---|---|---|
| Jindo OSS Committer(デフォルト) | OSS へ書き込む汎用的な MapReduce や Spark ジョブ | 不要 |
| Jindo OSS Magic Committer | 多数のファイルを高スループットで書き込むジョブ:rename 操作を完全に排除 | いいえ |
| Jindo OSS Direct Committer | バージョン管理が有効化されたバケットへ書き込むジョブ:一時ファイルを生成せずに出力を直接書き込み | 不要(バージョン管理が有効化されている場合に推奨) |
SmartData サービスの fs.oss.committer.magic.enabled パラメーターにより、Jindo OSS Committer と Jindo OSS Magic Committer の切り替えを制御できます。
-
true— ジョブは Jindo OSS Magic Committer を使用(rename 操作なし) -
false— ジョブは Jindo OSS Committer を使用(File Output Committer と同様の動作)
注意事項
すべてのタスクが完了した後、MapReduce Application Master または Spark Driver がジョブをコミットします。このコミット処理中には、宛先ディレクトリに一部の結果ファイルのみが一時的に表示される短時間のウィンドウが存在します。このウィンドウの長さは、出力ファイル数に比例して増加します。
コミットウィンドウを短縮するには、fs.oss.committer.threads の値を増加してください(「コミッターのパフォーマンス最適化」をご参照ください)。
OSS の帯域幅および特定の高度な OSS 機能が、データコピーのパフォーマンスに影響を与える場合があります。パフォーマンスはユーザーおよびバケットごとに異なります。予期しないパフォーマンス低下が発生した場合は、OSS テクニカルサポートまでお問い合わせください。
MapReduce ジョブ向けの Jindo OSS Committer の構成
開始前に、以下の条件を満たしていることを確認してください。
-
YARN および SmartData サービスが実行中の EMR クラスター
-
Alibaba Cloud EMR コンソール へのアクセス権限
コミッターの構成
-
EMR コンソール で、クラスター管理 タブをクリックします。
-
対象のクラスターを検索し、操作 列の 詳細 をクリックします。
-
左側ナビゲーションウィンドウで、クラスターサービス > YARN を選択します。
-
構成 タブをクリックします。サービス構成 セクションで、mapred-site タブをクリックします。
-
Hadoop のバージョンに応じて、ジョブコミッターパラメーターを設定します。
Hadoop バージョン パラメーター 値 Hadoop 2.X mapreduce.outputcommitter.classcom.aliyun.emr.fs.oss.commit.JindoOssCommitterHadoop 3.X mapreduce.outputcommitter.factory.scheme.osscom.aliyun.emr.fs.oss.commit.JindoOssCommitterFactory -
構成を保存します:サービス構成 セクションの右上隅にある 保存 をクリックします。変更の確認 ダイアログボックスで説明を入力し、自動構成更新 を有効化して、OK をクリックします。
-
左側ナビゲーションウィンドウで、クラスターサービス > SmartData を選択します。
-
構成 タブをクリックします。サービス構成 セクションで、smartdata-site タブをクリックします。
-
Jindo OSS Magic Committer(rename 操作なし)を使用するには、
fs.oss.committer.magic.enabledをtrueに設定します。標準の Jindo OSS Committer を使用するには、falseに設定します。 -
構成を保存します:保存 をクリックし、変更の確認 ダイアログボックスを完了して、OK をクリックします。
Spark ジョブ向けの Jindo OSS Committer の構成
開始前に、以下の条件を満たしていることを確認してください。
-
Spark および SmartData サービスが実行中の EMR クラスター
-
Alibaba Cloud EMR コンソール へのアクセス権限
コミッターの構成
-
EMR コンソール で、クラスター管理 タブをクリックします。
-
対象のクラスターを検索し、操作 列の 詳細 をクリックします。
-
左側ナビゲーションウィンドウで、クラスターサービス > Spark を選択します。
-
構成 タブをクリックします。サービス構成 セクションで、spark-defaults タブをクリックします。
-
以下の各パラメーターを
com.aliyun.emr.fs.oss.commit.JindoOssCommitterに設定します。パラメーター 説明 spark.sql.sources.outputCommitterClassデータソーステーブルへの書き込みに使用するコミッター spark.sql.parquet.output.committer.classParquet 形式のデータソーステーブルへの書き込みに使用するコミッター spark.sql.hive.outputCommitterClassHive テーブルへの書き込みに使用するコミッター -
構成を保存します:サービス構成 セクションの右上隅にある 保存 をクリックします。変更の確認 ダイアログボックスで説明を入力し、自動構成更新 を有効化して、OK をクリックします。
-
左側ナビゲーションウィンドウで、クラスターサービス > SmartData を選択します。
-
構成 タブをクリックします。サービス構成 セクションで、smartdata-site タブをクリックします。
-
Jindo OSS Magic Committer(rename 操作なし)を使用するには、
fs.oss.committer.magic.enabledをtrueに設定します。標準の Jindo OSS Committer を使用するには、falseに設定します。 -
構成を保存します:保存 をクリックし、変更の確認 ダイアログボックスを完了して、OK をクリックします。
コミッターのパフォーマンス最適化
MapReduce または Spark ジョブが多数のファイルを書き込む場合、コミットフェーズの速度向上のため、同時コミットスレッド数を増加させます。
-
左側ナビゲーションウィンドウで、クラスターサービス > SmartData を選択します。
-
構成 タブをクリックします。サービス構成 セクションで、smartdata-site タブをクリックします。
-
fs.oss.committer.threadsをデフォルト値より大きい値に設定します。パラメーター 説明 デフォルト fs.oss.committer.threads同時コミット操作に使用するスレッド数 8 -
構成を保存します:保存 をクリックし、変更の確認 ダイアログボックスを完了して、OK をクリックします。
バージョン管理が有効化された場合の一時ディレクトリの管理
OSS でバージョン管理が有効化されている場合、Magic Committer はコミット時に一時ディレクトリを作成・削除します。OSS では、バージョン管理対象オブジェクトを削除すると、オブジェクト自体は削除されず、代わりに削除マーカーが作成されます。時間が経過すると、蓄積された削除マーカーによって、そのディレクトリに対するリスト操作のパフォーマンスが劣化します。
SmartData 3.4.0 以降では、Jindo OSS Magic Committer がコミット後に一時ディレクトリおよびファイルの履歴バージョンを自動的にクリーンアップし、削除マーカーの蓄積を防止することで、リスト操作のパフォーマンスを安定的に維持します。このクリーンアップ機能はデフォルトで有効化されています。
自動クリーンアップを無効化するには、smartdata-site 構成またはジョブコード内で fs.jfs.cache.oss.delete-marker.dirs を設定します。
| 値 | 効果 |
|---|---|
| (空欄) | クリーンアップを完全に無効化 |
temporary,.staging,.hive-staging,__magic |
ディレクトリを明示的に指定して自動クリアを無効にします (デフォルトのアクティブな状態に相当) |
Jindo OSS Direct Committer の使用
Jindo OSS Direct Committer(SmartData 3.4.X 以降で利用可能)は、一時ファイルを一切生成せずに、出力を宛先ディレクトリに直接書き込みます。バージョン管理が有効化されており、一時ファイル管理のオーバーヘッドを回避したい場合にご利用ください。
Jindo OSS Direct Committer に切り替えるには、構成内のコミッタークラスを com.aliyun.emr.fs.oss.commit.direct.JindoOssDirectCommitter に置き換えます。
MapReduce ジョブ向け(YARN サービスの mapred-site タブ):
| パラメーター | 値 |
|---|---|
mapreduce.outputcommitter.class |
com.aliyun.emr.fs.oss.commit.direct.JindoOssDirectCommitter |
Spark ジョブ向け(Spark サービスの spark-defaults タブ):
| パラメーター | 値 |
|---|---|
mapreduce.outputcommitter.class |
com.aliyun.emr.fs.oss.commit.direct.JindoOssDirectCommitter |
spark.sql.parquet.output.committer.class |
com.aliyun.emr.fs.oss.commit.direct.JindoOssDirectCommitter |
spark.sql.hive.outputCommitterClass |
com.aliyun.emr.fs.oss.commit.direct.JindoOssDirectCommitter |
spark.sql.sources.outputCommitterClass |
com.aliyun.emr.fs.oss.commit.direct.JindoOssDirectCommitter |
上記の構成セクションで説明したのと同じ手順で構成を保存し、変更を適用してください。