TB ==> PB ==> EB ==> ZB
有句话说得好:“大数据胜于好算法。
在硬盘存储容量多年来不 断提升的同时,访问速度(硬盘数据读取速度)却没有与时俱进。
读完整个硬盘中的数据需要更长时间,写入数据就别提了。【读入数据比写数据快】
一个很简单的减少读取时间的办法是同时从多个硬盘上读数据。
大多数分析任务需要以某种方式结合大部分数据来共同完成分析,
MapReduce提出一个编程模型,该模型抽象出这些硬盘读/写问题并将其转换为对一个数据集(由键-值对组成)的计算。
MapReduce的每个查询需要处理整个数据集或至少一个数据集的绝大部分。MapReduce是一个批量查询处理器,能够在合理的时间范围内处理针对整个数据集的动态查询。
从MapReduce 不适合交互式分析。你不可能执行-条查询并在几秒内或更短的时间内得到结果。
因此,MapReduce更适合那种没有用户在现场等待查询结果的离线使用场景。
Hadoop 这些项目都属于分布式计算和大规模数据处理范畴。这些项目中有许多都是由Apache软件基金会管理,该基金会为开源软件项目社区提供支持,其中包括最初的HTTP server项目(基金会的名称也来源于这个项目)。
第一个提供在线访问的组件是HBase,一种使用HDFS做底层存储的键值存储模型。HBase不仅提供对单行的在线读/写访问,还提供对数据块读/写的批操作。
Hadoop 2中YARN的出现意味着Hadoop有了新处理模型。YARN是一个集群资源管理系统,允许任何一个分布式程序(不仅仅是
MapReduce)基于Hadoop集群的数据而运行。
寻址是将磁头移动到特定硬盘位置进行读/写操作的过程。它是导致硬盘操作延迟的主要原因,而传输速率取决于硬盘的带宽。
在许多情况下,可以将MapReduce视为关系型数据库管理系统的补充。
- MapReduce 比较适合解决需要以批处理方式分析整个数据集的问题,尤其是一些特定目的的分析。
- RDBMS适用于索引后数据集的点查询和更新,建立索引的数据库系统能够提供对小规模数据的低延迟数据检索和快速更新。
- MapReduce 适合一次写人、多次读取数据的应用,
- 关系型数据库则更适合持续更新的数据集。
关系型数据库和Hadoop系统之间的区别是模糊的。
- 一方面,关系型数据库已经开始吸收Hadoop 的一些思想;
- 另一方面,诸如Hive这样的Hadoop 系统不仅变得更具交互性(通过从MapReduce 中脱离出来),而且增加了索引和事务这样的特性,使其看上去更像传统的关系型数据库。
Hadoop和关系型数据库的另一个区别在于它们所操作的数据集的结构化程度。
- 结构化数据(structured data)是 具有既定格式的实体化数据,如XML文档或满足特定预定义格式的数据库表。
- 半结构化数据(semi-structured data)比较松散,虽然可能有格式,但经常被忽略,所以它只能作为对数据结构的一般性指导。例如电子表格,它在结构上是由单元格组成的网格,但是每个单元格内可以保存任何形式的数据。
- 非结构化数据(unstructured data)没有什么特别的内部结构,例如纯文本或图像数据。
Hadoop对非结构化或半结构化数据非常有效,因为它是在处理数据时才对数据进行解释(即所谓的“读时模式”)。这种模式在提供灵活性的同时避免了RDBMS数据加载阶段带来的高开销,因为在Hadoop中仅仅是一个文件拷贝操作。
RDBMS包括的内容是结构化数据。
Web服务器日志是典型的非规范化数据记录(例如,每次都需要记录客户端主机全名,这会导致同一客户端的全名可能多次出现),这也是Hadoop 非常适用于分析各种日志文件的原因之一。注意,Hadoop 也能够做连接(join)操作,只不过这种操作没有在关系型数据库中用的多。
MapReduce以及Hadoop中其他的处理模型是可以随着数据规模线性伸缩的。对数据分区后,函数原语(如map和reduce)能够在各个分区上并行工作。这意味着,如果输入的数据量是原来的两倍,那么作业的运行时间也需要两倍。但如果集群规模扩展为原来的两倍,那么作业的运行速度却仍然与原来一样快。SQL查询一般不具备该特性。
高性能计算(High Performance Computing, HPC)和网格计算(Grid Computing)组织,多年以来一直在研究大规模数据处理
高性能计算采用的方法是将作业分散到集群的各台机器.上,这些机器访问存储区域网络(SAN)所组成的共享文件系
统。这比较适用于计算密集型的作业,但如果节点需要访问的数据量更庞大(高达几百GB,Hadoop 开始施展它的魔法),很多计算节点就会因为网络带宽的瓶颈问题而不得不闲下来等数据。
Hadoop尽量在计算节点上存储数据,以实现数据的本地快速访问。”数据本地化(data locality)特性 是Hadoop数据处理的核心,并因此而获得良好的性能。意识到网络带宽是数据中心环境最珍贵的资源(到处复制数据很容易耗尽网络带宽)之后,Hadoop通过显式网络拓扑结构来保留网络带宽。注意,这种排列方式并没有降低Hadoop对计算密集型数据进行分析的能力。
在大规模分布式计算环境下,协调各个进程的执行是一个很大的挑战。最困难的是合理处理系统的部分失效问题(在不知道一个远程进程是否挂了的情况下)同时还需要继续完成整个计算。有了MapReduce 这样的分布式处理框架,程序员不必操心系统失效的问题,因为框架能够检测到失败的任务并重新在正常的机器上执行。正因为采用的是无共享(shared-nothing)框架,MapReduce才能够呈现出这种特性,这意味着各个任务之间是彼此独立的。。因此,从程序员的角度来看,任务的执行顺序无关紧要。相比之下,MPI程序必须显式管理自己的检查点和恢复机制,虽然赋予程序员的控制权加大了,但编程的难度也增加了。
MapReduce有三大设计目标:
- (1)为只需要短短几分钟或几个小时就可以完成的作业提供服务;
- (2)运行于同一个内部有高速网络连接的数据中心内;
- (3)数 据中心内的计算机都是可靠的、专门的硬件。
Apache Hadoop发展简史
Hadoop是Apache Lucene创始人道格.卡丁(Doug Cutting)创建的,Lucene 是一个应用广泛的文本搜索系统库。Hadoop 起源于开源网络搜索引擎Apache Nutch,后者本身也是Lucene项目的一部分。
Nutch项目开始于2002 年,一个可以运行的网页爬取工具和搜索引擎系统很快面世。但后来,它的创造者认为这一架构的灵活性不够,不足以解决数十亿网页的搜索问题。一篇发表于 2003 年的论文为此提供了帮助,文中描述的是谷歌产品架构,该架构称为“谷歌分布式文件系统”(GFS)。 °GFS或类似的架构可以解决他们在网页爬取和索引过程中产生的超大文件的存储需求。特别关键的是,GFS能够节省系统管理(如管理存储节点)所花的大量时间。在2004年,Nutch的开发者开始着手做开源版本的实现,即Nutch分布式文件系统(NDFS)。