`
阅读更多

Hadoop的概要介绍

Hadoop,是一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。

简单地说来,Hadoop是一个可以更容易开发和运行处理大规模数据的软件平台。该平台使用的是面向对象编程语言Java实现的,具有良好的可移植性。
 

Hadoop的发展历史

       Hadoop是Doug Cutting(Apache Lucene创始人)开发的使用广泛的文本搜索库。Hadoop起源于Apache Nutch,后者是一个开源的网络搜索引擎,本身也是由Lucene项目的一部分。那么我们接下来就先来看一下Nutch的一些发展状况,使得我们对Hadoop的前身有更多的了解。
Nutch项目开始于2002年,一个可工作的抓取工具和搜索系统很快浮出水面。但开发人员很快就意识到,他们的这个架构将无法扩展到拥有数十亿网页的网络。在2003年发表的一篇描述Google分布式文件系统(Google File System,简称GFS)的论文为他们提供了及时的帮助,文中称Google正在使用此文件系统。 GFS或类似的东西,可以解决他们在网络抓取和索引过程中产生的大量的文件的存储需求。具体而言,GFS会省掉管理所花的时间,如管理存储节点。在2004年,他们开始开发一个开放源码的应用,即Nutch的分布式文件系统(NDFS),也就是后来耳熟能详的HDFS的前身。
2004年,Google又发表了一篇论文,向全世界介绍了MapReduce这一伟大的科技成果。 2005年初,Nutch的开发者们又在Nutch上增加了一个可工作的MapReduce应用,到当年的年中,所有主要的Nutch算法被移植到使用MapReduce和NDFS来运行。
    Nutch中的NDFS和MapReduce实现的应用远不只是搜索领域,在2006年2月,他们从Nutch转移出来成为一个独立的Lucene子项目,就是现在流行的开源云计算平台Hadoop。大约在同一时间,Doug Cutting加入雅虎,Yahoo提供一个专门的团队和资源将Hadoop发展成一个可在网络上运行的系统。在2008年2月,雅虎宣布其搜索引擎产品部署在一个拥有1万个内核的Hadoop集群上。至此以后,Hadoop这个词在业界迅速升温,当大家提到云计算的时候就自然而然的想起这个词。

那么,接下来让我见识一下Hadoop这个分布式计算框架的威力吧!2008年4月,Hadoop打破世界纪录,成为最快排序1TB数据的系统。运行在一个910节点的群集,Hadoop在209秒内排序了1 TB的数据(还不到三分半钟),击败了前一年的297秒冠军。同年11月,谷歌在报告中声称,它的MapReduce实现执行1TB数据的排序只用了68秒。 在2009年5月,有报道宣称Yahoo的团队使用Hadoop集群对1 TB的数据进行排序只花了62秒时间。就这样,奇迹一点一滴的在被它不断地创造出来~

 

Hadoop的关键技术

       可以说,Hadoop发展到今天的地步,在很大程度上得益于Google的分布式集群的启发。Google的数据中心使用廉价的Linux PC机组成集群,在上面运行各种应用。即使是分布式开发的新手也可以迅速使用Google的基础设施。核心组件有3个:

  1、GFS(Google File System)。一个分布式文件系统,隐藏下层负载均衡,冗余复制等细节,对上层程序提供一个统一的文件系统API接口。Google根据自己的需求对它进行了特别优化,包括:超大文件的访问,读操作比例远超过写操作,PC机极易发生故障造成节点失效等。GFS把文件分成64MB的块,分布在集群的机器上,使用Linux的文件系统存放。同时每块文件至少有3份以上的冗余。中心是一个Master节点,根据文件索引,找寻文件块。详见Google的工程师发布的GFS论文。

  2、MapReduce。Google发现大多数分布式运算可以抽象为MapReduce操作。Map是把输入Input分解成中间的Key/Value对,Reduce把Key/Value合成最终输出Output。这两个函数由程序员提供给系统,下层设施把Map和Reduce操作分布在集群上运行,并把结果存储在GFS上。

  3、BigTable。一个大型的分布式数据库,这个数据库不是关系式的数据库。像它的名字一样,就是一个巨大的表格,用来存储结构化的数据。

  以上三个设施Google均有论文发表。正是因为有了以上的三项核心技术,才使得Google的分布式框架很有创造性、扩展性,而且在系统吞吐量上有很大的竞争力。
       结合上面讲的一些背景,再来看一下Hadoop这个架构的核心技术吧!
       主要是由HDFS、MapReduce和Hbase组成。HDFS是Google File System(GFS)的开源实现。MapReduce是Google MapReduce的开源实现。HBase是Google BigTable的开源实现。这里就不多说了,具体的每个核心技术的原理会在后续的文章里面一点一点的介绍,毕竟也是刚开始学,边学边成长吧!
 

Hadoop的一些特点

       1、 扩容能力(Scalable):能可靠地(reliably)存储和处理千兆字节(PB)数据。在不保证低延时的前提下,具有相当大的吞吐量,非常适合海量数据的运算。
2、 成本低(Economical):可以通过普通机器组成的服务器群来分发以及处理数据。这些服务器群总计可达数千个节点。而且每个节点都是运行在开源操作系统Linux上面的。
3、 高效率(Efficient):通过分发数据,hadoop可以在数据所在的节点上并行地(parallel)处理它们,这使得处理非常的快速。
4、 可靠性(Reliable):hadoop能自动地维护数据的多份复制,并且在任务失败后能自动地重新部署(redeploy)计算任务。
 

Hadoop的不足之处

       1、 该框架设计的初衷是针对海量数据的运算处理的问题。因此对于一些数据量很小的处理没有任何优势可言,甚至还不如单机串行的效果,性能也完全体现不出来。
       2、 既然是海量数据的处理,优先考虑的是该系统的吞吐量等性能问题。所以也很难满足平常的低时延的需求,这点是不可避免的,只能说想办法尽量去权衡两者,进而优化。
       3、 集群中存在大量的机器,所以节点故障是不可避免的。在Hadoop中有两种类型的结点:namenode和datanode。Hadoop集群采取的master/slave结构,分别对应namenode和datanode两种类型。Datanode故障一般是不会影响整个系统的,这个和它的存储策略有关。但是namenode故障是是极大的问题,如果namenode挂掉了,那问题就很严重。而且namenode的内存限制也是整个系统的瓶颈,这个在这里就不多说,后面随着慢慢的了解就知道了。
       4、 其文件系统设计的前提是一次写入多次读取的情况,因此我们是无法修改某条详细的数据,只能overwrite全部的数据,或者是在文件末尾追加数据。
       5、 集群内部是通过tcp/ip协议进行通信的,所以网络带宽也会成为系统的瓶颈之一。
       6、 系统内部的调度策略。在使用了Hadoop一段时间之后,感觉它的job调度策略不是很完善,没能充分利用集群资源展现出其全部的性能。
7、 采用Java实现。Java的IO处理虽然没有性能瓶颈,但是对于CPU密集型的任务是一个噩耗。这点可以通过对比HBase和Hypertable两个开源的Bigtable实现来做初步的验证。
       8、 开源项目。开源本身是一柄双刃剑,它方便了大多数人,但是对于一个有一定规模的公司,项目发展方向的把握,技术保密和支持等都是采用Hadoop这种开源项目必须考虑的问题。另外,Hadoop作为一个比较新的项目,性能和稳定性的提升还需要一定时间。
       9、安全问题。如果对外提供服务就要对外开放端口,那就有可能成为被攻击的目标,所以这个问题在以后的商业应用中显得尤为重要。虽然并不清楚Hadoop的安全程度到底如何,但是这个是没有止境的。道高一尺,魔高一丈。
       10、任然使用的是行存储。从相关资料上了解到列存储在海量数据处理方面的优势,觉得未来在这方面会有所改变。
 

Hadoop的发展前景

       我本人以前其实从来没接触过分布式计算这一块,偶然的一个机会来到淘宝的数据平台实习,才知道有这么个强大的东西存在。虽然它只是一个开源的项目,并不是很成熟。但是有这么多的强人在不断地做贡献,另外还有很多互联网巨头投入了巨大的人力物力来开发。 

       我个人还是很看好这个分布式计算平台未来的前景。而且很多大公司也在使用Hadoop,像国内的淘宝、百度、腾讯,国外的雅虎、亚马逊、Facebook等。事实证明这个分布式平台很有潜力的,虽然目前还是存在各种各样的不足和缺陷,但是有那么多人在为之付出,总是能够不断改进的。玉不琢不成器嘛~呵呵
 

个人随想

       现在回想当年高考完了填志愿,好像当时对计算机一窍不通啊~但是那时候觉得计算机很强大,也许会改变未来人们的生活方式。所以最后就这么小不小心成了一个搞it的小菜鸟。不过既然选择了这行,就坚持下去吧!也不能说对技术特别痴迷,但是还是希望自己成为一个技术牛人嘛~

       以前其实很少做笔记,作总结,再加上平常学到的东西也很少用,最后时间久了什么都忘了。所以这次淘宝的实习转正面试的悲剧是个教训。积累是成长的必须过程。以后有空就多就经常去学习,思考,总结。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/husthcb/archive/2010/09/05/5864769.aspx

分享到:
评论

相关推荐

    Hadoop下载 hadoop-2.9.2.tar.gz

    Hadoop 是一个处理、存储和分析海量的分布式、非结构化数据的开源框架。最初由 Yahoo 的工程师 Doug Cutting 和 Mike Cafarella Hadoop 是一个处理、存储和分析海量的分布式、非结构化数据的开源框架。最初由 Yahoo...

    hadoop2.7.3 Winutils.exe hadoop.dll

    在IT行业中,Hadoop是一个广泛使用的开源框架,主要用于大数据处理和分布式存储。Hadoop 2.7.3是这个框架的一个稳定版本,它包含了多个改进和优化,以提高性能和稳定性。在这个版本中,Winutils.exe和hadoop.dll是两...

    Hadoop下载 hadoop-3.3.3.tar.gz

    Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进 Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不...

    hadoop-2.7.7 linux安装包

    此文件为hadoop-2.7.7.tar.gz,可在linux下直接进行安装,如在windows上安装,则需要hadooponwindows-master.zip,用windows-master里的文件替换解压好后hadoop的bin和etc即可。Hadoop 2.7.7是一款开源的分布式计算...

    hadoop插件apache-hadoop-3.1.0-winutils-master.zip

    Apache Hadoop是一个开源框架,主要用于分布式存储和计算大数据集。Hadoop 3.1.0是这个框架的一个重要版本,提供了许多性能优化和新特性。在Windows环境下安装和使用Hadoop通常比在Linux上更为复杂,因为Hadoop最初...

    hadoop2.7.x_winutils_exe&&hadoop_dll

    在IT行业中,Hadoop是一个广泛使用的开源框架,主要用于大数据处理和分布式存储。标题"hadop2.7.x_winutils_exe&&hadoop_dll"暗示我们关注的是Hadoop 2.7.x版本在Windows环境下的两个关键组件:`winutils.exe`和`...

    hadoop2.7.3的hadoop.dll和winutils.exe

    在IT行业中,Hadoop是一个广泛使用的开源框架,主要用于大数据处理和分布式存储。Hadoop 2.7.3是Hadoop发展中的一个重要版本,它包含了众多的优化和改进,旨在提高性能、稳定性和易用性。在这个版本中,`hadoop.dll`...

    hadoop2.7.7对应的hadoop.dll,winutils.exe

    在Hadoop生态系统中,Hadoop 2.7.7是一个重要的版本,它为大数据处理提供了稳定性和性能优化。Hadoop通常被用作Linux环境下的分布式计算框架,但有时开发者或学习者在Windows环境下也需要进行Hadoop相关的开发和测试...

    win环境 hadoop 3.1.0安装包

    在Windows环境下安装Hadoop 3.1.0是学习和使用大数据处理技术的重要步骤。Hadoop是一个开源框架,主要用于分布式存储和处理大规模数据集。在这个过程中,我们将详细讲解Hadoop 3.1.0在Windows上的安装过程以及相关...

    hadoop2.6 hadoop.dll+winutils.exe

    标题 "hadoop2.6 hadoop.dll+winutils.exe" 提到的是Hadoop 2.6版本中的两个关键组件:`hadoop.dll` 和 `winutils.exe`,这两个组件对于在Windows环境中配置和运行Hadoop至关重要。Hadoop原本是为Linux环境设计的,...

    hadoop的hadoop.dll和winutils.exe下载

    在Hadoop生态系统中,`hadoop.dll`和`winutils.exe`是两个关键组件,尤其对于Windows用户来说,它们在本地开发和运行Hadoop相关应用时必不可少。`hadoop.dll`是一个动态链接库文件,主要用于在Windows环境中提供...

    hadoop2.7.3 hadoop.dll

    在windows环境下开发hadoop时,需要配置HADOOP_HOME环境变量,变量值D:\hadoop-common-2.7.3-bin-master,并在Path追加%HADOOP_HOME%\bin,有可能出现如下错误: org.apache.hadoop.io.nativeio.NativeIO$Windows....

    hadoop.dll & winutils.exe For hadoop-2.7.1

    在大数据处理领域,Hadoop是一个不可或缺的开源框架,它提供了分布式存储和计算的能力。本文将详细探讨与"Hadoop.dll"和"winutils.exe"相关的知识点,以及它们在Hadoop-2.7.1版本中的作用。 Hadoop.dll是Hadoop在...

    hadoop2.6.0插件+64位winutils+hadoop.dll

    在IT行业中,Hadoop是一个广泛使用的开源框架,主要用于大数据处理和分布式存储。Hadoop2.6.0是这个框架的一个重要版本,它包含了多项优化和改进,以提高系统的稳定性和性能。在这个压缩包中,我们关注的是与Windows...

    winutils+hadoop.dll+eclipse插件(hadoop2.7)

    在Hadoop生态系统中,`winutils.exe`和`hadoop.dll`是Windows环境下运行Hadoop必备的组件,尤其对于开发和测试环境来说至关重要。这里我们深入探讨这两个组件以及与Eclipse插件的相关性。 首先,`winutils.exe`是...

    hadoop的dll文件 hadoop.zip

    Hadoop是一个开源的分布式计算框架,由Apache基金会开发,它主要设计用于处理和存储大量数据。在提供的信息中,我们关注的是"Hadoop的dll文件",这是一个动态链接库(DLL)文件,通常在Windows操作系统中使用,用于...

    Hadoop源码分析(完整版)

    Hadoop源码分析是深入理解Hadoop分布式计算平台原理的起点,通过源码分析,可以更好地掌握Hadoop的工作机制、关键组件的实现方式和内部通信流程。Hadoop项目包括了多个子项目,其中最核心的是HDFS和MapReduce,这两...

    hadoop.dll & winutils.exe For hadoop-2.8.0

    在IT行业中,Hadoop是一个广泛使用的开源框架,主要用于大数据处理和分析。这个压缩包文件包含的是"Hadoop.dll"和"winutils.exe"两个关键组件,它们对于在Windows环境下配置和运行Hadoop生态系统至关重要。 首先,...

    大数据 hadoop-3.1.3 linux 安装包

    在大数据领域,Hadoop是一个关键的开源框架,用于存储和处理海量数据。Hadoop-3.1.3是Hadoop的稳定版本,提供了许多增强的功能和优化,使其更适合大规模分布式计算环境。在这个针对Linux系统的安装包中,我们将探讨...

Global site tag (gtag.js) - Google Analytics