很久没有发博客了, 最近这段时间工作上、生活上杂事比较多。最近经常有人问我在学校还是在公司。其实之前在学校读研, 入研之前工作过几年。那时候在学校研究MapReduce, 部署了10台的PC机做些Hadoop与机器学习的研究。08年末觉得学校限制我的发展, 就联系了几家公司实习。最后我到了淘宝实习了一年半, 那时候因为身份还是学生, 前期主要维护淘宝的Hadoop集群, 后期主要研发Hive, 同时向社区贡献了一些代码。半年前我正式入职了淘宝, 担任数据平台的分布式计算组组长, 主要负责Hadoop MapReduce及Hive的研发。
严重跑题了, 转回正题。前段时间淘宝由于业务的数据突增, 集群规模不断扩容, 集群上运行的作业更是日益增长。由于淘宝的Hadoop数据性质与搜索公司有所不一样: 淘宝的数据一般为数十MB至数百GB不等, 而大型的搜索公司的输入数据经常为TB级别以上。所以搜索公司的Hadoop作业经常有以下特征:
- long term型, 可以运行数小时甚至数天
- 作业比较大, 占用的slots数可达上万个或数十万个
- 因为作业都偏大, 集群能同时吞吐的作业数不多, 导致每天完成的作业数目不多
符合以上特征的Hadoop集群, 研发人员有几点会考虑:
- 作业运行时间偏长, 万一失败就前功尽弃了, 所以最好作业有阶段性成果, 所以会考虑实现作业运行时运态添加Input Path.
- 由于数据量非常大, 导致NameNode的元数据非常多. NameNode采用CMS GC也经常会因为内存碎片, 导致young generation promote至old generation失败而形成full GC. 当然, 有一些办法能抑制full GC的频率. 但元数据的内存瓶颈始终是个问题.
- 由于数据量非常大, NameNode重启时处理各DataNode节点的block report时间非常长。
- 由于作业偏大, JobTracker在处理heartbeat的时候会经常卡在getTasksToKill()方法里。这个方法会从taskidToTIPMap取得task id 对应的TaskInProgress对象. 全局的job数目不多, 而每个job都偏大, 所以全局的task数目会很多. 这个TreeMap取数据的时间会偏长。
- ...
以上是我在0.01秒时间内能想到的一些问题, 仅能代表其中的1%问题. 而淘宝的Hadoop作业有以下特征:
- short term型, 大多数运行几分钟或十几分钟.绝大多数在半小时之内。
- 作业都比较小, 占用的slot数一般为数千
- 因为作业偏小, 集群能同时吞吐的作业数比较多。繁忙的时候同时运行的作业有几百个, 每天完成的作业可达数万个.
- 各作业的依赖性比较大, 后面一组作业的开始时间受限前一组作业的结束时间。
符合这种特征的Hadoop集群, 会碰到这些情况:
- 同时运行的作业数多, 目前Hadoop常用的调度器计算作业优先级的算法时间复杂度为O(NlogN), assign tasks的时间复杂度为O(N). 调度器的效率是一个比较大的问题.
- 同时运行的作业数多, JobTracker在处理heartbeat的时候会经常卡在getSetupAndCleanupTasks()方法里。这个方法会遍历JobTracker存储的所有jobs.
作为个案,淘宝所使用的Hadoop集群还有以下特征及问题:
- 淘宝使用的最大集群——云梯是与集团其它公司共用的, 由阿里云的一个team维护。这样可以节约成本, 但作业的优先级及slots数目的分配都比较繁琐, 这对调度器的公平性要求比较高。
- 淘宝数据平台的数据同时向公司的各部门开放,也共享于集团的各子公司。所以,UGO的数据安全也满足不了需要。
- 淘宝数据平台的Hadoop下游产品时效性要求比较高。生产作业在上班之前完成可以满足量子统计、数据魔方等产品的需要,如果没有完成则会有一系列买卖家的投诉
当然以上两种集群只要规模上了1000台, 问题就会更多。 RPC, NameNode锁、JobTracker锁、及DataNode, TaskTracker的问题都是一大堆。我们于12月初解决了JobTracker的一些性能问题, 但是NameNode的吞吐量一直没有上来。针对这些问题我们开了几次紧急会议, 会议的决定是由我负责开展一个NameNode优化专门项目。经过大约一个月的努力, 我们的NameNode吞吐量已经上升8+倍。接下来的笔记将连载我们是如何发现NameNode的问题, 并进行NameNode优化的,敬请期待!
分享到:
相关推荐
Hadoop Namenode性能诊断及优化
NameNode职责
hdfs的namenode的元数据管理机制,简要画出了元数据管理的流程分析
NameNode及SecondaryNameNode分析
NULL 博文链接:https://snv.iteye.com/blog/1884565
未知原因导致namenode 的fsimage等文件丢失,namenode重启失败的参考解决
hadoop NameNode 源码解析
为了解决HDFS(Hadoop distributed file system)在存储海量小文件时遇到的NameNode内存瓶颈等问题,提高HDFS处理海量小文件的效率,提出一种基于小文件合并与预取的存取优化方案。首先通过分析大量小文件历史访问...
Hadoop Namenode恢复
在Hadoop集群整个生命周期里,由于调整参数、Patch、升级等多种场景需要频繁操作NameNode重启,不论采用何种架构,重启期间集群整体存在可用性和可靠性的风险,所以优化NameNode重启非常关键。本文基于Hadoop-2.x和...
详细讲解了Hdfs中NameNode节点的配置,备份和恢复,以及secondNamenode的配置
【大数据入门笔记系列】第四节 NameNode元数据缓存机制NameNode如何防止内存中的元数据无限膨胀?如何降低元数据丢失风险?SecondaryNameNodecheckpoint触发条件设定后记跳转 NameNode如何防止内存中的元数据无限...
妳那伊抹微笑自己整理的Hadoop笔记,有以下内容: Day1 搭建伪分布实验环境 Day2 介绍HDFS体系结构及shell、java操作方式 Day3 介绍MapReduce体系结构(1) Day4 介绍MapReduce体系结构(2) Day5 介绍Hadoop集群、...
今天小编就为大家分享一篇关于Hadoop之NameNode Federation图文详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
王家林的“云计算分布式大数据Hadoop实战高手之路---从零开始”的第九讲Hadoop图文训练课程:剖析NameNode和Secondary NameNode的工作机制和流程. 此教程来自于王家林免费发布的3本Hadoop教程:云计算分布式大数据...
最新的hdfs namenode主备安装文档,详细,命令只需要copy执行即可
第5章 NameNode和SecondaryNameNode(面试开发重点) 5.1 NN和2NN工作机制 思考:NameNode中的元数据是存储在哪里的? 首先,我们做个假设,如果存储在NameNode节点的磁盘中,因为经常需要进行随机访问,还有响应...
原因是:当第一次连接的时候,在datanode主机上存放临时文件的目录下(我的为hdptmp),hdptmp/dfs/data/current/version中保存了两个id号,当namenode主机格式化后会生成新的id,再次连接的时候,新的id与原来的id...
大家都知道HDFS的架构由NameNode,SecondaryNameNode和DataNodes组成,其源码类图如下图所示:正如上图所示,NameNode和DataNode继承了很多的protocol用于彼此间的通信,其实nameNode还实现了...实现了ClientProtocol...