日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

yarn container写token目录选择bug

發(fā)布時間:2023/12/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 yarn container写token目录选择bug 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在nm啟動container的過程中,有一個步驟是把當前的tokens寫入本地目錄,默認情況下具體的調(diào)用的方法是在DefaultContainerExecutor類的startLocalizer?方法中:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ??public?synchronized?void?startLocalizer?(Path?nmPrivateContainerTokensPath, ??????InetSocketAddress?nmAddr,?String?user,?String?appId,?String?locId, ??????List<String>?localDirs,?List<String>?logDirs) ??????throws?IOException,?InterruptedException?{ ????ContainerLocalizer?localizer?= ????????new?ContainerLocalizer(?lfs,?user,?appId,?locId,?getPaths(localDirs), ????????????RecordFactoryProvider.getRecordFactory(getConf())); ????createUserLocalDirs(localDirs,?user);?//Initialize?the?local?directories?for?a?particular?user,create?$local.dir/usercache/$user?and?its?immediate?parent ????createUserCacheDirs(localDirs,?user);?//Initialize?the?local?cache?directories?for?a?particular?user.$local.dir/usercache/$user,$local.dir/usercache/$user/appcache,$local.dir/usercache/$user/filecache ????createAppDirs(localDirs,?user,?appId);?//Initialize?the?local?directories?for?a?particular?user.$local.dir/usercache/$user/appcache/$appi ????createAppLogDirs(appId,?logDirs);?//Create?application?log?directories?on?all?disks.create?$log.dir/$appid ????//?TODO?:?Why?pick?first?app?dir.?The?same?in?LCE?why?not?random? ????Path?appStorageDir?=?getFirstApplicationDir?(localDirs,?user,?appId); ????String?tokenFn?=?String.format(ContainerLocalizer.TOKEN_FILE_NAME_FMT,?locId); ????Path?tokenDst?=?new?Path?(appStorageDir,?tokenFn); ????lfs.util().copy(nmPrivateContainerTokensPath,?tokenDst); ????LOG.info(?"Copying?from?"?+?nmPrivateContainerTokensPath?+?"?to?"?+?tokenDst); ????lfs.setWorkingDirectory(appStorageDir); ????LOG.info(?"CWD?set?to?"?+?appStorageDir?+?"?=?"?+?lfs.getWorkingDirectory()); ????//?TODO?:?DO?it?over?RPC?for?maintaining?similarity? ????localizer.runLocalization(nmAddr); ??}

主要注意?getFirstApplicationDir?(localDirs, user, appId)這一段,先生成token文件的名稱,然后調(diào)用copy的操作把具體的token文件cp到y(tǒng)arn的本地工作目錄。

這里getFirstApplicationDir?方法,傳入的第一個參數(shù)是yarn寫臨時數(shù)據(jù)的目錄,和

1 yarn.nodemanager.local-dirs(List?of?directories?to?store?localized?files?in.)

相關(guān)?

1 2 3 4 ??private?Path?getFirstApplicationDir?(List<String>?localDirs,?String?user, ??????String?appId)?{ ????return?getApplicationDir(?new?Path(localDirs.get(0)),?user,?appId); ??}

而這里使用了localDirs.get(0),再來看下localDirs的生成:

localDirs的獲取定義在ResourceLocalizationService內(nèi)部類LocalizerRunner類的run方法中:

1 2 3 4 ?private?LocalDirsHandlerService?dirsHandler; .... ????????List<String>?localDirs?=?dirsHandler.getLocalDirs(); ????????List<String>?logDirs?=?dirsHandler.getLogDirs();

調(diào)用LocalDirsHandlerService?類:

1 2 3 4 5 6 7 8 ??/**?Local?dirs?to?store?localized?files?in?*/ ??private?DirectoryCollection?localDirs?=?null; ??/**?storage?for?container?logs*/ ??private?DirectoryCollection?logDirs?=?null; ??????localDirs?=?new?DirectoryCollection( ??????????validatePaths(conf.getTrimmedStrings(YarnConfiguration.NM_LOCAL_DIRS))); ??????logDirs?=?new?DirectoryCollection( ??????????validatePaths(conf.getTrimmedStrings(YarnConfiguration.NM_LOG_DIRS)));

這里localDirs?是通過解析yarn.nodemanager.local-dirs配置項的值獲取的,因為配置項是一定的,這就導(dǎo)致得出的localDirs?一直是同一個List,從而導(dǎo)致寫入token的目錄一直是同一個目錄,這其實是一個bug:

https://issues.apache.org/jira/browse/YARN-2566

導(dǎo)致在寫入token文件時,所有的container的token都會寫到同一個目錄,解決的方法其實是使用了隨機數(shù)的方式,具體可以看patch.



本文轉(zhuǎn)自菜菜光 51CTO博客,原文鏈接:http://blog.51cto.com/caiguangguang/1585277,如需轉(zhuǎn)載請自行聯(lián)系原作者

總結(jié)

以上是生活随笔為你收集整理的yarn container写token目录选择bug的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。