1.概述

在yarn中对 yarn.nodemanager.local-dirs的状态更新操作,定义在 LocalDirsHandlerService(org.apache.hadoop.yarn.server.nodemanager.LocalDirsHandlerService)相关类中,在nm启动时,会启动一个LocalDirsHandlerService服务,循环检测yarn.nodemanager.local-dirs和yarn.nodemanager.log-dirs目录的可用性,本质上其实是用java.util.Timer 和java.util.TimerTask 实现的一个服务线程。

LocalDirsHandlerService的内部类 MonitoringTimerTask扩展了TimerTask类

通过MonitoringTimerTas的构造函数对进行初始化,比如获取设置的yarn.nodemanager.log-dirs和yarn.nodemanager.local-dirs 设置有效的local路径

这个线程常用的参数:

YarnConfiguration.NM_DISK_HEALTH_CHECK_INTERVAL_MS
//yarn.nodemanager.disk-health-checker.interval-ms 默认是2分钟
YarnConfiguration.NM_DISK_HEALTH_CHECK_ENABLE
//yarn.nodemanager.disk-health-checker.enable 默认是开启
YarnConfiguration.NM_MIN_HEALTHY_DISKS_FRACTION
//yarn.nodemanager.disk-health-checker.min-healthy-disks 默认是0.25,即最少应该是1/4的设置路径是正常的

在cdh4.6.0中,MonitoringTimerTask的构造函数如下:

  public MonitoringTimerTask( Configuration conf) throws YarnException {localDirs = new DirectoryCollection(validatePaths(conf.getTrimmedStrings(YarnConfiguration.NM_LOCAL_DIRS)));logDirs = new DirectoryCollection(validatePaths(conf.getTrimmedStrings(YarnConfiguration.NM_LOG_DIRS)));localDirsAllocator = new LocalDirAllocator(YarnConfiguration.NM_LOCAL_DIRS);logDirsAllocator = new LocalDirAllocator( YarnConfiguration.NM_LOG_DIRS);}

而在cdh5.2.0中,构造函数多了两个配置项

YarnConfiguration.NM_MAX_PER_DISK_UTILIZATION_PERCENTAGE
//percentage of disk that can be used before the dir is taken out of the good dirs list
//yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage 默认是100(这个值需要改成小于100,比如80,否则容易出现磁盘满地问题)
YarnConfiguration.NM_MIN_PER_DISK_FREE_SPACE_MB
//minimum space, in MB, that must be available on the disk for the dir to be marked as good
//yarn.nodemanager.disk-health-checker.min-free-space-per-disk-mb 默认是0MB
在检查localdirs的初始可用性会考虑到这两个设置(validatePaths方法)

  public MonitoringTimerTask( Configuration conf) throws YarnRuntimeException {float maxUsableSpacePercentagePerDisk =conf.getFloat(YarnConfiguration.NM_MAX_PER_DISK_UTILIZATION_PERCENTAGE,YarnConfiguration.DEFAULT_NM_MAX_PER_DISK_UTILIZATION_PERCENTAGE);long minFreeSpacePerDiskMB =conf.getLong( YarnConfiguration.NM_MIN_PER_DISK_FREE_SPACE_MB,YarnConfiguration.DEFAULT_NM_MIN_PER_DISK_FREE_SPACE_MB);localDirs =new DirectoryCollection(validatePaths(conf.getTrimmedStrings( YarnConfiguration.NM_LOCAL_DIRS)),maxUsableSpacePercentagePerDisk, minFreeSpacePerDiskMB);logDirs =new DirectoryCollection(validatePaths(conf.getTrimmedStrings( YarnConfiguration.NM_LOG_DIRS)),maxUsableSpacePercentagePerDisk, minFreeSpacePerDiskMB);localDirsAllocator = new LocalDirAllocator(YarnConfiguration.NM_LOCAL_DIRS);logDirsAllocator = new LocalDirAllocator( YarnConfiguration.NM_LOG_DIRS);}

local dirs的判断线程会每隔一段时间对目录的可用性进行测试,调用的方法是

checkDirs---->updateDirsAfterFailure—>areDisksHealthy
可用判断主要是判断错误的目录占配置目录的比例,当yarn.nodemanager.local-dirs或者yarn.nodemanager.log-dirs异常目录占了一定百分比后,磁盘检测就会失败,nm就会抛出异常:

具体的判断逻辑在areDisksHealthy方法中:

