本篇内容介绍了“Hadoop MapReduce的优点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
曾有这么一句话:“大量的数据胜于好的算法。”意思是说,对于某些应用(譬如基于先前偏好进行电影和音乐推荐),不论你的算法有多好,大量的可用的数据总能带来更好的推荐效果。
现在,我们已经有了大量的数据。不幸的是,我们当下正纠结于存储和分析这些数据。
我们遇到的问题很简单:磁盘访问速度跟不上磁盘存储容量增长的速度。
读取一个磁盘中所有的数据需要很长时间,写甚至更慢。一个很简单减少读取时间的办法是:同时从多个磁盘上读取数据。
试想,如果我们拥有100个磁盘,每个磁盘存储1%的数据,并行读取,那么不到两分钟就可以读取所有数据。
仅使用磁盘容量的1%似乎很浪费。但是我们可以存储100个数据集,每个数据集1TB,并实现共享磁盘的访问。可以想象,该类系统的用户会很乐意使用磁盘共享访问以便缩短数据分析时间;并且,从统计角度来看,用户的分析工作会在不同的时间点进行,所以互相之间的干扰不会太大。
一旦使用多个硬件,其中任一硬件发生故障的概率将非常高。
常用做法为使用备份避免数据丢失。
系统保存数据的冗余复本,在发生故障后,可以使用数据的另一个可用复本。
例如:冗余磁盘阵列(RAID)就是按这个原理实现的。
另外,Hadoop的文件系统,即HDFS(Hadoop Distributed FileSystem)也用于备份复本。
即,从一个磁盘读取的数据可能需要和从另外99个磁盘中读取的数据结合使用。各种分布式系统允许结合多个来源的数据并实现分析,但保证其正确性是一个很大的挑战。
MapReduce提出一个编程模型。该模型将上述磁盘读写的问题进行抽象,并转换为一个数据集(由键/值对组成)的计算。
此计算模型由map和reduce两部分组成,而只有这两部分提供对外的接口。与HDFS类似,MapReduce也具有较高的可靠性。
简而言之,Hadoop提供了一个可靠的共享存储和分析系统。HDFS实现存储,而MapReduce实现分析处理。纵然Hadoop还有其他功能,但这两部分是它的核心。
MapReduce似乎采用的是一种蛮力方法。每个查询需要处理整个数据集——或至少数据集的很大一部分。
反过来想,这也正是它的能力。
MapReduce是一个批量查询处理器,并且它能够在合理的时间范围内即时处理针对整个数据集的即时(ad hoc)查询。
这些问题的答案来自磁盘的另一发展趋势:寻址时间的提高远远慢于传输速率的提高。
寻址是将磁头移动到特定磁盘位置进行读写操作的过程。它是导致磁盘操作延迟的主要原因,而传输速率取决于磁盘的带宽。
如果数据的访问模式中包含大量的磁盘寻址,那么读取大量数据集所花的时间势必会更长(相较于流式数据读取模式),流式读取主要取决于传输速率。
另一方面,如果数据库系统只更新一部分记录,那么传统的B树更有优势(关系型数据库中使用的一种数据结构,受限于寻址的比例)。
但数据库更新大部分数据时,B树的效率比MapReduce低得多,因为需要使用“排序/合并”(sort/merge)来重建数据库。
在许多情况下,可以将MapReduce视为关系型数据库管理系统的补充。
此处缺图一张,占位,下次补。
结构化数据:是具有既定格式的实体化数据。
诸如XML文档或满足特定预定义格式的数据库表。这是RDBMS包括的内容。
半结构化数据:
比较松散。虽然可能有格式,但经常被忽略,所以它只能用作对数据结构的一般指导。
例如,一张电子表格,其结构是由单元格组成的网格,但是每个单元格自身可保存任何形式的数据。
非结构化数据:
没有什么特别的内部结构。
例如,纯文本或图像数据。
MapReduce对于非结构化或半结构化数据非常有效。
因为,在处理数据时才对数据进行解释。
换句话说:MapReduce输入的键和值并不是数据固有的属性,而是由分析数据的人员来选择的。
因为Web服务器日志是一个典型的非规范化数据记录(例如:每次都需要记录客户端主机全名,导致同一客户端全名可能会多次出现),这也是MapReduce非常适用于分析各种日志文件的原因之一。
程序员编写两个函数,分别为map和reduce函数——每个函数定义一个键/值对集合到另一个键/值对集合的映射。
这些函数无需关注数据集及其所用集群的大小,因此可以原封不动地应用到小规模数据集或大规模的数据集上。更重要的是,如果输入的数据量是原来的两倍,那么运行的时间也需要两倍。但是,如果集群是原来的两倍,作业的运行仍然与原来一样快。SQL查询一般不具备该特性。
但是,在不久的将来,关系型数据库系统和MapReduce系统之间的差异很可能变得模糊。
关系型数据库都开始吸收MapReduce的一些思路。另一方面,基于MapReduce的高级查询语言(如Pig和Hive)使MapReduce得系统更接近传统的数据库编程方式。
MapReduce会尽量在计算节点上存储数据,以实现数据的本地快速访问。
数据本地化特性是MapReduce的核心特征,并因此而获得良好的性能。
意识到网络带宽是数据中心环境最珍贵的资源(到处复制数据很容易耗尽网络带宽)之后,MapReduce通过显示网络拓扑结构尽力保留网络带宽。
在大规模分布式计算环境下,协调各进程间的执行是一个很大的挑战。最困难的是合理地处理系统部分失效问题——在不知道一个远程进行是否已失效的情况下——同时还需要继续完成整个计算。
MapReduce让程序员无需考虑系统的部分失效问题,因为自身的系统实现能够检测到失败的map或reduce任务,并让正常运行的机器重新执行这些失败的任务。
正是由于采用了无共享框架,所以MapReduce才能够实现失败检测,这意味着各个任务之间彼此独立。(因为MapReduce系统本身控制着mapper的输出结果传给reducer的过程,这种情况下,重新运行reducer比重新运行mapper更需要格外小心。因为reducer需要获取必要的mapper的输出结果,如果没有获得必要的输出结果,必须再次运行相关mapper重新生成输出结果。)
因此,从程序员的角度来看,任务的执行顺序是无关紧要的。相比之下,MPI(消息传递接口)程序必须显式的管理自身的检查点和恢复机制,尽管更多的控制权交给了程序员,但也加大了编程的难度。
灵感来自于传统的函数式编程、分布式计算和数据库社区,此后该模型在其他行业有着很多其他的应用。
MapReduce的设计目标是服务于那些只需数分钟或数小时即可完成的作业。并且运行于内部通过高速网络连接的单一数据中心内,并且该数据中心内的计算机需要由可靠地、定制的硬件构成。
Hadoop是Apache Lucene创始人Doug Cutting创建的,Lucene是一个广泛使用的文本搜索系统库。
Hadoop起源于Apache Nutch,一个开源的网络搜索引擎,它本身也是Lucene项目的一部分。
Nutch项目始于2002年,一个可以运行的网页爬去工具盒搜索引擎。但后来,开发者认为这一架构可扩展度不够,不能解决十亿网页的搜索问题。
2003年谷歌发表的一篇论文为此提供了帮助。文中描述的是谷歌产品架构,该架构称为谷歌分布式文件系统,简称GFS。GFS或类似的架构,可以解决他们在网页爬去和索引过程中产生的超大文件的存储需求。特别关键的是,GFS能够节省系统管理(如管理存储节点)所花的大量时间。
在2004年,Doug Cutting他们开始着手实现一个开源的实现,即Nutch的分布式文件系统(NDFS)。
2004年,谷歌发表论文介绍他们的MapReduce系统。
2005年初,Nutch的开发人员在Nutch上实现了一个MapReduce系统,到年中,Nutch的所有主要算法均完成移植,用MapReduce和NDFS来运行。
Nutch的NDFS和MapReduce实现不只是适用于搜索领域。在2006年2月,开发人员将NDFS和MapReduce移出Nutch形成Lucene的一个子项目,称为Hadoop。
尽管Hadoop因MapReduce及其分布式文件系统(HDFS,由NDFS改名而来)而出名。但Hadoop这个名字也用于一组相关项目的统称,这些相关项目都使用这个基本平台进行分布式计算和海量数据处理。
一组分布式文件系统和通用I/O的组件与接口(序列化、Java RPC和持久化数据结构)。
一种支持高效、跨语言的RPC以及永久存储数据的序列化系统。
分布式数据处理模型和执行环境,运行于大型商用机集群。
分布式文件系统,运行于大型商用机集群。
一种数据流语言和运行环境,用以检索非常大的数据集。Pig运行在MapReduce和HDFS的集群上。
一个分布式、按列存储数据库。HBase使用HDFS作为底层存储,同时支持MapReduce的批量式计算和点查询随机读取。
一个分布式,可用性高的协调服务。ZooKeeper提供分布式锁之类的基本服务用于构建分布式应用。
在数据库和HDFS之间高效传输数据的工具。
“Hadoop MapReduce的优点有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。