从 hadoop 1.0 到 hadoop 2.0 的演化

简介: Hadoop 1.0 到 Hadoop 2.0 的演化是怎样的呢,从中我们又能学到什么。。。

1. 概述

在 Google 三篇大数据论文发表之后,Cloudera 公司在这几篇论文的基础上,开发出了现在的 Hadoop 。但 Hadoop 开发出来也并非一帆风顺的,Hadoop 1.0 版本有诸多局限。在后续的不断实践之中, Hadoop 2.0 横空出世,而后 Hadoop 2.0 逐渐成为主流。这次我们就来看看 Hadoop 从 1.0 遇到了哪些问题,又为什么需要做架构的升级呢?

2. Hadoop 1.0

首先我们来看 hadoop1.0 的整体结构。在 hadoop1.0 中有两个模块,一个是分布式文件系统 HDFS(Hadoop Distrbuted File System) 。另一个则是分布式计算框架 MapReduce 。我们分别来看看这两个模块的架构吧。

2.1 HDFS

对HDFS来说,其主要的运行架构则是 master-slave 架构,即主从架构。其中呢,master 主节点称之为 Namenode 节点,而slave从节点称为 DataNode 节点。

这个NameNode的职责是什么呢?

  1. NameNode管理着整个文件系统,负责接收用户的操作请求
  2. NameNode管理着整个文件系统的目录结构,所谓目录结构类似于我们Windows操作系统的体系结构
  3. NameNode管理着整个文件系统的元数据信息,所谓元数据信息指定是除了数据本身之外涉及到文件自身的相关信息
  4. NameNode保管着文件与block块序列之间的对应关系以及block块与DataNode节点之间的对应关系

在hadoop1.0中,namenode有且只有一个,虽然可以通过SecondaryNameNode与NameNode进行数据同步备份,但是总会存在一定的延时,如果NameNode挂掉,但是如果有部份数据还没有同步到SecondaryNameNode上,还是可能会存在着数据丢失的问题。

值得一提的是,在HDFS中,我们真实的数据是由DataNode来负责来存储的,但是数据具体被存储到了哪个DataNode节点等元数据信息则是由我们的NameNode来存储的。

这种架构实现的好处的简单,但其局限同样明显:

  • 单点故障问题:因为NameNode含有我们用户存储文件的全部的元数据信息,当我们的NameNode无法在内存中加载全部元数据信息的时候,集群的寿命就到头了。
  • 拓展性问题:NameNode在内存中存储了整个分布式文件系统中的元数据信息,并且NameNode只能有一台机器,无法拓展。单台机器的NameNode必然有到达极限的地方。
  • 性能问题:当HDFS中存储大量的小文件时,会使NameNode的内存压力增加。
  • 隔离性问题:单个namenode难以提供隔离性,即:某个用户提交的负载很大的job会减慢其他用户的job。

2.2 MapReduce

对MapReduce来说,同样时一个主从结构,是由一个JobTracker(主)和多个TaskTracker(从)组成。

而JobTracker在hadoop1.0的MapReduce中做了很多事情,可以说当爹又当妈。

  1. 负责接收client提交给的计算任务。
  2. 负责将接收的计算任务分配给各个的TaskTracker进行执行。
  3. 通过heartbeat(心跳)来管理TaskTracker机器的情况,同时监控任务task的执行状况。

这个架构的缺陷:

  • 单点故障:依旧是单点故障问题,如果JobTracker挂掉了会导致MapReduce作业无法执行。
  • 资源浪费:JobTracker 完成了太多的任务,造成了过多的资源消耗,当 map-reduce job 非常多的时候,会造成很大的内存开销,潜在来说,也增加了 JobTracker 失效的风险,这也是业界普遍总结出老 Hadoop 的 Map-Reduce 只能支持 4000 节点主机的上限;
  • 只支持简单的MapReduce编程模型:要使用Hadoop进行编程的话只能使用基础的MapReduce,而无法使用诸如Spark这些计算模型。并且它也不支持流式计算和实时计算。

3. Hadoop 2.0


Hadoop 2.0 比起 Hadoop 1.0 来说,最大的改进是加入了 资源调度框架 Yarn ,我们依旧分为HDFS和 Yarn/MapReduce2.0 两部分来讲述Hadoop的改进。

3.1 HDFS

针对 Hadoop 1.0 中 NameNode 制约HDFS的扩展性问题,提出HDFS Federation 以及高可用 HA 。此时 NameNode 间相互独立,也就是说它们之间不需要相互协调。且多个NameNode分管不同的目录进而实现访问隔离和横向扩展。

这样 NameNode 的可拓展性自然而然可用增加,据统计 Hadoop 2.0 中最多可以达到 10000 个节点同时运行,并且这样的架构改进也解决了NameNode单点故障问题。

再来说说高可用 (HA) , HA 主要指的是可以同时启动2个 NameNode 。其中一个处于工作 (Active) 状态,另一个处于随时待命(Standby)状态。这样,当一个NameNode所在的服务器宕机时,可以在数据不丢失的情况下,手工或者自动切换到另一个 NameNode 提供服务。

3.2 Yarn/MapReduce2

针对 Hadoop 1.0 中 MR 的不足,引入了Yarn 框架。Yarn 框架中将 JobTracker 资源分配和作业控制分开,分为 Resource Manager (RM) 以及 Application Master (AM) 。

而Yarn框架作为一个通用的资源调度和管理模块,同时支持多种其他的编程模型,比如最出名的 Spark 。

