万维网信息爆炸般闯入了我们的生活,就像一个巨大的玩具盒,里面应有尽有。网络早期只有几百页,手工就能索引查询;到现在页面飙升至数百万级别,每天还有数千的新增页面,想要找到某样东西的时候,如何搜寻就成了挑战。像雅虎和谷歌这样的搜索引擎首先发现了这件事:想要让网络可用而易控,需要自动化处理大数据的办法——保存、阐释信息,对其分类并通过命令检索。需求产生:人们需要更优秀的自动化搜索引擎。
正是这种需求推动着Hadoop的开发。Hadoop是一个开源框架,可以存储巨量数据,同时通过相互关联电脑所组成的分布式网络,运行关联程序以完成大数据任务。这个框架一开始是另一个大项目的一部分,由数据库管理专家Mike Cafarella与开源技术的支持者DougCutting所构建。两人一起创建了一个名叫Nutch的网络爬虫与分析系统,该系统使用集群运算(在许多相互连接的机器上进行数据分布与处理)同时执行多项任务。
这正是网络——特别是搜索引擎所需要的。事实上,与此同时谷歌也在研究使用自动化与分布式运算来更快、更好、更高效地处理大数据。在2006年,Cutting去了雅虎公司,他把Nutch系统也带了过去。最后,Nutch演化成了两个系统:驱动雅虎的搜索功能的网络爬虫系统,和分布式处理系统Hadoop.(Hadoop这个名字来自Cutting儿子的玩具,他有一只黄色毛绒大象就叫这个名字。)雅虎将Hadoop发布到开源社区中,一并还发布了一系列相关的科技。而Hadoop现由Apache软件基金会维护。
Hadoop由四个核心科技组成:
Hadoop Common:包括函数库与工具功能,对Hadoop的其他模块提供支持。
Hadoop分布式文件系统(HDFS):就像它的名字那样,是Hadoop的文件系统。HDFS基于Java,具有高度可扩展性,允许在未经预先安排的多台计算机上存储数据——本质上是打造一个类似单文件系统运作的节点社区。
MapReduce是一个使用并行方式处理大数据集的编程模型,可处理结构化与非结构化数据集,具有可靠性与高容错性。
YARN的全称是“另一种资源协调方式”,就像名字一样,它是一种资源管理框架,用来处理多个分布式架构发送的资源请求调度,而这些分布式架构正是Hadoop的一部分。
Hadoop还集成了一些专门面向大型数据集支持的其他处理与支持应用。其中包括有:
数据存取编程语言Pig(包括PigLatin脚本语言)专为数据分析设计,无需花费大量时间构建映射和化简操作,即可处理任何类型的数据。
HIVE是一个类似SQL的查询语言,它将SQL语句编译到MapReduce中,再跨集群分发出去。
Flume从应用中收集大量数据,并将它们转入HDFS文件系统中。
Spark是一个开源集群运算系统,在某些情况下进行数据分析时比MapReduce快100倍。
Sqoop是一种数据传输工具,可以提取、加载并转换结构化数据;
Hbase是一个非关系型非SQL数据库,在HDFS上运行,可支持大型表格;Avro是一个序列化数据系统;DataTorrent流式处理软件;Chukwa是一个数据收集系统,在大型的分布式系统上运作;Tez是一个广义的数据流框架,运用Hadoop模块YARN来执行任务,以批处理与交互使用模式处理数据。
搜索Solr是Apache旗下强大的企业级搜索平台,具有可靠性与可扩展性,同时在搜索时可以对结果高亮显示、提供索引、执行中央系统配置、故障转移与恢复例行程序。
管理名叫ZooKeeper?的高性能分布式应用程序协调服务;Kerberos认证协议;工作流管理工具Oozie;
大数据与Hadoop
早期讨论过大数据为互联网提供了商业力量。所有通过电子商务、社交媒体与用户行为这些东西所产生的数据,如果没有应用进行解读,在商业上几乎毫无价值。尽管的确有真实或者能感知到的缺点,Hadoop在管理大数据的核心科技方面确实居于领先地位。它的分布式框架在收集与管理互联网信息方面非常理想。然而,截止2015年7月份,在企业选用的大数据管理平台中,Hadoop仅位居第三,排在企业数据仓库与云计算之后。
Hadoop不仅是数据管理工具,还是一个框架,它允许使用者进行大量数据的收集与存储,并为数据分析软件的接入提供了接口。由于它是技术生态系统的一部分,它的效用大多取决于生态系统中所开发与集成的工具和应用。
Mike Gualatieri是Forrester的一名分析员,他将Hadoop描述为“数据运营系统”,特别需要处理大量网络产生与收集的数据。不过Gualtieri补充道:Hadoop还有更多用处,它是一个应用平台,专门为大数据处理类的应用所设置。
由于Hadoop是一个框架,可以添加处理分析数据的应用与模块,将数据录入的方式很多。你可以使用简单的Java命令,使用“put”命令来写shell脚本,挂载使用HDFS的文件,通过“put”命令将文件复制过去,或者使用专为Hadoop设计的Sqoop、Flume或统计分析系统(SAS)数据加载器。一旦数据复制完成,你就可以随意运用数据处理方案,具体要根据你的目的:是要分析、查询、发送还是趋势识别。基本上,你想要执行的所有命令都能通过Hadoop的插件或模块来执行。
Hadoop潜力巨大,不过也面临着一些挑战。最重要的是,在部署上它的确还是一项新技术。很多注意到Hadoop并想采用它作为大数据收集、存储、处理和分析框架的企业发现,他们缺乏相应的专业人才来进行相关的整合。开源平台经常会遇到这一问题。一家公司希望别的企业采用他们的专利技术时,就会对销售人员、售后支持、训练人员与其他专家进行投资,让购买者对产品效用大化。那些专家可以接触到核心的开发团队,帮助他们在专业技能上更进一步。
而在开源技术中,尽管很多公司为其开发应用,相关专家仍需从各个渠道收集信息来掌握专业技能。很多私企会产出大量的个体解决方案。开发者的公司在部署组件添加、模块与分布方面的确有专业人才。但是能帮助没接触过大数据管理的企业决定使用哪个系统的专家在哪里呢?尽管开发者公司也许会宣传核心科技,不过获取知识与专业技能仍缺乏独立的来源。理论上这会令人生畏,不过实际上随着Hadoop在商界的势头发展,相关的专家每天都在增加。也就是说,这只是个短期问题,等到技术成熟后会自然解决。
Hadoop面临的其他挑战包括其MapReduce技术在交互分析方面并不太优秀这一事实。作为独立技术MapReduce的效果并不太好,尽管它提供了强大的支持。它的原理是将大数据集分割成很多较小的部分,在很多情况下可能会导致性能下降。不过就像我们所看到的,还有很多替代方案,比如Spark.而且未来可能会有更多的替代方案,在MapReduce不太理想的时候取代它。
大数据从出现开始就有安全问题,取决于数据集的规模与数据来源的数量。这并不是Hadoop独有的问题,尽管分布式计算模型确实撬开了安全这扇大门。不过随着软件开发,像Kerberos认证这样的机制逐渐开始解决这类问题。
尽管新科技总有种种缺陷,框架正是由于能为开发者提供可以填补空缺的大量机会而被称为框架。安装Hadoop的公司发现附加组件与模块可以帮助他们完成想做的事情:开发者针对问题创建新的工具。如果你在考虑Hadoop的使用,了解目前的局限是件好事,不过认识到下面两点也很重要:开发工作还在进行,同时专业人才也随着实施快速产生。