内容不错啊:部分内容如下:
1. Meet Hadoop1.1. Data 数据本节陈述了这样的事实:数据量越来越大,并且来源也越来越多,我们面临的问题是如何有效的存储和分析它们。 1.2. Data Storageand Analysis 数据存储和分析现在面临这这样的一个问题:当磁盘的存储量随着时间的推移越来越大的时候,对磁盘上的数据的读取速度却没有多大的增长。 读取硬盘上的全部数据会花费比较长的时间,如果是写操作的话则会更慢。一个解决的办法是同时读取多个硬盘上的数据。例如我们有100块硬盘,而他们分别存储整个数据的1%的话,若是用并行读取的方法操作,可以在两分钟之内搞定。只使用每块硬盘的1%当然是浪费的,但是我们可以存储100个数据集(dataset),每个1T,并且提供共享访问。有了更短的分析时间之后,这样的系统的用户应该是乐于接受共享访问模式的。他们的工作是按时间划分的,这样相互之间就不会有较大的影响。 从多个磁盘上进行并行读写操作是可行的,但是存在以下几个方面的问题: 1) 第一个问题是硬件错误。使用的硬件越多出错的几率就越大。一种常用的解决方式是数据冗余,保留多分拷贝,即使一份数据处理出错,还有另外的数据。HDFS使用的也是类似的方式,但稍有不同。 2) 第二个问题是数据处理的相关性问题。例如很多分析工作在一快磁盘上处理出来的结果需要与其他磁盘上处理处理出来的结果合并才能完成任务。各种分布式系统也都给出了合并的策略,但是做好这方面确实是一个挑战。MapReduce提供了一种编程模型,他将从硬盘上读写数据的问题抽象出来,转化成对一系列键值对的计算。 简而言之,Hadoop提供了一个可靠的存储和分析系统。存储又HDFS提供,分析由MapReduce提供。 1.3. 与其他系统比较1.3.1. RDBMS为什么我们不能使用大量的磁盘数据库做大规模的批量分析?为什么需要MapReduce? 1) 磁盘的寻道时间提高的速度低于数据的传输速度,如果数据访问模式由寻道时间支配的话,在读写数据集的一大部分的时候速度就会较流式读取慢很多,这样就出现了瓶颈。 2) 另一方面在更新数据集的少量数据的时候,传统的B-树工作的比较好,但是在更新数据集的大部分数据的时候B-树就显得比MapReduce方式慢了。MapReduce使用排序/合并操作去重建数据库(完成数据更新)。 在很多方面MapReduce可以看作是对传统关系数据库的补充。MapReduce比较适合于需要分析整个数据集,并且要使用批处理方式,特别是特定的分析的情况;RDBMS点查询方面占优势,或在已编制索引的数据集提供低延迟的检索和更新的数据,但是数据量不能太大。MapReduce适合一次写入,多次读取的操作,但是关系数据库就比较适合对数据集的持续更新。 还有一方面,MapReduce比较适合处理半结构化,非结构化的数据。 关系数据往往进行规则化以保证数据完整性,并删除冗余。这样做给MapReduce提出了新的问题:它使得读数据变成了非本地执行,而MapReduce的一个重要前提(假设)就是数据可以进行高速的流式读写。 MapReduce是可以进行线性扩展的编程模型。一个对集群级别的数据量而写的MapReduce可以不加修改的应用于小数据量或者更大数据量的处理上。更重要的是当你的输入数据增长一倍的时候,相应的处理时间也会增加一倍。但是如果你把集群也增长一倍的话,处理的速度则会和没有增加数据量时候的速度一样快,这方面对SQL查询来说不见得是正确的。 随着时间的推移,关系数据库和MapReduce之间的差别变得越来越不明显,很多数据库(例如Aster Data和Greenplum的数据)已经借用了一些MapReduce的思想。另一个方面,基于MapReduce的高层次查询语言使得MapReduce系统较传统的关系数据库来说,使程序员们更容易接受。 1.3.2. Grid Compuing 网格计算数据量大的时候网络带宽会成为网格计算的瓶颈。但是MapReduce使数据和计算在一个节点上完成,这样就变成了本地的读取。这是MapReduce高性能的核心。 MPI将控制权大大的交给了程序员,但是这就要求程序员明确的处理数据流等情况,而MapReduce只提供高层次的操作:程序员只需考虑处理键值对的函数,而对数据流则是比较隐晦的。 在分布式计算中,如何协调各个处理器是一项很大的挑战。最大的挑战莫过于如何很好的处理部分计算的失误。当你不知道是不是出现错误的时候,程序还在继续运行,这就比较麻烦了。由于MapReduce是一种非共享(Shared-nothing)的架构,当MapReduce实现检测到map或者reduce过程出错的时候,他可以将错误的部分再执行一次。MPI程序员则需要明确的考虑检查点和恢复,这虽然给程序员很大自由,但是也使得程序变得难写。 也许你会觉得mapreduce模式过于严格,程序员面对的都是些键值对,并且mapper和reducer之间很少来往,这样的模式能做一些有用的或者是非凡的事情吗?答案是肯定的,Google已经把Mapreduce使用在了很多方面——从图像分析到基于图的问题,再到机器学习,MapReduce工作的很好。虽然他不是万能的,但是他确是一种通用的数据处理工具。 1.3.3. VolunteerComputing志愿计算志愿计算主要是让志愿者贡献CPU时间来完成计算。 MapReduce是针对在一个高聚合网络连接的数据中心中进行的可信的、使用专用的硬件工作持续数分钟或者数个小时而设计的。相比之下,志愿计算则是在不可信的、链接速度有很大差异的、没有数据本地化特性的,互联网上的计算机上运行永久的(超长时间的)计算, 1.4. Hadoop简史(略)1.5. The Apache Hadoop Project(略)2. MapReduce2.1. A Weather Dataset 一个天气数据集数据是NCDC的数据,我们关注以下特点: 1) 数据是半格式化的 2) 目录里面存放的是从1901-2001年一个世纪的记录,是gzip压缩过的文件。 3) 以行为单位,使用ASCII格式存储,每行就是一条记录 4) 每条记录我们关注一些基本的元素,比如温度,这些数据在每条数据中都会出现,并且宽度也是固定的。 下面是一条记录的格式,为了便于显示,做了一部分调整。
|