Hadoop MapReduce的优点有哪些

43次阅读
没有评论

本篇内容介绍了“Hadoop MapReduce 的优点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让丸趣 TV 小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

数据!数据!

曾有这么一句话:“大量的数据胜于好的算法。”意思是说,对于某些应用(譬如基于先前偏好进行电影和音乐推荐),不论你的算法有多好,大量的可用的数据总能带来更好的推荐效果。

现在,我们已经有了大量的数据。不幸的是,我们当下正纠结于存储和分析这些数据。

数据存储与分析

我们遇到的问题很简单:磁盘访问速度跟不上磁盘存储容量增长的速度。

1、一个减少读取磁盘时间的办法?

读取一个磁盘中所有的数据需要很长时间,写甚至更慢。一个很简单减少读取时间的办法是:同时从多个磁盘上读取数据。

试想,如果我们拥有 100 个磁盘,每个磁盘存储 1% 的数据,并行读取,那么不到两分钟就可以读取所有数据。

仅使用磁盘容量的 1% 似乎很浪费。但是我们可以存储 100 个数据集,每个数据集 1TB,并实现共享磁盘的访问。可以想象,该类系统的用户会很乐意使用磁盘共享访问以便缩短数据分析时间;并且,从统计角度来看,用户的分析工作会在不同的时间点进行,所以互相之间的干扰不会太大。

2、要实现对多个磁盘数据的并行读写,还有更多的问题要解决?问题 1)、硬件故障

一旦使用多个硬件,其中任一硬件发生故障的概率将非常高。

避免数据丢失的常用做法是?

常用做法为使用备份避免数据丢失。

系统保存数据的冗余复本,在发生故障后,可以使用数据的另一个可用复本。

例如:冗余磁盘阵列(RAID)就是按这个原理实现的。

另外,Hadoop 的文件系统,即 HDFS(Hadoop Distributed FileSystem)也用于备份复本。

问题 2)、大多数分析任务需要以某种方式结合大部分数据共同完成分析任务

即,从一个磁盘读取的数据可能需要和从另外 99 个磁盘中读取的数据结合使用。各种分布式系统允许结合多个来源的数据并实现分析,但保证其正确性是一个很大的挑战。

MapReduce 提出一个编程模型。该模型将上述磁盘读写的问题进行抽象,并转换为一个数据集(由键 / 值对组成)的计算。

此计算模型由 map 和 reduce 两部分组成,而只有这两部分提供对外的接口。与 HDFS 类似,MapReduce 也具有较高的可靠性。

简而言之,Hadoop 提供了一个可靠的共享存储和分析系统。HDFS 实现存储,而 MapReduce 实现分析处理。纵然 Hadoop 还有其他功能,但这两部分是它的核心。

与其他系统相比

MapReduce 似乎采用的是一种蛮力方法。每个查询需要处理整个数据集——或至少数据集的很大一部分。

反过来想,这也正是它的能力。

MapReduce 是一个批量查询处理器,并且它能够在合理的时间范围内即时处理针对整个数据集的即时(ad hoc)查询。

关系型数据管理系统 1、我们为什么不能使用数据库来对大量磁盘上的大规模数据进行进行批量分析呢?我们为什么需要 MapReduce?

这些问题的答案来自磁盘的另一发展趋势:寻址时间的提高远远慢于传输速率的提高。

寻址是将磁头移动到特定磁盘位置进行读写操作的过程。它是导致磁盘操作延迟的主要原因,而传输速率取决于磁盘的带宽。

如果数据的访问模式中包含大量的磁盘寻址,那么读取大量数据集所花的时间势必会更长(相较于流式数据读取模式),流式读取主要取决于传输速率。

另一方面,如果数据库系统只更新一部分记录,那么传统的 B 树更有优势(关系型数据库中使用的一种数据结构,受限于寻址的比例)。

但数据库更新大部分数据时,B 树的效率比 MapReduce 低得多,因为需要使用“排序 / 合并”(sort/merge)来重建数据库。

在许多情况下,可以将 MapReduce 视为关系型数据库管理系统的补充。

1)、两个系统之间的差异如图所示:

此处缺图一张,占位,下次补。

2)、MapReduce 和关系型数据库之间的另一个区别在于它们所操作的数据集的结构化程度

结构化数据:是具有既定格式的实体化数据。

诸如 XML 文档或满足特定预定义格式的数据库表。这是 RDBMS 包括的内容。

半结构化数据:

比较松散。虽然可能有格式,但经常被忽略,所以它只能用作对数据结构的一般指导。

例如,一张电子表格,其结构是由单元格组成的网格,但是每个单元格自身可保存任何形式的数据。

非结构化数据:

没有什么特别的内部结构。

例如,纯文本或图像数据。

MapReduce 对于非结构化或半结构化数据非常有效。

因为,在处理数据时才对数据进行解释。

换句话说:MapReduce 输入的键和值并不是数据固有的属性,而是由分析数据的人员来选择的。

2、为什么 MapReduce 非常适合用于分析各种日志文件?

因为 Web 服务器日志是一个典型的非规范化数据记录(例如:每次都需要记录客户端主机全名,导致同一客户端全名可能会多次出现),这也是 MapReduce 非常适用于分析各种日志文件的原因之一。

3、MapReduce 是一中线性可伸缩的编程模型

程序员编写两个函数,分别为 map 和 reduce 函数——每个函数定义一个键 / 值对集合到另一个键 / 值对集合的映射。

这些函数无需关注数据集及其所用集群的大小,因此可以原封不动地应用到小规模数据集或大规模的数据集上。更重要的是,如果输入的数据量是原来的两倍,那么运行的时间也需要两倍。但是,如果集群是原来的两倍,作业的运行仍然与原来一样快。SQL 查询一般不具备该特性。

