马上要开始第二阶段优化了,赶快把第一阶段优化内容及结果贴下。
•背景
–繁忙时段98%~100%的handler线程被BLOCK
–RPC请求堆积
•Profiling工具 (定位瓶颈)
–jstack线上环境使用
–yjp测试环境使用
优化一:避免频繁调用加锁方法
•500次连续jstack结果分析
–jt.getTasksToKill:15631.2%
-- tip.shouldClose 155 99.3%
-- tip.isComplete 155 100%
•synchronized方法比non-synchronized方法慢10-15倍
•优化方法:避免调用加锁的TIP::isComplete()
优化前,TIP::isComplete()方法占总CPU时间达36%:
优化后:已经在图中消失,即比例非常小。
优化二:避免比较JobID
优化前,TIP::shouldClose()方法占到了总CPU时间的19%
•优化方案:
–TreeMap增加Comparator
–新增只比较id的tip.isComplete(tid)方法
优化后只有1%了:
优化三:降低JT::getTasksToKill()方法的时间复杂度
•优化getTasksToKill()
–优化前每次心跳遍历TaskTracker上所有task
–优化后每次心跳遍历TaskTracker上running
task
•TaskTracker上completed
tasks >> running task
优化后,心跳已经不占主要操作:
顺便说下优化三是非常给力的,举个例子:
一个1w个map+5k个reduce的作业,当执行reduce时,map全部处于完成状态。这段时间每次心跳都要遍历这1w的map;
而tasktracker上running
tasks的个数的最大值是个常数,也就是slots的配置。
因此这个改动是可以理解为复杂度降低了一个数量级。
优化四:降低Scheduler::updateTaskCounts()时间复杂度
•优化Scheduler.updateTaskCounts()
–优化前:遍历job的每个task统计runningMaps|Reduces
& neededMaps|Reduces
–优化后:直接从JobInProgress中读取上述统计值
优化总结
•根本原因:
–单点
–心跳需要持有JobTracker大锁
•优化的关键是定位瓶颈
•消除一个瓶颈后,很快会出现下一个瓶颈
•终极方案:mr2 (0.23)
本次优化的最大成果是,在2000台集群上成功启动了TaskTracker的oob心跳。
分享到:
相关推荐
JobTracker Mac 菜单栏应用程序 Hadoop JobTracker 的 Mac 菜单栏应用程序界面。 它使您可以轻松访问 JobTracker 中的作业,并提供有关开始、完成和失败作业的 Growl/通知中心通知。 请参阅了解更多信息并下载二...
MapReduceV1实现中,主要存在3个主要的分布式进程(角色):JobClient、JobTracker和TaskTracker,我们主要是以这三个角色的实际处理活动为主线,并结合源码,分析实际处理流程。上一篇我们分析了Job提交过程中...
#资源达人分享计划#
我们基于Hadoop1.2.1源码分析MapReduceV1的处理流程。这篇文章的内容,更多地主要...JobTracker与TaskTracker之间通过org.apache.hadoop.mapred.InterTrackerProtocol协议来进行通信,TaskTracker通过该接口进行远程调
TaskTracker周期性地向JobTracker发送心跳报告,在RPC调用返回结果后,解析结果得到JobTracker下发的运行Task的指令,即LaunchTaskAction,就会在TaskTracker节点上准备运行这个Task。Task的运行是在一个与...
Jobtracker是您的求职伴侣,可帮助您保持求职的顶峰! 记录和跟踪:只需单击一下,即可保存流行网站中的求职申请和网络联系人。 扩大您的网络:从Springboard社区发现网络和推荐机会。 日志和跟踪:使用Springboard...
自述文件该自述文件通常会记录启动和运行应用程序所需的所有步骤。 您可能要讲的内容: Ruby版本系统依赖配置数据库创建数据库初始化如何运行测试套件服务(作业队列,缓存服务器,搜索引擎等) 部署说明...
在MapReduce程序运行的过程中,JobTracker端会在内存中维护一些与Job/Task运行相关的信息,了解这些内容对分析MapReduce程序执行流程的源码会非常有帮助。在编写MapReduce程序时,我们是以Job为单位进行编程处理,一...
JobTracker是一款适用于申请科技行业实习和全职工作的大学生的应用程序,可帮助他们组织工作申请。 为什么要使用这个应用程序? 目前,大学生使用 Excel 电子表格、Google Sheets 电子表格或跟踪他们的实习和新毕业...
工作追踪器 1.0 在此处部署版本: : 这里的后端存储库: : 一个使用 React、express、node 和 MongoDB 从头构建的 jobtracker 应用程序! 在寻找新的下一个机会的同时跟踪我申请的所有工作!
语言:English 该扩展使学生可以快速管理他们的工作申请截止日期。 就业吧! 通过此扩展程序,用户只需单击两次即可将“握手”作业的最后期限添加到其Google日历中。 它还只需一步即可添加来自其他网站的事件。
这种模式也是在一台单机上运行,但用不同的Java进程模仿分布式运行中的各类结点(NameNode,DataNode,JobTracker,TaskTracker,SecondaryNameNode),请注意分布式运行中的这几个结点的区别:从分布式存储的角度来说,...
用戶編寫的MapReduce程序通過Client提交到JobTracker端;同時,用戶可通過Client提供的一些接口查看作業運行狀態。在Hadoop內部用“作業” (Job)表示MapReduce程序。每一個Job都會在用戶端通過Client類將應用程序...
JobTracker 和 TaskTracker JobTracker 对应于 NameNode TaskTracker 对应于 DataNode DataNode 和 NameNode 是针对数据存放来⽽⾔的 JobTracker 和 TaskTracker 是对于 MapReduce 执⾏⽽⾔的 mapreduce 中⼏个主要...
mapred.sh 停⽌Hadoop MapReduce守护进程JobTracker和TaskTracker hadoop-daemons.sh start jobtracker 单独启动JobTracker守护进程 hadoop-daemons.sh stop jobtracker 单独停⽌JobTracker守护进程 hadoop-daemons....
jobtracker:跟踪您发送的求职申请的应用程序。 显示每日进度,允许按天排序,并提供后续提醒。
jobs 分布式任务调度平台