YARN 共用快取提供上傳和管理共用應用程式資源至 HDFS 的功能,且安全且可擴充。YARN 應用程式可以利用其他應用程式或同一應用程式的先前執行上傳的資源,而不用重複上傳和本機化相同的檔案多次。這將節省網路資源並減少 YARN 應用程式啟動時間。
目前 YARN 共享快取已發布並準備就緒。主要元件已實作,並已部署在大型製作環境中。仍有一些部分遺失(例如強式驗證)。這些遺失的功能將作為後續第二階段工作的一部分實作。請參閱 YARN-7282 以取得更多資訊。
共享快取功能包含 4 個主要元件
YARN 應用程式開發人員和使用者應使用共享快取用戶端與共享快取互動。此用戶端負責與共享快取管理員互動,計算應用程式資源的檢查碼,並在共享快取中宣告應用程式資源。一旦應用程式宣告資源,即可在應用程式生命週期中自由使用該資源。請參閱 SharedCacheClient.java javadoc 以取得進一步的文件。
共享快取 HDFS 目錄儲存所有共享快取資源。它受到 HDFS 權限保護,且可全球讀取,但寫入權限僅限受信任的使用者。此 HDFS 目錄僅由共享快取管理員和節點管理員上的資源上傳器修改。資源使用資源的檢查碼散布在多個子目錄中
/sharedcache/a/8/9/a896857d078/foo.jar /sharedcache/5/0/f/50f11b09f87/bar.jar /sharedcache/a/6/7/a678cb1aa8f/job.jar
共享快取管理員負責處理來自用戶端的請求,並管理共享快取的內容。它負責 HDFS 中的元資料和持續資源。它由兩個主要元件組成,一個後端儲存和一個清除服務。SCM 以獨立的守護程序程序執行,可以放置在叢集中的任何節點上。這允許管理員在不影響其他 YARN 元件(例如資源管理員或節點管理員)的情況下啟動/停止/升級 SCM。
後端儲存負責維護和持續共享快取的元資料。這包括快取中的資源、上次使用資源的時間,以及目前正在使用該資源的應用程式清單。後端儲存的實作是可插入的,它目前使用重新啟動後重新建立其狀態的記憶體中儲存。
清除服務透過確保不再使用的資源已從快取中移除,來維護 HDFS 中的持續資源。它會定期掃描快取中的資源,並在資源過期且目前沒有應用程式正在使用該應用程式時,將其驅逐。
共用快取上傳程式是在節點管理員上執行的服務,它會將資源新增到共用快取中。它負責驗證資源檢查碼、將資源上傳到 HDFS,並通知共用快取管理員已將資源新增到快取中。請務必注意,上傳程式服務與容器啟動是異步的,且不會阻擋 Yarn 應用程式的啟動。此外,以盡力而為的方式將項目新增到快取中,且不會影響正在執行的應用程式。一旦上傳程式已將資源置於共用快取中,YARN 便會使用一般的節點管理員本機化機制,讓應用程式可以使用資源。
若要支援 YARN 共用快取,應用程式必須在應用程式提交期間使用共用快取用戶端。如果共用快取中存在資源,共用快取用戶端會傳回對應的 URL。若要使用快取資源,YARN 應用程式只需使用快取的 URL 建立 LocalResource 物件,並在應用程式提交期間將 setShouldBeUploadedToSharedCache 設為 true。
例如,以下是使用快取 URL 建立 LocalResource 的方式
String localPathChecksum = sharedCacheClient.getFileChecksum(localPath); URL cachedResource = sharedCacheClient.use(appId, localPathChecksum); LocalResource resource = LocalResource.newInstance(cachedResource, LocalResourceType.FILE, LocalResourceVisibility.PUBLIC size, timestamp, null, true);
管理員可以遵循下列步驟,來初步設定共用快取
/hadoop/bin/yarn --daemon start sharedcachemanager
組態參數可以在 yarn-default.xml 中找到,且應在 yarn-site.xml 檔案中設定。以下是組態參數及其預設值的清單
名稱 | 說明 | 預設值 |
---|---|---|
yarn.sharedcache.enabled | 是否啟用共用快取 | false |
yarn.sharedcache.root-dir | 共用快取的根目錄 | /sharedcache |
yarn.sharedcache.nested-level | 在到達檢查總和目錄之前,巢狀目錄的層級。它必須是非負數。 | 3 |
yarn.sharedcache.store.class | 要使用的 SCM 儲存實作 | org.apache.hadoop.yarn.server.sharedcachemanager.store.InMemorySCMStore |
yarn.sharedcache.app-checker.class | 要使用的 SCM 應用程式檢查實作 | org.apache.hadoop.yarn.server.sharedcachemanager.RemoteAppChecker |
yarn.sharedcache.store.in-memory.staleness-period-mins | 如果從最後一次參照以來經過的時間超過陳舊期,則會將 in-memory 儲存中的資源視為陳舊。此值以分鐘為單位指定。 | 10080 |
yarn.sharedcache.store.in-memory.initial-delay-mins | in-memory 儲存執行第一次檢查以移除無效初始應用程式之前的初始延遲。以分鐘為單位指定。 | 10 |
yarn.sharedcache.store.in-memory.check-period-mins | in-memory 儲存檢查以移除無效初始應用程式的頻率。以分鐘為單位指定。 | 720 |
yarn.sharedcache.admin.address | SCM(共用快取管理員)中管理員介面的地址 | 0.0.0.0:8047 |
yarn.sharedcache.admin.thread-count | 用於處理 SCM 管理員介面的執行緒數目(預設為 1) | 1 |
yarn.sharedcache.webapp.address | SCM(共用快取管理員)中 Web 應用程式的地址 | 0.0.0.0:8788 |
yarn.sharedcache.cleaner.period-mins | 清理器任務執行的頻率。以分鐘為單位指定。 | 1440 |
yarn.sharedcache.cleaner.initial-delay-mins | 在排定第一個清理器任務之前的初始延遲。以分鐘為單位指定。 | 10 |
yarn.sharedcache.cleaner.resource-sleep-ms | 處理每個共用快取資源之間的休眠時間。以毫秒為單位指定。 | 0 |
yarn.sharedcache.uploader.server.address | SCM(共用快取管理員)中節點管理員介面的地址 | 0.0.0.0:8046 |
yarn.sharedcache.uploader.server.thread-count | 用於處理來自節點管理員的共用快取管理員要求的執行緒數目(預設為 50) | 50 |
yarn.sharedcache.client-server.address | SCM(共用快取管理員)中用戶端介面的地址 | 0.0.0.0:8045 |
yarn.sharedcache.client-server.thread-count | 用於處理來自用戶端的共用快取管理員要求的執行緒數目(預設為 50) | 50 |
yarn.sharedcache.checksum.algo.impl | 用於計算檔案檢查總和的演算法(預設為 SHA-256) | org.apache.hadoop.yarn.sharedcache.ChecksumSHA256Impl |
yarn.sharedcache.nm.uploader.replication.factor | 共用快取的節點管理員上傳程式的複製因子(預設為 10) | 10 |
yarn.sharedcache.nm.uploader.thread-count | 從節點管理員實例上傳檔案所使用的執行緒數目(預設為 20) | 20 |