大量资料的处理一直是计算机科学与实务应用中非常重要的课题,云端运算的风起云涌也使得分散式运算这项技术成了新显学,整合MapReduce算法并已被各大企业所广泛采用的Hadoop套件,更是开发云端运算技术的佼佼者。
Hadoop的原始作者是Doug Cutting先生,其过去就开发了Apache Lucene文字搜索引擎,这是用Java设计的高效能文件索引引擎API,其可索引文件中的每一字,让搜寻的效率比传统逐字比较还要高的多,而在开发这个元件的过程,也进而开发了Apache Nutch这个基于开放原始码所开发的网页搜索引擎元件。其利用了Lucene函式库开发,并加入了许多与网页协定相关的特性,如网页爬虫、网页连结架构数据库、HTML和其他文件格式的剖析器等,在Nutch 0.8版之后,Hadoop为独立项目演变为独立的Hadoop开发套件。
Hadoop这个代号并不代表任何英文字汇或者缩写代码,其是一个无中生有被创造的名称,作者曾经针对这个名称做过相关解释,Hadoop名称来自于作者小孩的一个绒毛填充黄色大象玩具,而官方的吉祥物也采用了该图案,主要原因在于开发这项套件的过程中作者需要为开套件提供一个代号方便沟通,而这个名字具备了几个特性,如相当容易拼字和发音,毫无意义、且没有在任何地方使用过,因此雀屏中选。
在Hadoop其后所发展的几个相关套件和模块也都参考了这样的方式,名称都不会与主要功能实际相关,而会采用与大象或其他动物的概念来命名作为其开发代号,某些较小的模块功能则会给予较有意义的名称,如jobtracker会用来追踪MapReduct的作业。 其实Hadoop命名的概念也非常类似当年Google命名的由来,Google是英文单词「Googol」按照通常的英语拼法改写而来的。Googol是一个大数的名称,也就是10的100次方,表示1后面加上100个零。乍看之下好像没有特殊之处,但实际上该数字比宇宙所有的基本粒子数量总和还要大。Googol这个字是由美国数学家Edward Kasner九岁的侄子Milton Sirotta发明的,后来在数学家Edward Kasner和James Newman的著作《Mathematics and the Imagination》中被引用,Google公司使用这个字显示了公司想征服网络无穷无尽资料的梦想,最后没有选用Googol可能是因为版权的问题,而且当注册Google.com网域的时候已经被注册。
Hadoop的定位是用来处理与保存大量资料的云端运算平台,目前属于Apache顶层项目,在Hadoop中包含了最著名的分散式档案系统(HDFS)、MapReduce框架、储存系统(HBase)等元件,如图3所示,以及根据Hadoop延伸发展的其他子项目:
●Core:一组用于分散式档案系统和一般性I/O之用的元件和界面。
●Avro:提供高效能、跨语言以及可保存资料的RPC资料序列化系统。
●Pig:超大资料集的资料流语言以及执行环境,可在HDFS和MapReduce丛集环境中执行。
●ZooKeeper:分散式且高可用性的协调服务,可为建置分散式系统提供分散式锁定等原始锁定功能。
●Hive:分散式资料仓储,透过Hiave可管理存放于HDFS的资料,并提供根据SQL发展的查询语言来查询资料。
●Chukwa:分散式资料收集和分析系统,其会执行收集器以便在HDFS中储存资料,且会使用MapReduce来产生报表。
Hadoop主要核心完全使用Java开发,而使用者端则提供C++/Java/Shell/Command等程序开发界面,目前可执行于Linux、Mac OS/X、Windows和Solaris作业系统,以及一般商用等级的服务器。
在Hadoop中最核心的算法参考了由Google针对大量资料处理所累积的经验,并于2004年所发表的MapReduce算法,隔年Doug Cutting随即公布Apache Nutch开始采用全新的MapReduce实作。而在2006年Hadoop程序码从Apache Nutch移至全新的Lucene子项目,2008年Hadoop成为 Apache顶层项目。
该贴被蜀山战纪编辑于2015-12-4 10:13:46