すべてのプロダクト
Search
ドキュメントセンター

E-MapReduce:Jindoジョブコミッターの使用

最終更新日:Apr 14, 2025

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コミッターを使用する

  1. YARNサービスの [mapred-site] タブに移動します。
    1. Alibaba Cloud EMRコンソール にログインします。
    2. 上部のナビゲーションバーで、クラスターが存在するリージョンを選択し、ビジネス要件に基づいてリソースグループを選択します
    3. [クラスター管理] タブをクリックします。
    4. [クラスター管理] ページで、クラスターを見つけて、[アクション]列の [詳細] をクリックします。
    5. 左側のナビゲーションペインで、[クラスターサービス] > [YARN] を選択します。
    6. [構成] タブをクリックします。
    7. [サービス構成] セクションで、[mapred-site] タブをクリックします。
  2. 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 に設定します。

  3. 構成を保存します。
    1. [サービス構成]セクションの右上隅にある [保存] をクリックします。
    2. [変更の確認] ダイアログボックスで、[説明] を指定し、[構成の自動更新] をオンにします。
    3. [OK] をクリックします。
  4. SmartDataサービスの [smartdata-site] タブに移動します。
    1. 左側のナビゲーションペインで、[クラスターサービス] > [smartdata] を選択します。
    2. [構成] タブをクリックします。
    3. [サービス構成] セクションで、[smartdata-site] タブをクリックします。
  5. [smartdata-site] タブで、[fs.oss.committer.magic.enabled]true に設定します。
  6. 構成を保存します。
    1. [サービス構成]セクションの右上隅にある [保存] をクリックします。
    2. [変更の確認] ダイアログボックスで、[説明] を指定し、[構成の自動更新] をオンにします。
    3. [OK] をクリックします。
説明 [mapreduce.outputcommitter.class] パラメーターを com.aliyun.emr.fs.oss.commit.JindoOssCommitter に設定した後、[fs.oss.committer.magic.enabled] パラメーターを使用して、使用するジョブコミッターを決定できます。 このパラメーターを true に設定すると、MapReduceジョブは名前変更操作を必要としない Jindo OSSマジックコミッターを使用します。 このパラメーターを false に設定すると、Jindo OSSコミッターはファイル出力コミッターと同じように機能します。

SparkジョブでJindo OSSコミッターを使用する

  1. Sparkサービスの [spark-defaults] タブに移動します。
    1. 左側のナビゲーションペインで、[クラスターサービス] > [spark] を選択します。
    2. [構成] タブをクリックします。
    3. [サービス構成] セクションで、[spark-defaults] タブをクリックします。
  2. [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テーブルにデータを書き込むために使用されるジョブコミッターを指定します。

  3. 構成を保存します。
    1. [サービス構成]セクションの右上隅にある [保存] をクリックします。
    2. [変更の確認] ダイアログボックスで、[説明] を指定し、[構成の自動更新] をオンにします。
    3. [OK] をクリックします。
  4. SmartDataサービスの [smartdata-site] タブに移動します。
    1. 左側のナビゲーションペインで、[クラスターサービス] > [smartdata] を選択します。
    2. [構成] タブをクリックします。
    3. [サービス構成] セクションで、[smartdata-site] タブをクリックします。
  5. [smartdata-site] タブで、[fs.oss.committer.magic.enabled]true に設定します。
    説明 fs.oss.committer.magic.enabled パラメーターを使用して、使用するジョブコミッターを決定できます。 このパラメーターを true に設定すると、Sparkジョブは名前変更操作を必要としない Jindo OSSマジックコミッターを使用します。 このパラメーターを false に設定すると、Jindo OSSコミッターはファイル出力コミッターと同じように機能します。
  6. 構成を保存します。
    1. [サービス構成]セクションの右上隅にある [保存] をクリックします。
    2. [変更の確認] ダイアログボックスで、[説明] を指定し、[構成の自動更新] をオンにします。
    3. [OK] をクリックします。

Jindo OSSコミッターのパフォーマンスを最適化する

MapReduceタスクまたはSparkタスクが多数のファイルを書き込む場合、ジョブコミット関連タスクに対して同時に実行できるスレッド数を調整できます。 これにより、ジョブコミットのパフォーマンスが向上します。 データレイクシナリオでは、OSSのバケットバージョン管理機能を有効にして、データが誤って削除されるのを防ぐことができます。

  1. SmartDataサービスの [smartdata-site] タブに移動します。
    1. 左側のナビゲーションペインで、[クラスターサービス] > [smartdata] を選択します。
    2. [構成] タブをクリックします。
    3. [サービス構成] セクションで、[smartdata-site] タブをクリックします。
  2. [smartdata-site] タブで、[fs.oss.committer.threads] パラメーターを 8 に設定します。
    デフォルト値は 8 です。
  3. 構成を保存します。
    1. [サービス構成]セクションの右上隅にある [保存] をクリックします。
    2. [変更の確認] ダイアログボックスで、[説明] を指定し、[構成の自動更新] をオンにします。
    3. [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 に変更します。