SmartData 3.4.Xより前のバージョンでは、Jindo OSSコミッターがサポートされています。 SmartData 3.4.X以降では、オブジェクトストレージサービス(OSS)のバケットバージョン管理が有効になっている場合のジョブコミットパフォーマンスを最適化するために、Jindo OSSダイレクトコミッターが追加されています。
背景情報
ジョブコミッターは、MapReduceやSparkなどの分散コンピューティングフレームワークの基本コンポーネントです。 分散タスクの書き込み操作のデータ整合性問題を処理するために使用されます。
Jindoジョブコミッターは、Alibaba Cloud E-MapReduce(EMR)チームによって開発された効果的なジョブコミッターです。 OSSシナリオでのジョブコミット専用です。 Jindoジョブコミッターは、OSSのマルチパートアップロード機能に基づいて開発されており、OSSのファイルシステムカスタマイズ機能をサポートしています。 Jindoジョブコミッターを使用すると、タスクの出力データは宛先ディレクトリに直接書き込まれます。 ジョブがコミットされる前は、中間データはユーザーには見えません。 ジョブコミットプロセス中に名前変更操作は実行されません。 これにより、データの整合性が確保されます。
- OSSの帯域幅と一部の高度な機能の有効化は、OSSのデータコピーパフォーマンスに影響を与える可能性があります。 そのため、ユーザーまたはバケットによってデータコピーのパフォーマンスが異なる場合があります。 ご質問がある場合は、OSSのテクニカルサポート担当者にお問い合わせください。
- すべてのタスクが完了すると、MapReduceアプリケーションマスターまたはSparkドライバーがジョブをコミットします。 これにより、結果ファイルの一部のみが宛先ディレクトリに表示される短い時間枠が発生します。 時間枠の長さは、ファイルの数と正の相関があります。
fs.oss.committer.threads
パラメーターをより大きな値に設定して、同時処理を高速化できます。 - HiveジョブとPrestoジョブは、Hadoopジョブコミッターを使用しません。
- EMRクラスターでは、Jindo OSSコミッターはデフォルトで有効になっています。
MapReduceジョブでJindo OSSコミッターを使用する
- YARNサービスの [mapred-site] タブに移動します。
- Alibaba Cloud EMRコンソール にログインします。
- 上部のナビゲーションバーで、クラスターが存在するリージョンを選択し、ビジネス要件に基づいてリソースグループを選択します。
- [クラスター管理] タブをクリックします。
- [クラスター管理] ページで、クラスターを見つけて、[アクション]列の [詳細] をクリックします。
- 左側のナビゲーションペインで、 を選択します。
- [構成] タブをクリックします。
- [サービス構成] セクションで、[mapred-site] タブをクリックします。
- Alibaba Cloud EMRコンソール にログインします。
- Hadoopのバージョンに基づいて、ジョブコミッターパラメーターを構成します。
- Hadoop 2.X
[mapred-site] タブで、[mapreduce.outputcommitter.class] パラメーターを com.aliyun.emr.fs.oss.commit.JindoOssCommitter に設定します。
- Hadoop 3.X
[mapred-site] タブで、[mapreduce.outputcommitter.factory.scheme.oss] パラメーターを com.aliyun.emr.fs.oss.commit.JindoOssCommitterFactory に設定します。
- Hadoop 2.X
- 構成を保存します。
- [サービス構成]セクションの右上隅にある [保存] をクリックします。
- [変更の確認] ダイアログボックスで、[説明] を指定し、[構成の自動更新] をオンにします。
- [OK] をクリックします。
- SmartDataサービスの [smartdata-site] タブに移動します。
- 左側のナビゲーションペインで、 を選択します。
- [構成] タブをクリックします。
- [サービス構成] セクションで、[smartdata-site] タブをクリックします。
- [smartdata-site] タブで、[fs.oss.committer.magic.enabled] を true に設定します。
- 構成を保存します。
- [サービス構成]セクションの右上隅にある [保存] をクリックします。
- [変更の確認] ダイアログボックスで、[説明] を指定し、[構成の自動更新] をオンにします。
- [OK] をクリックします。
SparkジョブでJindo OSSコミッターを使用する
- Sparkサービスの [spark-defaults] タブに移動します。
- 左側のナビゲーションペインで、 を選択します。
- [構成] タブをクリックします。
- [サービス構成] セクションで、[spark-defaults] タブをクリックします。
- [spark-defaults] タブで、次の表にリストされているパラメーターを構成します。
パラメーター 説明 spark.sql.sources.outputCommitterClass このパラメーターを com.aliyun.emr.fs.oss.commit.JindoOssCommitter に設定します。 このパラメーターは、Sparkでデータソーステーブルにデータを書き込むために使用されるジョブコミッターを指定します。
spark.sql.parquet.output.committer.class このパラメーターを com.aliyun.emr.fs.oss.commit.JindoOssCommitter に設定します。 このパラメーターは、SparkでParquet形式のデータソーステーブルにデータを書き込むために使用されるジョブコミッターを指定します。
spark.sql.hive.outputCommitterClass このパラメーターを com.aliyun.emr.fs.oss.commit.JindoOssCommitter に設定します。 このパラメーターは、Hiveテーブルにデータを書き込むために使用されるジョブコミッターを指定します。
- 構成を保存します。
- [サービス構成]セクションの右上隅にある [保存] をクリックします。
- [変更の確認] ダイアログボックスで、[説明] を指定し、[構成の自動更新] をオンにします。
- [OK] をクリックします。
- SmartDataサービスの [smartdata-site] タブに移動します。
- 左側のナビゲーションペインで、 を選択します。
- [構成] タブをクリックします。
- [サービス構成] セクションで、[smartdata-site] タブをクリックします。
- [smartdata-site] タブで、[fs.oss.committer.magic.enabled] を true に設定します。説明
fs.oss.committer.magic.enabled
パラメーターを使用して、使用するジョブコミッターを決定できます。 このパラメーターを true に設定すると、Sparkジョブは名前変更操作を必要としない Jindo OSSマジックコミッターを使用します。 このパラメーターを false に設定すると、Jindo OSSコミッターはファイル出力コミッターと同じように機能します。 - 構成を保存します。
- [サービス構成]セクションの右上隅にある [保存] をクリックします。
- [変更の確認] ダイアログボックスで、[説明] を指定し、[構成の自動更新] をオンにします。
- [OK] をクリックします。
Jindo OSSコミッターのパフォーマンスを最適化する
MapReduceタスクまたはSparkタスクが多数のファイルを書き込む場合、ジョブコミット関連タスクに対して同時に実行できるスレッド数を調整できます。 これにより、ジョブコミットのパフォーマンスが向上します。 データレイクシナリオでは、OSSのバケットバージョン管理機能を有効にして、データが誤って削除されるのを防ぐことができます。
- SmartDataサービスの [smartdata-site] タブに移動します。
- 左側のナビゲーションペインで、 を選択します。
- [構成] タブをクリックします。
- [サービス構成] セクションで、[smartdata-site] タブをクリックします。
- [smartdata-site] タブで、[fs.oss.committer.threads] パラメーターを 8 に設定します。デフォルト値は 8 です。
- 構成を保存します。
- [サービス構成]セクションの右上隅にある [保存] をクリックします。
- [変更の確認] ダイアログボックスで、[説明] を指定し、[構成の自動更新] をオンにします。
- [OK] をクリックします。
Jindo OSSマジックコミッターのパフォーマンスを最適化する
データレイクシナリオでは、OSSのバケットバージョン管理機能を有効にして、データが誤って削除されるのを防ぐことができます。 バケットバージョン管理機能が有効になっている場合、ディレクトリでファイルが頻繁に作成または削除される可能性があります。 この場合、ディレクトリに対するリスト操作のパフォーマンスに影響します。 Jindo OSSマジックコミッターは、SmartData 3.4.0で最適化され、この問題が修正されています。 Jindo OSSマジックコミッターを使用すると、一時ディレクトリとファイルは履歴バージョンとともに削除されます。 これにより、リスト操作のパフォーマンスが冗長な一時ディレクトリとファイルの影響を受けないようになります。 デフォルトでは、Jindo OSSマジックコミッターを使用すると、履歴一時ディレクトリを自動的にクリアする機能が有効になります。
この機能を無効にする場合は、ジョブのコードで [fs.jfs.cache.oss.delete-marker.dirs] パラメーターを空のままにするか、SmartDataサービスページのsmartdata-siteタブで [fs.jfs.cache.oss.delete-marker.dirs] パラメーターを temporary,.staging,.hive-staging,__magic に設定します。
Jindo OSSダイレクトコミッターを使用する
バケットバージョン管理機能が有効になっている場合、Jindo OSSダイレクトコミッターを使用して、出力データを宛先ディレクトリに直接書き込むことができます。 データ書き込みプロセス中に一時ファイルは生成されません。 Jindo OSSダイレクトコミッターを使用するには、ジョブコミッターに関連するパラメーターを com.aliyun.emr.fs.oss.commit.direct.JindoOssDirectCommitter に設定する必要があります。
- YARNサービスを使用する場合は、YARNサービスページの mapreduce.outputcommitter.classcom.aliyun.emr.fs.oss.commit.direct.JindoOssDirectCommitter[mapred-site] タブで、 パラメーターを に設定します。
- Sparkサービスを使用する場合は、Sparkサービスページの [spark-default] タブで、次の表に示すパラメーターを構成します。
パラメーター 説明 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 に変更します。