【Hadoop权威指南】初识Hadoop

初识Hadoop

大量的数据胜过好的算法。

数据存储和分析

要实现数据的并行读写,需要解决许多问题:

1. 硬件故障,避免数据丢失的常见做法是备份,冗余磁盘阵列(RAID)就是按这个原理。HDFS也是,不过采取的方法稍有不同。

2. 大多数分析任务需要以某种方式结合大部分数据共同完成分析任务吗,即从一个磁盘读取的数据可能需要和从另外99个磁盘读取的数据结合使用。MapReduce提出了一个编程模型,该模型将上述磁盘读写的问题进行抽象,并转换为对一个数据集(由键\值组成)的计算。该计算由mapreduce组成,而只有这两部分提供对外的借口。

总之,Hadoop是一个可靠的共享存储和分析系统,HDFS实现存储,而MapReduce实现分析和处理。

与其他系统相比

MapReduce似乎还是蛮力法,每个查询都要处理整个数据集---或至少数据集的一大部分。MapReduce是一个批量查询处理器,并且能够在合理的时间范围内处理针对整个数据集的即时(ad hoc)查询。

关系型数据库管理系统

为什么不采用数据库来对大量磁盘上的大规模数据进行批量分析呢?因为寻址时间的提高远远慢于传输速率的提高。寻址时间导致磁盘操作延迟,传输速率取决于磁盘的带宽。

传统关系型数据库

MapReduce

数据大小

GB

PB

访问

交互式和批处理

批处理

更新

多次读写

一次写入多次读取

结构

静态模式

动态模式

完整性

横向扩展

非线性

线性

MapReduce和关系型数据库的另一区别就是他们所操纵的数据集的结构化程度。结构化数据是具有特定格式的实体化数据,例如XML等,这是RDBMS包括的内容。半结构化数据比较松散,虽然有格式,也经常被忽略,它只能作为对数据结构的一般指导。非结构化数据没有什么特别的内部结构,如纯文本或图像数据。MapReduce对非结构化和半结构化数据非常有效,因为在处理数据时猜对数据进行解析,即,MapReduce输入的键和值并不是数据固有的属性,而是由分析人员来选择的。

关系型数据往往是规范的,规范化给MapReduce带来了问题,因为它使记录读取成异地操作,而MapReduce的核心假设之一就是,它可以进行(高速的)流式读写操作。

Web服务器日志是一种典型的非规范化数据记录,这也是MapReduce非常适合用于分析各种日志文件的原因。

MapReduce是一个线性的可伸缩的编程模型,程序员要编写map函数和reduce函数---每个函数定义了一个键\值对集合到另一个键\值对集合的映射。这些函数无需关注数据集极其所用集群的大小。如果输入的数据量是原来的两倍,那么运行时间也是两倍,如果集群是原来的两倍,那么运行时间不变。这有别于SQL查询。

网格计算

高性能计算的方法是将作业分散到集群的各台机器上,这些机器访问由存储区域网络(SAN)组织的共享文件系统。比较适合计算密集型的作业。

MapReduce会尽量在计算节点上存储数据,以实现数据的本地快速访问。数据本地化特性是MapReduce的核心特征。MapReduce通过显式网络拓扑结构尽力保留网络带宽。

MapReduce在更高层次上执行任务,即程序员仅从键\值对函数的角度考虑任务的执行,这样数据流是隐含的。

在大规模分布式计算环境下,协调进程间的执行是一个巨大挑战。MapReduce让程序员无需考虑系统的部分失效问题。因为自身的系统实现能够检测到失败的mapreduce任务,并让正常运行的机器重新执行失败的任务,这意味着各个任务彼此独立。

MapReduce系统本身控制着mapper的输出结果传给reducer的过程,这时重新运行reducer要比重新运行mapper更加小心,因为reducer需要获取必要的mapper结果)

志愿计算

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

你可能感兴趣的:(Hadoop权威指南)