但是,在不久的将来,关系型数据库系统和 MapReduce 系统之间的差异很可能变得模糊。

关系型数据库都开始吸收 MapReduce 的一些思路。另一方面,基于 MapReduce 的高级查询语言(如 Pig 和 Hive)使 MapReduce 得系统更接近传统的数据库编程方式。

网格计算

MapReduce 会尽量在计算节点上存储数据,以实现数据的本地快速访问。

数据本地化特性是 MapReduce 的核心特征,并因此而获得良好的性能。

意识到网络带宽是数据中心环境最珍贵的资源(到处复制数据很容易耗尽网络带宽)之后,MapReduce 通过显示网络拓扑结构尽力保留网络带宽。

1、在大规模分布式计算环境下,如何处理系统部分失效问题?

在大规模分布式计算环境下,协调各进程间的执行是一个很大的挑战。最困难的是合理地处理系统部分失效问题——在不知道一个远程进行是否已失效的情况下——同时还需要继续完成整个计算。

MapReduce 让程序员无需考虑系统的部分失效问题,因为自身的系统实现能够检测到失败的 map 或 reduce 任务,并让正常运行的机器重新执行这些失败的任务。

正是由于采用了无共享框架,所以 MapReduce 才能够实现失败检测,这意味着各个任务之间彼此独立。(因为 MapReduce 系统本身控制着 mapper 的输出结果传给 reducer 的过程,这种情况下,重新运行 reducer 比重新运行 mapper 更需要格外小心。因为 reducer 需要获取必要的 mapper 的输出结果,如果没有获得必要的输出结果,必须再次运行相关 mapper 重新生成输出结果。)

因此,从程序员的角度来看,任务的执行顺序是无关紧要的。相比之下,MPI(消息传递接口) 程序必须显式的管理自身的检查点和恢复机制,尽管更多的控制权交给了程序员,但也加大了编程的难度。

2、MapReduce 的灵感来自于?

灵感来自于传统的函数式编程、分布式计算和数据库社区,此后该模型在其他行业有着很多其他的应用。

3、MapReduce 的设计目标是?

MapReduce 的设计目标是服务于那些只需数分钟或数小时即可完成的作业。并且运行于内部通过高速网络连接的单一数据中心内,并且该数据中心内的计算机需要由可靠地、定制的硬件构成。

Hadoop 发展简史

Hadoop 是 Apache Lucene 创始人 Doug Cutting 创建的,Lucene 是一个广泛使用的文本搜索系统库。

Hadoop 起源于 Apache Nutch

Hadoop 起源于 Apache Nutch,一个开源的网络搜索引擎,它本身也是 Lucene 项目的一部分。

Nutch 项目始于 2002 年,一个可以运行的网页爬去工具盒搜索引擎。但后来,开发者认为这一架构可扩展度不够,不能解决十亿网页的搜索问题。

2003 年谷歌发表的一篇论文为此提供了帮助。文中描述的是谷歌产品架构,该架构称为谷歌分布式文件系统,简称 GFS。GFS 或类似的架构,可以解决他们在网页爬去和索引过程中产生的超大文件的存储需求。特别关键的是,GFS 能够节省系统管理(如管理存储节点)所花的大量时间。

1)、2004 年实现 Nutch 的分布式文件系统(NDFS)

在 2004 年,Doug Cutting 他们开始着手实现一个开源的实现,即 Nutch 的分布式文件系统(NDFS)。

2)、2005 年初 Nutch 的开发人员在 Nutch 上实现 MapReduce 系统

2004 年,谷歌发表论文介绍他们的 MapReduce 系统。

2005 年初,Nutch 的开发人员在 Nutch 上实现了一个 MapReduce 系统,到年中,Nutch 的所有主要算法均完成移植,用 MapReduce 和 NDFS 来运行。

3)、NDFS 和 MapReduce 移出 Nutch 形成 Lucene 的一个子项目,称为 Hadoop

Nutch 的 NDFS 和 MapReduce 实现不只是适用于搜索领域。在 2006 年 2 月,开发人员将 NDFS 和 MapReduce 移出 Nutch 形成 Lucene 的一个子项目,称为 Hadoop。

4)、2008 年 1 月,Hadoop 已成为 Apache 的顶级项目 5)、2008 年 4 月,Hadoop 打破世界纪录,成为最快的 TB 级数据排序系统 6)、Hadoop 的大事记 Apache Hadoop 和 Hadoop 生态圈

尽管 Hadoop 因 MapReduce 及其分布式文件系统(HDFS,由 NDFS 改名而来)而出名。但 Hadoop 这个名字也用于一组相关项目的统称,这些相关项目都使用这个基本平台进行分布式计算和海量数据处理。

书中提到的 Hadoop 项目简述如下:
Common

一组分布式文件系统和通用 I / O 的组件与接口(序列化、Java RPC 和持久化数据结构)。

Avro

一种支持高效、跨语言的 RPC 以及永久存储数据的序列化系统。

MapReduce

分布式数据处理模型和执行环境,运行于大型商用机集群。

HDFS

分布式文件系统,运行于大型商用机集群。

Pig

一种数据流语言和运行环境,用以检索非常大的数据集。Pig 运行在 MapReduce 和 HDFS 的集群上。

Hive

一个分布式、按列存储数据库。HBase 使用 HDFS 作为底层存储,同时支持 MapReduce 的批量式计算和点查询随机读取。

Zookeeper

一个分布式,可用性高的协调服务。ZooKeeper 提供分布式锁之类的基本服务用于构建分布式应用。

Sqoop

在数据库和 HDFS 之间高效传输数据的工具。

“Hadoop MapReduce 的优点有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注丸趣 TV 网站,丸趣 TV 小编将为大家输出更多高质量的实用文章!