大数据技术之分布式文件系统以及Map-Reduce工具由于晶体管电路已经逐渐接近其物理上的性能极限,摩尔定律在2005年左右开始失效,人类再也不能期待单个CPU的速度每隔18个月就翻一倍。多核时代以及互联网时代的到来,迫使软件编程方式不得不考虑并行问题,因为基于多核的多线程并发编程以及基于大规模计算机集群的分布式并行编程已成为提升计算性能的主要途径。基于集群的分布式并行编程能够让软件与数据同时运行在连成一个网络的许多台计算机上,由此获得海量计算能力。以前大部分的计算都是在单cpu、内存、cache和本地磁盘构成的单个计算节点上完成。过去需要并行化处理的应用都是使用专门的计算机来完成的。然而随着大规模Web服务的流行,越来越多的计算是在拥有几千万个计算节点的装置上完成的,这些节点一般来说相互独立。上述节点的计算装置由普通硬件构成,与专用计算机相比大大降低了硬件开销。1、分布式文件系统和Hadoop为了使用集群计算,这里的文件系统不论在外观上还是行为方式上都必须有别于单机上传统文件系统,这种新的文件系统通常被称为分布式文件系统(DFS),它的典型使用方式如下:(1)文件非常大,比如TB级的文件。如果文件很小,那么使用DFS就意义不大了。(2)文件很少更新。更确切的说,文件作为某些计算的数据读入,并且不时有额外的数据追加到文件结尾。在DFS中,文件被分成文件块,文件块的大小通常为64MB。文件块会被复制成多个副本放在不同的计算节点上。另外,存放同一文件块不同副本的节点应分布在不同的机架上,这样在某个机架发生故障时就不至于丢失所有的副本。通常来说,文件块的大小和复制次数可以由用户指定。为寻找某个文件的文件块,存在同一个称为主节点或名字节点的小文件为该文件所用。主节点本身可以有多个副本,文件系统的总目录可以用于寻找主节点的副本。总目录本身可以有多个副本,所有使用DFS的用户都知道这些目录副本所在的位置。Hadoop实现了一个分布式文件系统简称HDFS,而Hadoop是Map-Reduce的一个具体的实现。Hadoop是一个能够对大量数据进行分布式处理的软件框架。Hadoop按照可靠、高效、可伸缩的方式处理。2、MapReduce工具2004年Google提出了MapReduce的编程思想,用于大规模数据集的并行分布式计算。MapReduce函数库在运行时自动解决输入数据的分布获取,跨越机器群的程序执行调度,处理机器失效及管理机器之间的通信请求等。MapReduce编程模型的基本原理是:通过一个输入的key/value对集合,中间操作都基于key/value进行。Mapreduce编程分为两个阶段:Map阶段和Reduce阶段。2.1、Key/Value数据模型分析和构建关系模型是目前较为常见的数据模型之一,但实际上从集合理论来讲,关系可以被看成为高度和基数都等于1的Key/Value集合。MapReduce模型的基本思想:将要执行的问题拆解成Map(映射)和Reduce(归约)操作,即先通过Map程序将数据切割成不相关的区块,分配(调度)给大量计算机处理达到分布运算的效果,再通过Reduce程序将结果汇整,输出开发者需要的结果。Map是把一组数据一对一地映射为另外的一组数据,其映射的规则由一个函数来指定,比如对[1,2,3,4]进行乘2的映射就变成了[2,4,6,8]。Reduce是对一组数据进行归约,这个归约的规则由另一个函数指定,比如对[1,2,3,4]进行求和的归约得到结果是10,而对它进行求积的归约结果是24。MapReduce计算模型的核心是Map和Reduce两个函数,这两个函数由用户负责实现,功能是按一定的映射规则将输入的键值对key,value转换成另一个或一批键值对key,value输出, 即将大数据集分解由集群中的一个节点并行执行Map计算任务并生成中间结果,然后这些中间结果又由大量的节点并行执行Reduce计算任务(指定了归约规则),形成最终结果。Key/Value可以说是对关系模型的有效扩展。所有基于Key/Value模型的数据操作,都可规约到相关集合操作上,最终规约到关系操作上。同时,也可以将关系运算中的相关操作拓展到集合模型中,来支撑针对集合数据的相关运算,如合并连接、求差等。2.2、MapReduce处理阶段在MapReduce计算模型中,整个作业计算流程为:作业的提交--Map任务的分配和执行--Reduce任务的分配和执行--作业的完成。而每个任务的执行又包含三个子步骤:数据输入的准备--算法的执行--输出的生成。(1)Input阶段:对一个Map任务应指明输入/输出的位置(路径)和其他一些运行参数,此阶段会把输入目录下的大数据文件切分为若干独立的数据块,并将数据块以key,value对的格式读入。(2)Map阶段;完成Map函数中用户定义的Map操作,生成一批新的中间key,value键值对,这组键值对的类型可与输入的键值对不同。(3)Shuffle&Sort阶段;为了保证Reduce任务的输入是Map排好序的输出,且具有相同key的中间结果尽可能由一个Reduce处理。在Shuffle阶段,完成混排交换数据,即把相同key的中间结果尽可能汇集到同一节点上;而在Sort阶段,模型将按照key的值对Reduce的输入进行分组排序。通常Shuffle和Sort两个阶段是同时进行的,最后尽可能将具有相同key的中间结果存储在数据节点的同一个数据分区中。(4)Reduce阶段;此阶段会遍历中问数据,对每一个唯一key执行用户自定义的Reduce函数(输入参数是key,(1istofvalues)),输出是新的key,value键值对。本文通过网络分布式连接多台PC计算机,能够利用已有的普通计算资源,完成对大规模矢量数据的高效处理。探讨了利用MapReduce并行方法处理空间数据的基本步骤。