MR 支援 YARN 共用快取

概觀

MapReduce 支援 YARN 共用快取,讓 MapReduce 作業能利用額外的資源快取。這會節省作業提交用戶端和 YARN 集群內部的網路頻寬。這將減少作業提交時間和整體作業執行時間。

啟用/停用共享快取

首先,您的 YARN 集群必須執行共享快取服務。請參閱 YARN 文件,了解如何設定共享快取服務。

MapReduce 使用者可以根據資源類型指定哪些資源符合上傳至共享快取的資格。這是透過 mapred-site.xml 中的組態參數來完成

<property>
    <name>mapreduce.job.sharedcache.mode</name>
    <value>disabled</value>
    <description>
       A comma delimited list of resource categories to submit to the
       shared cache. The valid categories are: jobjar, libjars, files,
       archives. If "disabled" is specified then the job submission code
       will not use the shared cache.
    </description>
</property>

如果列出資源類型,它會檢查共享快取以查看資源是否已在快取中。如果是,它會使用快取的資源,如果不是,它會指定需要非同步上傳資源。

為快取指定資源

MapReduce 使用者有 3 種方式可以為 MapReduce 作業指定資源

  1. 透過一般選項剖析器 (例如 -files、-archives、-libjars) 的命令列:如果透過命令列指定資源,且資源類型已啟用共享快取,該資源將使用共享快取。
  2. 分散式快取 API:如果透過分散式快取指定資源,該資源將不會使用共享快取,無論資源類型是否已啟用共享快取。
  3. 共享快取 API:這是新增至 org.apache.hadoop.mapreduce.Job API 的一組新方法。它允許使用者將檔案新增至共享快取、將其新增至共享快取和類別路徑,以及將封存檔新增至共享快取。這些資源會放置在分散式快取中,如果其資源類型已啟用,用戶端也會使用共享快取。

資源命名

確保 MapReduce 作業的每個資源都有唯一的檔案名稱非常重要。這可防止在容器啟動期間,執行 MapReduce 作業的 YARN 容器本機化時發生符號連結覆寫。使用者可以使用 URI 的片段部分來指定自己的資源名稱。例如,對於在命令列中指定的檔案資源,它可能如下所示

-files /local/path/file1.txt#foo.txt,/local/path2/file1.txt#bar.txt

在上述範例中,兩個名為 file1.txt 的檔案將使用兩個不同的名稱本機化:foo.txt 和 bar.txt。

資源可見性

共享快取中的所有資源都具有公開可見性。

共享快取不可用時 MapReduce 用戶端行為

如果共享快取管理員不可用,MapReduce 用戶端會使用快速失敗機制。如果 MapReduce 用戶端無法連絡共享快取管理員,用戶端將不再為該作業提交的其餘部分使用共享快取。這可防止 MapReduce 用戶端每次嘗試檢查共享快取中的資源時都會逾時。MapReduce 用戶端會快速回復為預設行為,並提交作業,就好像一開始從未啟用共享快取一樣。