大数据技术概述大数据技术的概念与现状2011年,中国互联网行业持有数据总量达到1.9EB(1EB字节相当于10亿GB)2013年,我们生成这样规模的信息量只需10分钟2015年,全球被创建和复制的数据总量将增长到8.2EB以上2020年,全球电子设备存储的数据将暴增30倍,达到35ZB•从数据的生成到消耗,时间窗口非常小,可用于生成决策的时间非常少每秒钟发送290万封电子邮件每分钟向youtube上传60个小时的视频每天在微信上长传1亿条信息淘宝网的日成交量是2000亿元大数据包含大量的半结构化和非结构化数据10%的结构化数据,存储在数据库中90%的非结构化数据,它们与人类信息密切相关非结构化数据类型多样邮件、视频、微博位置信息、链接信息手机呼叫、网页点击池塘捕鱼(数据库)vs.大海捕鱼(大数据)数据规模:“池塘”的处理对象通常以MB为基本单位,而“大海”则常常以GB,甚至是TB、PB为基本处理单位。数据类型:“池塘”中数据的种类单一,往往仅仅有一种或少数几种,这些数据又以结构化数据为主。“大海”中数据的种类繁多,数以千计,而这些数据又包含着结构化、半结构化以及非结构化的数据,并且半结构化和非结构化数据所占份额越来越大。模式和数据的关系:传统的数据库先有模式,然后才会产生数据。这就好比是先选好合适的“池塘”,然后才会向其中投放适合在该“池塘”环境生长的“鱼”。大数据难以预先确定模式,模式只有在数据出现之后才能确定,且模式随着数据量的增长处于不断的演变之中。处理对象:传统数据库中数据仅作为处理对象。而在大数据时代,要将数据作为一种资源来辅助解决其他诸多领域的问题。处理工具:捕捞“池塘”中的“鱼”,一种渔网或少数几种基本就可以应对。但是在“大海”中,不可能存在一种渔网能够捕获所有的鱼类处理技术大数据时代对数据处理的实时性、有效性提出了更高要求,传统的常规技术手段根本无法应付。大数据时代使用的新技术,主要包括分布式缓存、分布式数据库、分布式文件系统、各种NoSQL分布式存储方案、分布式计算系统等。大数据处理的基本流程大数据处理的基本流程为数据的抽取和集成、数据分析以及数据解释。即在合适工具的辅助下,对广泛异构的数据源进行抽取和集成,结果按照一定的标准进行统一存储,并利用合适的数据分析技术对存储的数据进行分析,从中提取有益的知识并利用恰当的方式将结果展现给终端用户。数据处理方式流处理流处理的处理模式将数据视为流,源源不断的数据组成了数据流。当新的数据到来时就立刻处理并返回所需的结果。批处理批处理是指用户将一批作业提交给处理系统后就不再干预,由操作系统控制它们自动运行。大数据处理要求l分布式计算u分布式计算是指运行在多个处理单元上的任务合作求解一个规模很大的计算问题u这些处理单元可与相互通信和协作以快速、高效求解大型复杂问题。u并行计算可以微秒为单位处理大规模数据,比如天气预报,股票数据分析等。大规模集群并行分布式计算的不足在多台机器上对分布式数据进行分析会产生巨大的性能开销,即使采用千兆比特或万兆比特带宽的网络,随机读取速度和连续读取速度都会比内存慢几个数量级。现在高速局域网技术使得网络读取速度比硬盘读取要快很多。因此,将数据存储在其他节点上比存储在硬盘上的性能要好,而且还可以在多个节点上并行处理数据集分布式系统可靠性也是一个大问题,一个拥有10个节点的集群很容易出现节点故障。这可以通过在节点间复制数据来解决,对数据进行复制,既可以提高数据分析的效率,也可以通过冗余来应对节点故障。当然,数据集越大,对数据副本的管理和维护也越困难。一些数据分析软件,比如SAS、SPSS等因其数据处理能力受限于单机的计算能力,对大数据的处理显得力不从心基本的大数据处理技术HadoopMapReduceHDFSNoSqlHadoop概述Hadoop是一个开源的可运行于大规模集群上的分布式并行编程框架,它实现了Map/Reduce计算模型。Hadoop能够对大量数据进行分布式处理,并且是以一种可靠、高效、可伸缩的方式进行处理的借助于Hadoop,程序员可以轻松地编写分布式并行程序,将其运行于计算机集群上,完成海量数据的计算。2008年4月,Hadoop打破世界纪录,成为最快排序1TB数据的系统。运行在一个910节点的群集,Hadoop在209秒内排序了1TB的数据,击败了前一年的297秒冠军。11月,谷歌在报告中生成,它的MapReduce实现执行1TB数据的排序只用了68秒。2009年5月,Yahoo的团队使用Hadoop对1TB的数据进行排序只花了62秒时间。Hadoop的特点Hadoop采用了分布式存储方式,提高了读写速度,并扩大了存储容量。采用MapReduce来整合分布式文件系统上的数据,可保证分析和处理数据的高效。得Hadoop可以部署在低廉的计算机集群中,同时不限于某个操作系统。Hadoop框架应用举例求20个数据中的最大数,一般的编程方式把第一个数据开始往后面一个个的比较,总是把更大的数据记录下来,这样顺序比较下去,最后就得到了最大的数据;但是Hadoop的做法是把这20个数据分成4组,每组5个数据,每组采用Map函数求出最大值,然后后每组把求得的各自最大值交给Reduce,由Reduce得出最后的最大值;Hadoop框架的体系结构HDFS和MapReduce是Hadoop的两大核心。HDFS在集群上实现了分布式文件系统,MapReduce在集群上实现了分布式计算和任务处理。HDFS在MapReduce任务处理过程中提供了文件操作和存储等支持,MapReduce在HDFS的基础上实现了任务的分发、跟踪、执行等工作,并收集结果,二者相互作用,完成了Hadoop分布式集群的主要任务。Hadoop的优势数据存储在哪一台计算机上,就由这台计算机进行这部分数据的计算,这样可以减少数据在网络上的传输,降低对网络带宽的需求。在Hadoop这样的基于集群的分布式并行系统中,计算结点可以很方便地扩充,而因它所能够提供的计算能力近乎是无限的,但是由是数据需要在不同的计算机之间流动,故网络带宽变成了瓶颈,是非常宝贵的,“本地计算”是最有效的一种节约网络带宽的手段,业界把这形容为“移动计算比移动数据更经济”。MapReduce概述MapReduce是一个简单易用的软件框架,基于它可以将任务分发到由上千台商用机器组成的集群上,并以一种高容错的方式并行处理大量的数据集,实现Hadoop的并行任务处理功能。MapReduce是一种并行编程模式,这种模式使得软件开发者可以轻松地编写出分布式并行程序。MapReduce包括Map(映射)和Reduce(化简)两个阶段,可以进行海量数据分割、任务分解与结果汇总,从而完成海量数据的并行处理。适合用MapReduce来处理的数据集,需要可以分解成许多小的数据集,而且每一个小数据集都可以完全并行地进行处理。MapReduce极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。MapReduce的优点MapReduce将传统的查询、分解及数据分析进行分布式处理,将处理任务分配到不同的处理节点,因此具有更强的并行处理能力。作为一个简化的并行处理的编程模型,MapReduce还降低了开发并行应用的门槛。MapReduce工作原理MapReduce的工作原理其实是先分后合的数据处理方式。Map即“分解”,把海量数据分割成了若干部分,分给多台处理器并行处理;Reduce即“合并”,把各台处理器处理后的结果进行汇总操作以得到最终结果。利用一个输入的key/value对集合来产生一个输出的key/value对集合。MapReduce用两个函数来表达这个计算:Map和Reduce。用户自定义的map函数接收一个输入的key/value对,然后产生一个中间key/value对的集合。MapReduce把所有具有相同key值的value集合在一起,然后传递给reduce函数。用户自定义的reduce函数接收key和相关的value集合。reduce函数合并这些value值,形成一个较小的value集合。用户只需要编写map和reduce函数,而如何分配调用资源,则交给Hadoop去做。如果采用MapReduce来统计不同几何形状的数量,它会先把任务分配到两个节点,由两个节点分别并行统计,然后再把它们的结果汇总,得到最终的计算结果。一个Map-Reduce作业(job)通常会把输入的数据集切分为若干独立的数据块,由map任务(task)以完全并行的方式处理它们。框架会对map的输出先进行排序,然后把结果输入给reduce任务。通常作业的输入和输出都会被存储在文件系统中。整个框架负责任务的调度和监控,以及重新执行已经失败的任务。Map-Reduce框架和分布式文件系统是运行在一组相同的节点上的,即计算节点和存储节点通常在一起。这种配置允许框架在那些已经存好数据的节点上高效地调度任务,这可以使整个集群的网络带宽被非常高效地利用。Map-Reduce框架由单独一个masterJobTracker和每个集群节点一个slaveTaskTracker共同组成。这个master负责调度构成一个作业的所有任务,这些任务分布在不同的slave上,master监控它们的执行,重新执行已经失败的任务。而slave仅负责执行由master指派的任务。MapReduce工作流程MapReduce来处理大数据集的过程,就是将大数据集分解为成百上千的小数据集,每个数据集分别由集群中的一个结点(可以一台普通的计算机)进行处理并生成中间结果,然后这些中间结果又由大量的结点进行合并,形成最终结果。Inputsplitshuffleoutputmap任务处理:1.读取输入文件内容,解析成键值对(key/value).对输入文件的每一行,解析成键值对(key/value).每一个键值对调用一次map函数2.写自己的逻辑,对输入的键值对(key/value)处理,转换成新的键值对(key/value)输出3.对输出的键值对(key/value)进行分区(partition)4.对不同分区的数据,按照key进行排序,分组.相同的key/value放到一个集合中(shuffle)5.分组后的数据进行规约(combiner,可选择的)MapReducereduce任务处理:1.对多个map任务的输出,按照不同的分区,通过网络copy到不同的reduce节点.2.对多个map任务的输出进行合并,排序.写reduce函数自己的逻辑,对输入的key/value处理,转换成新的key/value输出.3.把reduce的输出保存到文件中(写入到hdfs中).ShuffleShuffle是将Map输出进行进一步整理并交给reduce的过程在MapReduce流程中,为了让reduce可以并行处理map结果,必须对map的输出进行一定的排序和分割,然后再交给对应的reduce。这个将map输出进行进一步整理并交给reduce的过程,就称为shuffleShuffle过程是MapReduce工作流程的核心,也被称为奇迹发生的地方。要想理解MapReduce,Shuffle是必须要了解的Shuffle过程包含在map和reduce两端中,描述着数据从maptask输出到reducetask输入的这段过程CombinersCombiners的作用:每一个map可能会产生大量的输出,combiner的作用就是在map端对输出先做一次合并,以减少传输到reducer的数据量,1)combiner最基本是实现本地key的聚合,对map输出的key排序,value进行迭代。如下所示:map:(K1,V1)→list(K2,V2)combine:(K2,list(V2))→list(K2,V2)reduce:(K2,list