全部產品
Search
文件中心

E-MapReduce:Jindo Job Committer使用說明

更新時間:Jul 01, 2024

Smartdata 3.4.x之前版本支援JindoOssCommitter,Smartdata 3.4.x及後續版本, 針對OSS Bucket開啟多版本功能多情況,增加支援JindoOssDirectCommitter。

背景資訊

Job Committer是MapReduce和Spark等分散式運算架構的一個基礎組件,用來解決分布式任務寫資料的一致性問題。

Jindo Job Committer是阿里雲E-MapReduce針對OSS情境開發的高效Job Committer,基於OSS的Multipart Upload介面,支援OSS Filesystem層的定製化。使用Jindo Job Committer時,Task資料直接寫到最終目錄中,在完成Job Commit前,過程資料對外不可見,徹底避免了Rename操作,同時保證資料的一致性。

重要
  • OSS拷貝資料的效能,針對不同的使用者或Bucket會有差異,可能與OSS頻寬以及是否開啟某些進階特性等因素有關,具體問題可以諮詢OSS的支援人員。
  • 在所有任務都完成後,MapReduce Application Master或Spark Driver執行最終的Job Commit操作時,會有一個短暫的時間視窗。時間視窗的大小和檔案數量線性相關,可以通過增大fs.oss.committer.threads以提高並發處理的速度。
  • Hive和Presto等沒有使用Hadoop的Job Committer。
  • E-MapReduce叢集中已預設開啟Jindo Oss Committer的參數。

在MapReduce中使用JindoOssCommitter

  1. 進入YARN服務的mapred-site頁簽。
    1. 登入阿里雲E-MapReduce控制台
    2. 在頂部功能表列處,根據實際情況選擇地區和資源群組
    3. 單擊上方的叢集管理頁簽。
    4. 叢集管理頁面,單擊相應叢集所在行的詳情
    5. 在左側導覽列中,選擇叢集服務 > YARN
    6. 單擊配置頁簽。
    7. 服務配置地區,單擊mapred-site頁簽。
  2. 針對Hadoop不同版本,在YARN服務中配置以下參數。
    • Hadoop 2.x版本

      在YARN服務的mapred-site頁簽,設定mapreduce.outputcommitter.classcom.aliyun.emr.fs.oss.commit.JindoOssCommitter

    • Hadoop 3.x版本

      在YARN服務的mapred-site頁簽,設定mapreduce.outputcommitter.factory.scheme.osscom.aliyun.emr.fs.oss.commit.JindoOssCommitterFactory

  3. 儲存配置。
    1. 單擊右上方的儲存
    2. 確認修改對話方塊中,輸入執行原因,開啟自動更新配置
    3. 單擊確定
  4. 進入SmartData服務的smartdata-site頁面。
    1. 在左側導覽列中,選擇叢集服務 > SmartData
    2. 單擊配置頁簽。
    3. 服務配置地區,單擊smartdata-site頁簽。
  5. 在SmartData服務的smartdata-site頁簽,設定fs.oss.committer.magic.enabledtrue
  6. 儲存配置。
    1. 單擊右上方的儲存
    2. 確認修改對話方塊中,輸入執行原因,開啟自動更新配置
    3. 單擊確定
說明 在設定mapreduce.outputcommitter.classcom.aliyun.emr.fs.oss.commit.JindoOssCommitter後,可以通過開關fs.oss.committer.magic.enabled便捷地控制所使用的Job Committer。當開啟時,MapReduce任務會使用無需Rename操作的Jindo Oss Magic Committer,當關閉時,JindoOssCommitter和FileOutputCommitter行為一樣。

