古代,人们用牛来拉重物。当一头牛拉不动一根圆木时,他们不曾想过培育更大更壮的牛。同样,我们也不需要尝试开发超级计算机,而应试着结合使用更多计算机系统。(蕾斯.霍珀)
1. 数据
目前的趋势是保存每个人成长过程中产生的所有数据,但更重要的是,计算机产生的数据可能比个人产生的更多。机器日志、RFID检测器、传感器网络、车载GPS和零售交易数据等——所有这些都将使数据量显著增加。公开发布的数据量也在逐步增加。组织或企业,不仅需要管理好自己的数据,更需要从其他组织或企业的数据中获取有价值的信息,以便在未来获得更大的成功。
曾有这么一句话:“大量的数据胜于好算法”。意思是说对于某些应该(避如基于先前偏好进行电影和音乐推荐),不论你的算法有多好,大量可用的数据总能带来更好的推荐的效果。
2. 数据存储和分析
我们遇到的问题很简单:多年来磁盘存储容量快速增加的同时,其访问速度、磁盘数据读取速度却未能与时俱进。
读取一个磁盘中所有的数据需要很长的时间,写甚至更慢。一个很简单的减少读取时间的办法是同时从多个磁盘上读取数据。读取一个1TB磁盘传输速度为100MB/s时需要两个半小时,试想,如果我们拥有100个1TB磁盘,每个磁盘存储1%的数据,并行读取,那么不到两分种就可以读取所有数据。仅使用磁盘容量的1%的似乎很浪费,但是我们可以存储100个数据集,每个数据集1TB,并实现共享磁盘的访问。可以想象,该类系统的用户会很乐意使用磁盘共享访问以便缩短数据分析时间。并且可以让分析工作在不同的时间点进行。
尽管如此,要实现多个磁盘数据的并行读写,还有更多的问题要解决:
(1)硬件故障,一旦使用多个硬件,其中任一硬件发生故障的概率将非常高。避免数据丢失的常见做法是使用备份:系统保存数据的冗余复本,在发生故障后,可以使用数据的另一可用复本。如冗余磁盘阵列(RAID)、Hadoop文件系统(HDFS)。
(2)分析任务需要结合大部分数据共同完成分析任务,即从一个磁盘读取的数据可能需要和从另外99个磁盘中读取的数据结合使用。MapReduce提出了一个编程模型,该模型将上述磁盘读写的问题进行抽象,并转换为对一个数据集(由键值对组成)的计算。
简而言之,Hadoop提供了一个可靠的共享存储和分析系统。HDFS实现存储,而MapReduce实现分析处理。纵然Hadoop还有其他功能,但这两部分是它的核心。
我们为什么不能使用数据库来对大量磁盘上的大规模数据进行批量分析呢?我们为什么需要MapReduce?
这些问题的答案来自磁盘的另一个发展趋势:寻址时间的提高远远慢于传输速率的提高。寻址是将磁头移动到特定磁盘位置进行读写操作的过程,它是导致磁盘操作延迟的主要原因,而传输速率取决于磁盘的带宽。如果数据的访问模式中包含大量的磁盘寻址,那么读取大量数据集所花的时间势必会更长,流式读取主要取决于传输速率。另一方面如果数据库系统只更新一小部分记录,那么传统的B树更有优势(关系数据库中使用的一种数据结构,受限于寻址的比例)。但数据库系统更新大部分数据时,B树的效率比MapReduce低得多,因为需要使用“排序/合并”来重建数据库。
MapReduce比较适合以批处理的方式处理需要分析整个数据集的问题,尤其是即席分析。RDBMS适用于“点查询”和更新,数据集被索引后,数据库系统能够提供低延迟的数据检索和快速的少量数据更新。MapReduce适合一次写入、多次读取数据的应用,而关系型数据库更适合持续更新的的数据集。
MapReduce和关系型数据库之间的另一个区别在于它们所操作的数据集的结构化程序。结构化数据是具有既定格式的实体化数据,诸如XML文档、数据库表,这是RDBMS包括的内容。另一方面,半结构化数据比较松散,虽然可能有格式,但经常被忽略,所以它只能用作对数据结构的一般指导,例如一张电子表格,每个单元格自身可保存任何形式的数据。非结构化数据没有什么特别的内部结构,例如纯文本或图像数据。MapReduce对于非结构化或半结构化数据非常有效,因为在处理数据时才对数据进行解释。换句话说:MapReduce输入的键和值并不是数据固有的属性,而是由分析数据的人员来选择的。关系型数据往往是规范的,以保持其数据的完整性且不含冗余。规范化给MapReduce带来了问题,因为它使记录读取成为异地操作,然而MapReduce的核心假设之一就是,它可以进行(高速的)流式读写操作。这也是MapReduce非常适合用于分析各种日志文件的原因之一。
MapReduce是一种线性可伸缩的编程模型。程序员编写两个函数,分别是map函数和reduce函数——每个函数定义一个键/值对集合到另一个键/值对集合的映射。
3. 网格计算
高性能计算的方法是将作业分散到集群的各台机器上,这些机器访问由存储区域网络(SAN)组织的共享文件系统这比较适用于计算密集型的作业,但如果节点需要访问更大量的数据(几百个GB的数据,这时MapReduce开始发挥其优势),那么很多计算节点会由网络带宽的瓶颈问题而空闲下来等待数据。
MapReduce会尽量在计算节点上存储数据,以实现数据的本地快速访问。数据本地化特性是MapReduce的核心特征,并因此而获得良好的性能。意识到网络带宽是数据中心环境最珍贵的资源(到处复制数据很容易耗尽网络带宽)之后,MapReduce通过网络拓扑结构尽力保留网络带宽。注意,这种排列方式并未降低MapReduce的计算密集型的数据分析能力。
在大规模分布式计算环境下,协调各进程间的执行是一个很大的挑战。最困难的是合理地处理系统部分失效的问题。
MapReduce是由谷歌的工程师开发的,用于构建搜索引擎的索引。同时还有许多其他算法可以用MapReduce来表达,从图像图形分析到各类基于图像分析的问题,再到机器学习算法。当然,它不能解决所有问题,但它确实是一个比较通用的数据处理工具。
4. Hadoop发展简史
Hadoop是Apache Lucene创始人Doug Cutting创建的,Lucene是一个广泛使用的文本搜索系统库。
2006年2月开发人员将NDFS和MapReduce移出Nutch形成Lucene的一个子项目,称为Hadoop。
2008年4月Hadoop打破世界纪录,成为最快的TB级数据排序系统。通过一个910节点的群集,Hadoop在209秒内完成了对1TB数据的排序。同处11月,谷歌在报告中声称,它的MapReduce对1TB数据排序只用了68秒。在2009年5月的时候只花了62秒。
部分Hadoop项目简述:
Common——一组分成式文件系统和通用I/O的组件与接口(序列化、Java RPC和持久化数据结构)。
Avro——一种支持高效、跨语言的RPC以及永久存储数据的序列化系统。
MapReduce——分布式数据处理模型和执行环境,运行于大型商用机集群。
HDFS——分布式文件系统,运行于大型商用机集群。
Pig——一种数据流语言和运行环境,用以检索非常大的数据集。Pig运行在MapReduce和HDFS的集群上。
Hive——一个分布式、按列存储的数据仓库。Hive管理HDFS中存储的数据,并提供基于SQL的查询语言用以查询数据。
HBase——一个分布式、按列存储数据库。HBase使用HDFS作为底层存储,同时支持MapReduce的批量计算和点查询
ZooKeeper——一个分布式、可用性高的协调服务。Zookeeper提供分布式锁之类的基本服务胜于构建分布式应用。
Sqoop——在数据库和HSFS之间高效传输数据的工具。
分享到:
相关推荐
Hadoop 是一个处理、存储和分析海量的分布式、非结构化数据的开源框架。最初由 Yahoo 的工程师 Doug Cutting 和 Mike Cafarella Hadoop 是一个处理、存储和分析海量的分布式、非结构化数据的开源框架。最初由 Yahoo...
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进 Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不...
在IT行业中,Hadoop是一个广泛使用的开源框架,主要用于大数据处理和分布式存储。Hadoop 2.7.3是这个框架的一个稳定版本,它包含了多个改进和优化,以提高性能和稳定性。在这个版本中,Winutils.exe和hadoop.dll是两...
此文件为hadoop-2.7.7.tar.gz,可在linux下直接进行安装,如在windows上安装,则需要hadooponwindows-master.zip,用windows-master里的文件替换解压好后hadoop的bin和etc即可。Hadoop 2.7.7是一款开源的分布式计算...
Apache Hadoop是一个开源框架,主要用于分布式存储和计算大数据集。Hadoop 3.1.0是这个框架的一个重要版本,提供了许多性能优化和新特性。在Windows环境下安装和使用Hadoop通常比在Linux上更为复杂,因为Hadoop最初...
在IT行业中,Hadoop是一个广泛使用的开源框架,主要用于大数据处理和分布式存储。标题"hadop2.7.x_winutils_exe&&hadoop_dll"暗示我们关注的是Hadoop 2.7.x版本在Windows环境下的两个关键组件:`winutils.exe`和`...
在IT行业中,Hadoop是一个广泛使用的开源框架,主要用于大数据处理和分布式存储。Hadoop 2.7.3是Hadoop发展中的一个重要版本,它包含了众多的优化和改进,旨在提高性能、稳定性和易用性。在这个版本中,`hadoop.dll`...
在Hadoop生态系统中,`hadoop.dll`和`winutils.exe`是两个关键组件,尤其对于Windows用户来说,它们在本地开发和运行Hadoop相关应用时必不可少。`hadoop.dll`是一个动态链接库文件,主要用于在Windows环境中提供...
在Hadoop生态系统中,Hadoop 2.7.7是一个重要的版本,它为大数据处理提供了稳定性和性能优化。Hadoop通常被用作Linux环境下的分布式计算框架,但有时开发者或学习者在Windows环境下也需要进行Hadoop相关的开发和测试...
在Windows环境下安装Hadoop 3.1.0是学习和使用大数据处理技术的重要步骤。Hadoop是一个开源框架,主要用于分布式存储和处理大规模数据集。在这个过程中,我们将详细讲解Hadoop 3.1.0在Windows上的安装过程以及相关...
标题 "hadoop2.6 hadoop.dll+winutils.exe" 提到的是Hadoop 2.6版本中的两个关键组件:`hadoop.dll` 和 `winutils.exe`,这两个组件对于在Windows环境中配置和运行Hadoop至关重要。Hadoop原本是为Linux环境设计的,...
在windows环境下开发hadoop时,需要配置HADOOP_HOME环境变量,变量值D:\hadoop-common-2.7.3-bin-master,并在Path追加%HADOOP_HOME%\bin,有可能出现如下错误: org.apache.hadoop.io.nativeio.NativeIO$Windows....
在大数据处理领域,Hadoop是一个不可或缺的开源框架,它提供了分布式存储和计算的能力。本文将详细探讨与"Hadoop.dll"和"winutils.exe"相关的知识点,以及它们在Hadoop-2.7.1版本中的作用。 Hadoop.dll是Hadoop在...
在IT行业中,Hadoop是一个广泛使用的开源框架,主要用于大数据处理和分布式存储。Hadoop2.6.0是这个框架的一个重要版本,它包含了多项优化和改进,以提高系统的稳定性和性能。在这个压缩包中,我们关注的是与Windows...
在Hadoop生态系统中,`winutils.exe`和`hadoop.dll`是Windows环境下运行Hadoop必备的组件,尤其对于开发和测试环境来说至关重要。这里我们深入探讨这两个组件以及与Eclipse插件的相关性。 首先,`winutils.exe`是...
Hadoop是一个开源的分布式计算框架,由Apache基金会开发,它主要设计用于处理和存储大量数据。在提供的信息中,我们关注的是"Hadoop的dll文件",这是一个动态链接库(DLL)文件,通常在Windows操作系统中使用,用于...
Hadoop源码分析是深入理解Hadoop分布式计算平台原理的起点,通过源码分析,可以更好地掌握Hadoop的工作机制、关键组件的实现方式和内部通信流程。Hadoop项目包括了多个子项目,其中最核心的是HDFS和MapReduce,这两...
在IT行业中,Hadoop是一个广泛使用的开源框架,主要用于大数据处理和分析。这个压缩包文件包含的是"Hadoop.dll"和"winutils.exe"两个关键组件,它们对于在Windows环境下配置和运行Hadoop生态系统至关重要。 首先,...
Hadoop是Apache软件基金会开发的一个开源分布式计算框架,它的核心设计是处理和存储大量数据的能力。这个名为"Hadoop3.1.3.rar"的压缩包文件包含了Hadoop 3.1.3版本的所有组件和相关文件,使得用户可以下载并进行...