程序员技术干货

从 hadoop 1.0 到 hadoop 2.0 的演化

2018-12-25  本文已影响17人  大数据_zzzzMing

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 节点。

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

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

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

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

2.2 MapReduce

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

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

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

这个架构的缺陷:

3. Hadoop 2.0

image

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) 。


image

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

Yarn的主要三个组件如下:

一点点感悟

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

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

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

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

以上~


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

哈尔的数据城堡
上一篇下一篇

猜你喜欢

热点阅读