Yarn的主要三个组件如下:

  • Resource Manager:ResourceManager包含两个主要的组件:定时调用器(Scheduler)以及应用管理器(ApplicationManager)。

    1. 定时调度器(Scheduler):定时调度器负责向应用程序分配资源,它不做监控以及应用程序的状态跟踪,并且它不保证会重启由于应用程序本身或硬件出错而执行失败的应用程序。
    2. 应用管理器(ApplicationManager):应用程序管理器负责接收新任务,协调并提供在ApplicationMaster容器失败时的重启功能。
  • Application Master:每个应用程序的ApplicationMaster负责从Scheduler申请资源,以及跟踪这些资源的使用情况以及任务进度的监控。
  • Node Manager:NodeManager是ResourceManager在每台机器的上代理,负责容器的管理,并监控他们的资源使用情况(cpu,内存,磁盘及网络等),以及向 ResourceManager/Scheduler提供这些资源使用报告。

一点点感悟

没有什么是一开始就完美的,当下最流行的 Hadoop 也一样。从上面说的,我们可以知道 Hadoop 1.0 是比较简陋的,这样做的目的就是为了易于实现。Hadoop 这样做也契合了敏捷开发的原则,也可以说契合产品经理口中的最小可行性产品(MVP),就是先实现一个简单些,但核心功能齐全的版本出来,让市场对其进行检验,而有了结果之后再进行拓展升级。

在当时那种许多公司都苦恼于没有自己的大数据环境的情况下,Hadoop 一炮而红。这时候再根据市场,也就是开源社区给出的反馈,不断迭代,更新升级。最终成为大数群山中最为坚固的一座山峰。

我们在平时的产品开发中应该也要像 Hadoop 学习,先做出最小可行性产品出来,再在后面进行更新升级,不断完善。当然这对一些完美主义者来说,可能会让他感到比较痛苦。

你看,世间的事多是相通,技术的发展过程其实也暗合产品之道。有时候我们或许可以跳出技术之外,思考它背后产品的逻辑,这其中又有哪些是我们可以学习的,这些同样是珍贵的宝藏,所谓他山之石,可以攻玉,莫过于此~~

以上~


欢迎关注公众号,有数据,代码和深度的思考。
PS:关注后回复“数据挖掘一”可获得数据挖掘思维导图

哈尔的数据城堡

相关文章
|
SQL 存储 分布式计算
3月5日JindoFS系列直播【Hadoop Job committer 的演化和发展】
Job Committer是Mapreduce/Spark等分布式计算框架的重要组成部分,为分布式任务的写入提供一致性的保证,本次分享主要介绍Job Committer的演进历史,以及社区和EMR在S3/OSS等云存储上的最新进展。
3月5日JindoFS系列直播【Hadoop Job committer 的演化和发展】
|
SQL 存储 分布式计算
3月5日JindoFS系列直播【Hadoop Job committer 的演化和发展】
Job Committer是Mapreduce/Spark等分布式计算框架的重要组成部分,为分布式任务的写入提供一致性的保证,本次分享主要介绍Job Committer的演进历史,以及社区和EMR在S3/OSS等云存储上的最新进展。
 3月5日JindoFS系列直播【Hadoop Job committer 的演化和发展】
|
大数据 数据库 分布式计算
大数据(一) - hadoop生态系统及版本演化
大数据系列文章汇总链接 - 更新到15篇 HDFS:分布式存储系统(Hadoop Distributed File System):提供了高可靠性、高扩展性和高吞吐率的数据存储服务            HDFS源自于Google的GFS论文 (发表于2003年10月 ),是GFS克隆版YARN...
2192 0
|
存储 分布式计算 Hadoop
【Hadoop Summit Tokyo 2016】将HDFS演化成为广义存储子系统
本讲义出自Sanjay Radia在Hadoop Summit Tokyo 2016上的演讲,主要介绍了HDFS的相关知识以及HDFS的过去以及未来发展的动机,分享了HDFS的优势所在以及面对的主要挑战,并分享了弹性的HDFS以及泛化存储层的存储容器。
2322 0
|
2月前
|
分布式计算 Kubernetes Hadoop
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
177 6
|
2月前
|
分布式计算 资源调度 Hadoop
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
71 2
|
1月前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第27天】在大数据时代,数据湖技术凭借其灵活性和成本效益成为企业存储和分析大规模异构数据的首选。Hadoop和Spark作为数据湖技术的核心组件,通过HDFS存储数据和Spark进行高效计算,实现了数据处理的优化。本文探讨了Hadoop与Spark的最佳实践,包括数据存储、处理、安全和可视化等方面,展示了它们在实际应用中的协同效应。
94 2
|
1月前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第26天】本文详细探讨了Hadoop与Spark在大数据处理中的协同作用,通过具体案例展示了两者的最佳实践。Hadoop的HDFS和MapReduce负责数据存储和预处理,确保高可靠性和容错性;Spark则凭借其高性能和丰富的API,进行深度分析和机器学习,实现高效的批处理和实时处理。
65 1
|
2月前
|
分布式计算 Hadoop 大数据
大数据体系知识学习(一):PySpark和Hadoop环境的搭建与测试
这篇文章是关于大数据体系知识学习的,主要介绍了Apache Spark的基本概念、特点、组件,以及如何安装配置Java、PySpark和Hadoop环境。文章还提供了详细的安装步骤和测试代码,帮助读者搭建和测试大数据环境。
66 1
|
2月前
|
存储 分布式计算 资源调度
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(一)
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(一)
78 5

相关实验场景

更多