大数据处理框架Hadoop介绍

大数据处理框架Hadoop介绍

  海量数据的诞生,催生了以Hadoop为代表的一系列数据处理框架的面世,为海量数据分析提供了强大的支撑力量。Hadoop是一个被广泛应用于集群环境中的海量数据分布式处理框架。下面,我们就来科普性地认识一下Hadoop!

1 背景

  大数据时代,我们已经很难估算全球电子设备中存储的数据总量有多少;同时,随着智能终端、物联网、社交媒体等的广泛普及,各行各业均在谋求数字化转型、高质量发展,因此也更难预测在将来我们的社会所产生的数据量级。海量的数据隐藏着巨大的社会价值、经济价值…如何收集、存储、分析海量的数据,进而科学地指导社会各界进行决策,早已成为产业界和学术界广泛研究的热点。在数据的处理阶段,开源社区和产业界给出了一个优秀的分布式数据处理框架——Hadoop!本篇,我们将介绍Hadoop的主要用途、发展历史以及其相关组件(HDFS、YARN、MapReduce)的简要信息。

2 Hadoop从哪里来?

  Hadoop由Apache软件基金会的主席道格.卡丁(Doug Cutting)创建,其创建过程还与其创建的其他两个项目Lucene和Nutch有关。Apache Nutch是一个开源网络搜索引擎,是Lucene项目的一部分,在Nutch发展的过程中,又分化出了Hadoop项目。
在这里插入图片描述
  用一张图描述,大概就是这样,最终Hadoop自立门派,成为了Apache的顶级项目。

  Nutch项目开始于2002年,这项工作开创了一个优化搜索引擎算法的平台,并且可以运行网页爬取工具。后来,它的创造者觉得它的灵活性不够,不足以解决数十亿网页的搜索问题。正逢此时,Google于2003年发表的The Google File System(GFS,谷歌分布式文件系统)架构可以帮助他们解决在网页爬取和索引过程中产生的超大文件的存储需求。关键的是,GFS能够节省系统管理所花的大量时间。基于此,Nutch的开发者于2004年开始了GFS开源版本的实现,即Nutch分布式文件系统(NDFS)。
  2004年,Google又推出了它的MapReduce系统,2005年初,Nutch的开发人员又在Nutch上实现了一个MapReduce系统,到年中,Nutch的所有主要算法均完成移植,实现了用MapReduce和NDFS来运行。
  Nutch中的MapReduce和NDFS,不只适用于搜索领域。2006年2月,开发人员将MapReduce和NDFS移出Nutch形成Lucene的一个子项目,命名为Hadoop。大约在同一时间,Doug Cutting加入了Yahoo!,Yahoo!为此组织了专门的团队和资源,将Hadoop发展成能够以Web网络规模运行的系统。
  2008年1月,Hadoop已经成为Apache的顶级项目。2008年2月,Yahoo!宣布其搜索引擎使用的索引运行在1万内核的Hadoop集群上。

  值得被特别提出的一点是,在2013年,Hortonworks联合Yahoo!、facebook、Microsoft等公司完成的一项工作被发表在了SoCC会议上,这篇论文是Apache Hadoop YARN: Yet Another Resource Negotiator。Hadoop最初的设计目标是为了在大型集群上运行庞大的MapReduce作业来解决网页搜索问题,但是伴随着Hadoop被广泛地采用,它已经变成了许多公司共享数据和计算资源的计算工具,可以说被无处不在地使用,使得Hadoop的适用范围已经远超最初的设计目标。这一过程暴露了Hadoop的两个关键缺点:1)Hadoop中自带的MapReduce编程模型与底层资源管理紧密耦合,使得开发人员滥用MapReduce编程模型;2)集中处理作业的控制流,导致了调度器成为了系统可伸缩性的瓶颈,严重阻碍了系统的扩展。
  基于这些考虑,企业界的开发人员开始了新的探索来对Hadoop进行升级,他们提出了适用于Hadoop的下一代计算平台——YARN。它是一个可以将编程模型和资源管理解耦合的平台,它为上层计算框架提供整块可用资源,更进一步的资源划分由每个作业对应的计算框架(如MapReduce)来负责。这一设计极大地提升了Hadoop的灵活性和可扩展性,YARN的引入,也使Hadoop进入了2.0时代。在此之前的1.0时代,资源分配和作业调度都由MapReduce来集中控制,而YARN的引入,使得计算中心的资源分配形成了双层式的架构,这一架构后来被广泛采用,在YARN之上除了可以支持MapReduce,还可以支持Spark等其他众多计算框架。
  目前,Hadoop被主流企业广泛使用。在工业界,Hadoop已经成为公认的大数据通用存储和分析平台。

3 Hadoop里面有啥?

  通常来讲,Hadoop的核心组件主要包括了支持其他模块的通用基础库Hadoop Common;高吞吐、高可靠的分布式文件系统HDFS;集群资源管理和任务调度框架Hadoop YARN和基于YARN的并行处理系统Hadoop MapReduce。这其中每一个组件,若想理解其内部机理,都需要相当的篇幅来介绍。因此,在这里,仅简要介绍各组件的功能或概念。若想了解其内部原理,欢迎关注我的后期更新。

