TaskTracker内部原理——作业目录管理

MapReduce计算过程中,中间数据要落盘,但是这些数据不存在备份,一旦丢失,就要重新计算。所以为了提高数据的可靠性和并发写性能,Hadoop允许TaskTracker配置多个挂在不同磁盘的目录作为中间结果存放目录,对于任意一个作业,Hadoop会在每个磁盘中创建相同的目录结构,然后采用轮询策略使用这些目录(由类LocalDirAllocator实现)
TaskTracker上的目录分两种:数据目录和日志目录,数据目录存放执行任务所必须的数据(比如jar包、作业配置文件)和运行中临时产生的数据;日志目录存放TaskTracker和Task运行时输出日志。

数据目录
TaskTracker在每个磁盘上为作业创建了相同的目录结构,且采用轮询的方式使用这些目录。
对于一个task,可能创建工作目录work和输出目录output,为了分摊写负载,TaskTracker可能将work目录和output目录分配到不同的磁盘中。
考虑到Reduce Task可能会运行失败,且每个Reudce Task要从所有Map Task中获取部分输入,因此,所有任务目录不会在作业运行过程中被删除,而是确认作业运行完成后,统一将其删除。

日志目录

日志目录创建:
不同于数据目录,hadoop只允许TaskTracker将日志目录存在一个磁盘上,TaskTracker包含两种日志:系统日志和用户日志,系统日志放在< tasktracker-name >.log和< tasktracker-name >.out 中,用户日志放userlogs目录下,且按照不同作业不同任务分别建立子目录。
假如TaskTracker上任务多、日志量大,则这种日志目录组织方式可能称为TaskTracker的性能瓶颈,所以,引入了多磁盘日志目录组织方式:系统日志仍被放到hadoop.log.dir下,但用户日志将被采用轮询的方式将分布到mapred.local.dir指定的各个磁盘目录下。

日志目录清理:
UserLogManager负责,两个重要的成员变量:taskLogsTruncater和userLogCleaner,分别用于日志剪裁和日志清理。

taskLogsTruncater:实现文件剪裁功能,当任务运行完成后,对文件进行剪裁, 避免文件过大,可配置参数决定Map Task和Reduce Task最大可保留的日志文件大小。

userLogCleaner:TaskTracker将日志保存到磁盘,可能导致磁盘压力过大, 所以定期要清理。默认保留时间为24小时,超过这个时间,TaskTracker就会将作业日志从磁盘上清除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值