在Spark中使用JindoOssCommitter

  1. 進入Spark服務的spark-defaults頁面。
    1. 在左側導覽列單擊叢集服務 > Spark
    2. 單擊配置頁簽。
    3. 服務配置地區,單擊spark-defaults頁簽。
  2. 在Spark服務的spark-defaults頁面,配置以下參數。
    參數描述
    spark.sql.sources.outputCommitterClasscom.aliyun.emr.fs.oss.commit.JindoOssCommitter

    寫入資料至Spark DataSource表的Job Committer。

    spark.sql.parquet.output.committer.classcom.aliyun.emr.fs.oss.commit.JindoOssCommitter

    寫入資料至Spark Parquet格式的DataSource表的Job Committer。

    spark.sql.hive.outputCommitterClasscom.aliyun.emr.fs.oss.commit.JindoOssCommitter

    寫入資料至Hive表的Job Committer。

  3. 儲存配置。
    1. 單擊右上方的儲存
    2. 確認修改對話方塊中,輸入執行原因,開啟自動更新配置
    3. 單擊確定
  4. 進入SmartData服務的smartdata-site頁簽。
    1. 在左側導覽列單擊叢集服務 > SmartData
    2. 單擊配置頁簽。
    3. 服務配置地區,單擊smartdata-site頁簽。
  5. 在SmartData服務的smartdata-site頁簽,設定fs.oss.committer.magic.enabledtrue
    說明 您可以通過開關fs.oss.committer.magic.enabled便捷地控制所使用的Job Committer。當開啟時,Spark任務會使用無需Rename操作的Jindo Oss Magic Committer,當關閉時,JindoOssCommitter和FileOutputCommitter行為一樣。
  6. 儲存配置。
    1. 單擊右上方的儲存
    2. 確認修改對話方塊中,輸入執行原因,開啟自動更新配置
    3. 單擊確定

最佳化JindoOssCommitter效能

當MapReduce或Spark任務寫大量檔案的時候,您可以調整MapReduce Application Master或Spark Driver中並發執行Commit相關任務的線程數量,以提升Job Commit效能。在資料湖情境下,可以通過開啟 OSS 的多版本功能進行資料保護,防止資料勿刪等情況的發生。

  1. 進入SmartData服務的smartdata-site頁面。
    1. 在左側導覽列中,選擇叢集服務 > SmartData
    2. 單擊配置頁簽。
    3. 服務配置地區,單擊smartdata-site頁簽。
  2. 在SmartData服務的smartdata-site頁面,設定fs.oss.committer.threads8
    預設值為8。
  3. 儲存配置。
    1. 單擊右上方的儲存
    2. 確認修改對話方塊中,輸入執行原因,開啟自動更新配置
    3. 單擊確定

最佳化Jindo Oss Magic Committer效能

在資料湖情境下,您可以通過開啟OSS的多版本功能來保護資料,防止資料勿刪等情況。在OSS Bucket開啟多版本的情況下,如果在相同目錄下頻繁執行建立和刪除操作,會降低目錄List效能。因此,在SmartData 3.4.0版本最佳化了Jindo Oss Magic Committer效能,對於臨時目錄和檔案,會連同歷史版本一起刪除,避免冗餘的臨時目錄影響List效能。使用Jindo Oss Magic Committer時,預設開啟臨時目錄歷史版本清理功能。

如果需要關閉自動清理功能,您可以在作業中設定fs.jfs.cache.oss.delete-marker.dirs為空白字元,或者在SmartData服務的smartdata-site頁面,修改fs.jfs.cache.oss.delete-marker.dirs temporary,.staging,.hive-staging,__magic

使用JindoOssDirectCommitter

對於開啟多版本的Bucket,可以使用JindoOssDirectCommitter,避免產生臨時檔案,直接輸出到目標目錄。您可以修改Committer的配置為com.aliyun.emr.fs.oss.commit.direct.JindoOssDirectCommitter,以使用JindoOssDirectCommitter。

根據您的需求修改對應的配置,以開啟JindoOssDirectCommitter功能。
  • 如果是YARN服務,您可以在mapred-site頁面,修改mapreduce.outputcommitter.classcom.aliyun.emr.fs.oss.commit.direct.JindoOssDirectCommitter
  • 如果是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