3.1 HDFS

  当数据集的大小超过一台独立计算机的存储能力时,有必要对数据及进行划分(Partition)并存储到多台独立的物理计算机上。管理网络中跨多台计算机存储的系统被称为分布式文件系统(Distributed Filesystem),该系统构建与网络之上,便不可避免地引入了网络编程的复杂性,因此分布式文件系统,相比普通的磁盘文件系统而言更复杂,其管理和开发也更具难度。

  HDFS是Hadoop内部自带的分布式文件系统,即Hadoop Distributed Filesystem。它的设计思想来源于Google的GFS。通俗来讲,HDFS就是部署在Hadoop底层,进行数据管理,并能高效稳定地向上层提供计算数据的组件。

3.2 Hadoop MapReduce

  MapReduce是一种可用于数据处理的编程模型。该模型比较简单,但想要写出可用的程序却不太容易。

  MapReduce任务过程分为两个处理阶段:map阶段和reduce阶段。每个阶段都以键-值(key-value)对作为输入和输出,其类型由程序员来选择。程序员还需要实现两个函数:map函数和reduce函数。
  此处,用一个 简单的实例来说明MapReduce的工作过程。考虑这样一个实例:需要统计一个文本文件中每一个单词出现的次数。在下方给出使用MapReduce实现这一问题的伪代码和实例。

map(String key, String value):
    // key: document name
    // value: document contents
    for each word w in value:
	EmitIntermediate(w, "1");
reduce(String key, Iterator values):
    // key: a word
    // values: a list of counts
    int result = 0;
    for each v in values:
        result += ParseInt(v);
    Emit(AsString(result));

例如对于4个如下初始文本,分别放置在4台服务器中存储,现在要统计出每个单词的出现次数。
Text1:the weather is good
Text2:today is good
Text3:good weather is good
Text4:today has good weather
在map阶段,首先在4个map节点上切分出各个语句中的每一个单词,四个服务器分别得到如下中间结果:

map节点1~4的计算结果如下表所示:

keyvaluekeyvaluekeyvaluekeyvalue
the1today1good1today1
weather1is1weather1has1
is1good1is1good1
good1good1weather1

  各个节点上完成统计之后,对中间结果稍加处理,方便后续reduce过程的进行。例如,对中间结果按照key值进行排序,得到的中间结果为:
在这里插入图片描述
  对排序后的结果,同一节点上将键值(key)相同的项进行合并,得到如下图所示的中间结果:
在这里插入图片描述
  每个map节点都完成以后,就要进入reduce阶段了。假如我们只使用3个reduce节点,那么程序员需要自定义规则将4个map节点上得出的中间结果重新映射到3个reduce节点上,这一过程在MapReduce中也称成为shuffle.
在这里插入图片描述
  以上基本就是MapReduce的处理流程了。

3.3 Hadoop YARN

  前面已经提到,YARN是在Hadoop2.0中才被引入的,主要负责分布式处理框架中的资源管理和作业调度问题。作为Hadoop的核心组件之一,YARN负责将系统资源分配给在HAdoop集群中运行的各种应用程序,并调度要在不同集群节点上执行的任务。
  其基本思想是将资源管理和作业调度/监视的功能分解为单独的Daemon(守护进程),其拥有一个全局资源管理器ResourceManager(RM)和每个应用程序的应用控制器ApplicationMaster(AM),同时在每个节点上还有一个节点管理器NodeManager(NM)。ResourceManager和 NodeManager构成了数据计算框架。ResourceManager维护系统的所有可用和已被占用资源的信息,并在所有应用程序之间仲裁资源的最终权限。Nodemanager是每台服务器的代理进程,负责其资源使用情况(CPU、内存、磁盘、网络),并将其报告给ResourceManager。而每个应用程序的ApplicationMaster的任务是协调来自ResourceManager的资源,并与NodeManager一起执行和监视任务。

4 Hadoop能做什么?

  思来想去,也没想清楚该怎么回答“Hadoop能做什么”这个问题,因为范围太大。宽泛来讲,Hadoop可以高效地处理数据,抽取数据中的隐藏信息,但是若想更进一步了解其功能,我认为较好的方法是结合一个具体的应用背景,和数据处理的case,就可以有更深刻的理解。目前觉得这个问题难以回答,还有一个原因就是我的水平有限。我尽力在后续介绍关于Hadoop的技术细节的过程中,引进一个具体的case,方便大家理解。

  可以说,这篇文章没有涉及太多技术细节,理解起来不是很有难度,对于Hadoop,我觉得只能算一个科普性的介绍。更多的技术细节,会在后续的更新中和大家见面。

  对于文章内容,若有问题或者不一致的看法,欢迎在评论区提出讨论。由于个人水平有限,理解有误,表达不当等原因导致的内容错误,在所难免,欢迎批评指正。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值