百度在2008年就开始使用Hadoop作为其离线数据分析平台,从Hadoop v0.18/0.19开始,300台机器,2个集群,现在的规模为2W台节点以上,最大集群接近4,000节点,每日处理数据20PB+,每日作业数120,000+
Hadoop在百度主要用于如下场景:
- 日志的存储和统计;
- 网页数据的分析和挖掘;
- 商业分析,如用户的行为和广告关注度等;
- 在线数据的反馈,及时得到在线广告的点击情况;
- 用户网页的聚类,分析用户的推荐度及用户之间的关联度。
百度和其它公司对Hadoop的应用最大的不同是对源代码做了大量的修改,当Hadoop 2.0官方版本还没有出来时,百度就已经在开发自己的Hadoop 2.0,如下图所示:
HDFS 1.0面临的问题有:
- 集群规模大,Namenode响应变慢
- Namenode单点,切换时间太长
- 没有数据压缩
- Namespace过于耗用资源
百度自己开发的HDFS 2.0改进了如下功能:
- Namenade热备切换
- 分钟级别切换
- 最坏情况,可能丢失1分钟数据
- 透明数据压缩(利用CPU低谷时压缩、长时间未使用的块才压缩等)
MapReduce 1.0面临的问题有:
- JobTracker单点问题
- 资源粒度过粗(slot)
- 资源利用率不高
百度自己开发的MapReduce 2.0改进了如下功能:
- 可扩展性强(支持万台节点以上)
- 架构松耦合,支持多种计算框架
- 可支持热升级
- 更精细的资源控制
- MR优化:Shuffle独立/Task同质调度