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
- 進入YARN服務的mapred-site頁簽。
- 登入阿里雲E-MapReduce控制台。
- 在頂部功能表列處,根據實際情況選擇地區和資源群組。
- 單擊上方的叢集管理頁簽。
- 在叢集管理頁面,單擊相應叢集所在行的詳情。
- 在左側導覽列中,選擇。
- 單擊配置頁簽。
- 在服務配置地區,單擊mapred-site頁簽。
- 登入阿里雲E-MapReduce控制台。
- 針對Hadoop不同版本,在YARN服務中配置以下參數。
- Hadoop 2.x版本
在YARN服務的mapred-site頁簽,設定mapreduce.outputcommitter.class為com.aliyun.emr.fs.oss.commit.JindoOssCommitter。
- Hadoop 3.x版本
在YARN服務的mapred-site頁簽,設定mapreduce.outputcommitter.factory.scheme.oss為com.aliyun.emr.fs.oss.commit.JindoOssCommitterFactory。
- Hadoop 2.x版本
- 儲存配置。
- 單擊右上方的儲存。
- 在確認修改對話方塊中,輸入執行原因,開啟自動更新配置。
- 單擊確定。
- 進入SmartData服務的smartdata-site頁面。
- 在左側導覽列中,選擇。
- 單擊配置頁簽。
- 在服務配置地區,單擊smartdata-site頁簽。
- 在SmartData服務的smartdata-site頁簽,設定fs.oss.committer.magic.enabled為true。
- 儲存配置。
- 單擊右上方的儲存。
- 在確認修改對話方塊中,輸入執行原因,開啟自動更新配置。
- 單擊確定。
在Spark中使用JindoOssCommitter
- 進入Spark服務的spark-defaults頁面。
- 在左側導覽列單擊。
- 單擊配置頁簽。
- 在服務配置地區,單擊spark-defaults頁簽。
- 在Spark服務的spark-defaults頁面,配置以下參數。
參數 描述 spark.sql.sources.outputCommitterClass com.aliyun.emr.fs.oss.commit.JindoOssCommitter 寫入資料至Spark DataSource表的Job Committer。
spark.sql.parquet.output.committer.class com.aliyun.emr.fs.oss.commit.JindoOssCommitter 寫入資料至Spark Parquet格式的DataSource表的Job Committer。
spark.sql.hive.outputCommitterClass com.aliyun.emr.fs.oss.commit.JindoOssCommitter 寫入資料至Hive表的Job Committer。
- 儲存配置。
- 單擊右上方的儲存。
- 在確認修改對話方塊中,輸入執行原因,開啟自動更新配置。
- 單擊確定。
- 進入SmartData服務的smartdata-site頁簽。
- 在左側導覽列單擊。
- 單擊配置頁簽。
- 在服務配置地區,單擊smartdata-site頁簽。
- 在SmartData服務的smartdata-site頁簽,設定fs.oss.committer.magic.enabled為true。 說明 您可以通過開關
fs.oss.committer.magic.enabled便捷地控制所使用的Job Committer。當開啟時,Spark任務會使用無需Rename操作的Jindo Oss Magic Committer,當關閉時,JindoOssCommitter和FileOutputCommitter行為一樣。 - 儲存配置。
- 單擊右上方的儲存。
- 在確認修改對話方塊中,輸入執行原因,開啟自動更新配置。
- 單擊確定。
最佳化JindoOssCommitter效能
當MapReduce或Spark任務寫大量檔案的時候,您可以調整MapReduce Application Master或Spark Driver中並發執行Commit相關任務的線程數量,以提升Job Commit效能。在資料湖情境下,可以通過開啟 OSS 的多版本功能進行資料保護,防止資料勿刪等情況的發生。
- 進入SmartData服務的smartdata-site頁面。
- 在左側導覽列中,選擇。
- 單擊配置頁簽。
- 在服務配置地區,單擊smartdata-site頁簽。
- 在SmartData服務的smartdata-site頁面,設定fs.oss.committer.threads為8。預設值為8。
- 儲存配置。
- 單擊右上方的儲存。
- 在確認修改對話方塊中,輸入執行原因,開啟自動更新配置。
- 單擊確定。
最佳化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。
- 如果是YARN服務,您可以在mapred-site頁面,修改mapreduce.outputcommitter.class為com.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