yarn container写token目录选择bug
在nm启动container的过程中,有一个步骤是把当前的tokens写入本地目录,默认情况下具体的调用的方法是在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文件的名称,然后调用copy的操作把具体的token文件cp到yarn的本地工作目录。
这里getFirstApplicationDir 方法,传入的第一个参数是yarn写临时数据的目录,和
1
|
yarn.nodemanager.local-dirs(List of directories to store localized files in.)
|
相关
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内部类LocalizerRunner类的run方法中:
1
2
3
4
|
private LocalDirsHandlerService dirsHandler;
....
List<String> localDirs = dirsHandler.getLocalDirs();
List<String> logDirs = dirsHandler.getLogDirs();
|
调用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配置项的值获取的,因为配置项是一定的,这就导致得出的localDirs 一直是同一个List,从而导致写入token的目录一直是同一个目录,这其实是一个bug:
https://issues.apache.org/jira/browse/YARN-2566
导致在写入token文件时,所有的container的token都会写到同一个目录,解决的方法其实是使用了随机数的方式,具体可以看patch.
本文转自菜菜光 51CTO博客,原文链接:http://blog.51cto.com/caiguangguang/1585277,如需转载请自行联系原作者
yarn container写token目录选择bug相关推荐
- 如何查看yarn container日志 查看yarn任务所有container信息 yarn gc日志的查看和简单分析
查看yarn任务日志 任务运行中和结束时查看container的日志 GC日志的简单分析 文章目录 一.shell和yarn基础命令准备 二.app日志查看 1. 直接使用yarn logs,可选择指 ...
- 盘点程序员写过的惊天 Bug
欢迎关注方志朋的博客,回复"666"获面试宝典 博雯 发自 凹非寺 量子位 报道 | 公众号 QbitAI 一个Bug就地蒸发5亿美元: 软件设计层面出Bug致6人死亡: DeBu ...
- 盘点程序员写过的惊天Bug:亏损30亿、致6人死亡,甚至差点毁灭世界
点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 来源丨量子位 编辑丨极市平台 导读 "你们的程序员生涯中写 ...
- 迄今为止程序员写过的最大Bug:亏损30亿、致6人死亡,甚至差点毁灭世界
一个Bug就地蒸发5亿美元: 软件设计层面出Bug致6人死亡: DeBug不成功直接世界毁灭. 你职业生涯中写过最大的Bug是什么? 在这个问题上,勇敢的码农们,总是能不断地创造奇迹. 这不禁让路过的 ...
- 【Flink】Unauthorized request to start container. This token is expired. current time is
1.概述 转载:https://blog.csdn.net/weixin_43970890/article/details/102483720 org.apache.hadoop.yarn.excep ...
- 嘿~你想写出五彩斑斓的BUG吗
如果代码的颜色有助于提升效率,那么往下看,如果觉得晃眼睛就没必要往下看了(可能也没机会往下了> _ <) 网盘下载插件:all-color-themes.jar(提取码:gf2x) git ...
- 【错误记录】IntelliJ IDEA 中右键点击源码目录选择 New 选项 没有创建 Java Class 选项 ( 将对应的源码目录标记为 Sources 选项 )
文章目录 一.报错信息 二.解决方案 一.报错信息 右键点击源码目录 , 选择 New 选项创建源码 , 没有任何源码创建选项 ; 二.解决方案 右键点击源码根目录 , 在弹出的菜单中选择 " ...
- 通过yarn上的applicationId杀死hadoop中的任务,或通过hadoop job命令停止任务、yarn container 的日志路径
示例: $ yarn application -kill application_Id hadoop命令行 与job相关的: 命令行工具 • 1.查看 Job 信息: hadoop job -list ...
- python 选择文件对话框插件_[ PyQt入门教程 ] PyQt5基本控件使用:消息弹出、用户输入、文件/目录选择对话框...
本文主要介绍PyQt界面实现中常用的消息弹出对话框.提供用户输入的输入框.打开文件获取文件/目录路径的文件对话框.学习这三种控件前,先想一下它们使用的主要场景: 1.消息弹出对话框.程序遇到问题需要退 ...
最新文章
- 2012年11月14日学习研究报告
- 从PC中向Android模拟器中复制文件
- java中的静态初始化是什么意思,Java中static静态变量的初始化完全解析
- java程序设计复习题_java程序设计复习大全(100题及答案).doc
- show open tables命令 mysql查看哪些表加锁了
- 2014 网选 5024 Wang Xifeng's Little Plot
- Oracle的dbms_jobs 自动计划
- Python strip()与split()方法
- DSDT/SSDT综合教程
- 初学者福利:机器学习项目清单
- 应用ruby打造个性化的有道单词本 (二)
- wifi技术扫盲-MIMO
- TwinCAT软件的帮助如何使用
- 基于vue的前端UI表单设计器
- CSS中的filter与backdrop-filter属性的异同点
- 腾讯T-Star高校挑战赛
- 学java被“劝退”的第九天
- RAID 1 的优点缺点和应用场景
- 达梦数据库除法保留小数
- 暑期练习web25:web code(i春秋)index.php文件包含、base64图片加密