本文主要介紹JindoOssCommitter的使用說明。

背景信息

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中使用Jindo Job Committer

  1. 進入YARN服務的mapred-site頁簽。
    1. 登錄阿里云E-MapReduce控制臺
    2. 在頂部菜單欄處,根據實際情況選擇地域(Region)和資源組
    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中使用Jindo Job Committer

  1. 進入Spark服務的spark-defaults頁簽。
    1. 在左側導航欄單擊集群服務 > Spark
    2. 單擊配置頁簽。
    3. 服務配置區域,單擊spark-defaults頁簽。
  2. 在Spark服務的spark-defaults頁簽,設置以下參數。
    參數 參數值
    spark.sql.sources.outputCommitterClass com.aliyun.emr.fs.oss.commit.JindoOssCommitter
    spark.sql.parquet.output.committer.class com.aliyun.emr.fs.oss.commit.JindoOssCommitter
    spark.sql.hive.outputCommitterClass com.aliyun.emr.fs.oss.commit.JindoOssCommitter

    這三個參數分別用來設置寫入數據到Spark DataSource表、Spark Parquet格式的DataSource表和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. 單擊確定

優化Jindo Job Committer性能

當MapReduce或Spark任務寫大量文件的時候,您可以調整MapReduce Application Master或Spark Driver中并發執行Commit相關任務的線程數量,提升Job Commit性能。

  1. 進入SmartData服務的smartdata-site頁簽。
    1. 在左側導航欄單擊集群服務 > SmartData
    2. 單擊配置頁簽。
    3. 服務配置區域,單擊smartdata-site頁簽。
  2. 在SmartData服務的smartdata-site頁簽,設置fs.oss.committer.threads8
    默認值為8。
  3. 保存配置。
    1. 單擊右上角的保存
    2. 確認修改對話框中,輸入執行原因,開啟自動更新配置
    3. 單擊確定