很久没有发博客了, 最近这段时间工作上、生活上杂事比较多。最近经常有人问我在学校还是在公司。其实之前在学校读研, 入研之前工作过几年。那时候在学校研究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生态系统包含了一系列子项目,每个子项目都针对特定的数据处理任务进行了优化。 - **HDFS (Hadoop Distributed File System)**:这是Hadoop的核心组成部分之一,提供了一种高度可靠的分布式文件存储解决方案...
5. Combiner优化:Combiner是MapReduce的一种局部reduce操作,可以在本地减少数据传输量,提高效率。它的设计原则是,Combiner的输出应与Reduce的输入兼容。 6. MapReduce与HDFS的交互:MapReduce任务直接在HDFS上...
本篇笔记将深入探讨Hadoop和YARN的基本原理以及它们在大数据处理中的作用。 首先,大数据的特点可以用4V来概括:大量(Volume)、高速(Velocity)、多样(Variety)和低价值密度(Value)。由于数据量巨大,传统的...
在“传智黑马赵星老师hadoop七天课程资料笔记-第四天(全)”的学习中,我们深入探讨了Hadoop这一分布式计算框架的关键概念和技术。Hadoop是Apache软件基金会的一个开源项目,它设计用于处理和存储海量数据,通过...
总之,搭建Hadoop集群是一项复杂但关键的任务,涉及到硬件准备、软件安装、配置优化以及故障处理等多个环节。只有深入了解这些知识点,才能确保Hadoop集群的稳定运行,为大数据处理提供强大支持。通过不断地实践和...
NameNode作为主节点负责元数据管理,DataNode则实际存储数据,而Secondary NameNode则是NameNode的热备份,用于定期合并NameNode的编辑日志,减少NameNode重启时的恢复时间。 2. **分布式计算**:MapReduce是Hadoop...
例如,NameNode与DataNode之间的交互,MapReduce任务调度等,都是通过RPC实现的。Hadoop的RPC框架提供了高效的通信和容错机制,确保分布式系统的稳定运行。 五、RPC编程的关键点 1. 协议选择:选择合适的序列化和...
本笔记将详细阐述如何配置 Hadoop 3.3.1 集群,以便高效地管理和运行大数据任务。 **一、系统需求与环境准备** 1. **硬件要求**:为了搭建 Hadoop 集群,需要至少两台或更多的服务器或虚拟机,每台机器应具有足够的...
这个压缩包“hadoop笔记打包下载(想学hadoop不下载后悔)”显然是一个丰富的学习资源集合,涵盖了Hadoop生态系统的多个重要组成部分。下面将详细解释这些关键知识点。 1. **Hadoop HDFS(Hadoop Distributed File ...
本笔记将深入探讨Hadoop的分布式安装过程,帮助读者理解如何在多台机器上构建一个高效、可靠的Hadoop集群。 首先,Hadoop是Apache软件基金会的一个开源项目,其核心设计目标是处理和存储海量数据。它采用了分片...
《传智播客Hadoop资料文档和笔记》是一份针对Hadoop技术的综合学习资源,由知名教育机构传智播客提供。这份资料涵盖了Hadoop生态系统的各个方面,旨在帮助学习者深入理解并掌握这一分布式计算框架的核心概念和技术。...
Apache Pig 是一个基于 Hadoop 的大规模数据分析工具,提供了 SQL-LIKE 语言叫 Pig Latin,该语言的编译器会把类 SQL 的数据分析请求转换为一系列经过优化处理的 MapReduce 运算。 Apache HBase 是一个高可靠性、高...
例如,一个10GB的文件会被切分成约80个块,根据NameNode的分配策略,这些块会在DataNode之间分布,并汇报存储结果。 NameNode是HDFS的关键组件,负责整个文件系统的元数据管理。它维护着文件系统命名空间(目录结构...
【标题】:“安装笔记:hadoop+hbase+sqoop2+phoenix+kerberos” 【描述】:在本文中,我们将探讨如何在两台云主机(实际环境可能需要三台或更多)上安装Hadoop、HBase、Sqoop2、Phoenix以及Kerberos的详细过程,...
《Hadoop 2.6.0-cdh5.4.3 源码解析与学习笔记》 在当今大数据处理领域,Hadoop 是一个至关重要的开源框架,它为大规模数据处理提供了分布式计算的能力。本资料主要针对 Hadoop 2.6.0-cdh5.4.3 版本进行源码阅读,...
### Hadoop 安装及详细学习笔记 #### Hadoop 概述 Hadoop 是一个能够对大量数据进行分布式处理的软件框架,它旨在提供高扩展性、可靠性和高效性,适用于处理PB级别的数据集。Hadoop 的核心组件包括 HDFS(Hadoop ...
当客户端写文件时,NameNode分配DataNode,形成一个pipeline,数据被分割成128MB的块并逐个写入DataNode,每个DataNode写完块后返回确认信息,最终由NameNode收到完成信号。 总的来说,理解并掌握这些概念和技术...
【Hadoop集群环境搭建】 Hadoop是一个开源的分布式计算框架,它允许在大规模...在实际生产环境中,还需要考虑更多的配置和优化,如配置Hadoop的日志聚合、安全认证(如Kerberos)、YARN以替换旧版的MapReduce框架等。
【Hadoop笔记】\n\nHadoop是Apache软件基金会开发的一个开源框架,专门处理大数据的存储和计算。它设计的初衷是为了支持分布式存储和并行处理,使得在廉价硬件上处理PB级别的数据成为可能。Hadoop的核心组件包括HDFS...