public boolean areDisksHealthy() {if (! isDiskHealthCheckerEnabled) { //判断是否开启了磁盘状态检测的功能return true;  }int goodDirs = getLocalDirs().size();int failedDirs = localDirs.getFailedDirs().size();int totalConfiguredDirs = goodDirs + failedDirs;if (goodDirs/( float)totalConfiguredDirs < minNeededHealthyDisksFactor ) { //异常的yarn.nodemanager.local-dirs比例判断return false; // Not enough healthy local- dirs}goodDirs = getLogDirs().size();failedDirs = logDirs.getFailedDirs().size();totalConfiguredDirs = goodDirs + failedDirs;if (goodDirs/( float)totalConfiguredDirs < minNeededHealthyDisksFactor ) { //异常的yarn.nodemanager.log-dirs比例判断return false; // Not enough healthy log- dirs}return true;}

【Yarn】yarn local dirs的管理实现相关推荐

  1. nodejs Yarn替代npm的包管理——快速、安全、可靠性高的依赖管理

    Yarn能帮你解决的五件事 转自: http://www.qingpingshan.com/jb/javascript/185590.html 长话短说(TL;DR):在 JavaScript 领域有 ...

  2. hadoop yarn 获取日志_在 YARN 中简化用户日志的管理和使用

    Hadoop 的用户日志有很多的用途, 首先最重要的是, 它们能用来调试 MapReduce 应用(application)的问题, 可能是应用本身的问题, 或者在极少数的情况下, 当在集群中执行应用 ...

  3. 为什么你应该用Yarn而不是Npm来管理你的项目依赖?

    因为Yarn有离线安装的功能,特别是在国内网络环境不大好的情况下,这个功能尤为有用. 问题 我们经常遇到的一种情况是:你设置好了你的网络,顺利地安装好了一切依赖,写好了package.json,npm ...

  4. [Yarn] Yarn local-dirs are bad 导致节点处于不健康状态

    1.背景 在运行flink的时候报错,参考: 然后在Yarn界面上看到如下 2.原因分析 之所以会有 local-dirs are bad,log-dirs are bad 报错,是因为在我们集群的 ...

  5. flink类加载器原理与隔离(flink jar包冲突)

    flink类加载器原理与隔离 Java 类加载器解决类冲突基本思想 什么是 Classpath? Jar 包中的类什么时候被加载? 哪些行为会触发类的加载? 什么是双亲委派机制? 如何打破双亲委派机制 ...

  6. 大数据基础——Hadoop大数据平台搭建

    文章目录 前言 Hadoop大数据平台搭建 一.Hadoop原理和功能介绍 二.Hadoop安装部署 三.Hadoop常用操作 总结 前言 分布式机器学习为什么需求大数据呢?随着海量用户数据的积累,单 ...

  7. Spark运行模式Local+Standalone+Yarn+mesos

    Spark运行模式Local+Standalone+Yarn+mesos bin/spark-submit --help 注意: --master MASTER_URL spark://host:po ...

  8. Node-包管理工具整套下载使用讲解(nvm、npm、yarn、cnpm、pnpm、nrm)

    前言 包管理工具npm: Node Package Manager,就是Node包管理器 现在已经不仅仅是node的包管理器了,我们前端项目也都会用它来进行管理项目依赖的包 如何下载和安装npm工具 ...

  9. 前端包管理工具 yarn

    yarn 是一个  与 npm 类似的 前端包管理工具 安装 windows  要去官网下载 (一定要去官网下载 .mis 文件进行安装)   用npm 或者 cnpm  也能安装 但是这种安装 有缺 ...

最新文章

  1. 死锁产生条件-请求和保持条件
  2. 人工智能元老痛批IBM:沃森是个骗局,这根本不是认知
  3. MPLS *** Trouble Shooting 笔记
  4. 在linux的weblogic上增加启动参数
  5. UE4学习-请求的操作需要提升
  6. 前端学习(1288):nodejs模块化开发
  7. 华为云携手马栏山文创园助力湖南广电荣获国家广电总局多项大奖
  8. header()函数使用说明
  9. (五)构建和训练深度伪造自动编码器
  10. Axure高保真企业商城后台管理系统web端公司商城后台管理原型连锁门店管理系统交互组件点餐平台商家管理端后台库存管理财务管理系统管理接单管理
  11. java商品类别如何与价格对应_java编写程序实现某超市商品查价功能。从键盘输入商品号,显示对应的商品价格,以“n”结束查询。...
  12. POJ 3134 - Power Calculus (IDDFS)
  13. 路畅畅云固件升级教程_【图】E-Link功能/智能语音 路畅畅云+车载导航评测_汽配中国网...
  14. 用计算机怎么弹两只老虎,七键两只老虎曲谱_64键的电子琴怎么弹两只老虎1234567按哪个键...
  15. Powerdesigner显示表的comment和列的comment的方法
  16. 25个令人难忘的广告设计
  17. 数星星(结构体专题)
  18. I2C器件之PCF8574TS调试记录
  19. 利用身份证号码算年龄 并排序
  20. 4.16 日期的输入和自定义日期的格式 [原创Excel教程]

热门文章

  1. 快手上的cosplay大师有多野?
  2. 华为Mate 40 Pro全新概念图曝光:这设计有点夸张了
  3. 企业微信开放客户朋友圈功能 无需审核即可使用
  4. 全球首富贝索斯离婚第二天 出轨对象女主播宣布离婚...
  5. 嵌入式数据库SQLite的编译、安装和使用[ZT]
  6. Android Studio中手机能连接上ADB不过一直跑不起来(或者应用出现短暂的白屏)
  7. java大数据组件Zookeeper
  8. 深入理解异步Web服务器 Tornado
  9. 怎么用计算机算密码,如何使用福特密码计算器来编程路虎揽胜2010年智能钥匙...
  10. 示波器纹波测试的时间设置_500W电源横评:输出纹波3款电源超标