




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
大数据技术概述大数据技术的概念与现状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分布式存储方案、分布式计算系统等。大数据处理的基本流程大数据处理的基本流程为数据的抽取和集成、数据分析以及数据解释。即在合适工具的辅助下,对广泛异构的数据源进行抽取和集成,结果按照一定的标准进行统一存储,并利用合适的数据分析技术对存储的数据进行分析,从中提取有益的知识并利用恰当的方式将结果展现给终端用户。数据处理方式流处理流处理的处理模式将数据视为流,源源不断的数据组成了数据流。当新的数据到来时就立刻处理并返回所需的结果。批处理批处理是指用户将一批作业提交给处理系统后就不再干预,由操作系统控制它们自动运行。大数据处理要求分布式计算分布式计算是指运行在多个处理单元上的任务合作求解一个规模很大的计算问题这些处理单元可与相互通信和协作以快速、高效求解大型复杂问题。并行计算可以微秒为单位处理大规模数据,比如天气预报,股票数据分析等。大规模集群并行分布式计算的不足在多台机器上对分布式数据进行分析会产生巨大的性能开销,即使采用千兆比特或万兆比特带宽的网络,随机读取速度和连续读取速度都会比内存慢几个数量级。现在高速局域网技术使得网络读取速度比硬盘读取要快很多。因此,将数据存储在其他节点上比存储在硬盘上的性能要好,而且还可以在多个节点上并行处理数据集分布式系统可靠性也是一个大问题,一个拥有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(V2))→list(K3,V3)2)combiner还具有类似本地的reduce功能.
例如hadoop自带的wordcount的例子和找出value的最大值的程序,combiner和reduce完全一致。如下所示:
map:(K1,V1)→list(K2,V2)
combine:(K2,list(V2))→list(K3,V3)
reduce:(K3,list(V3))→list(K4,V4)
3)如果不用combiner,那么,所有的结果都是reduce完成,效率会相对低下。使用combiner,先完成的map会在本地聚合,提升速度。
假设有两个map第一个map的输出为:(1950,0),(1950,20),(1950,10)第二个map输出为:(1950,25),(1950,15),(1950,30)Reduce函数被调用是,输入如下:(1950,[0,20,10,25,15,30])因为30是最大的值,所以输出如下:(1950,30)如果我们使用combiner,那么reduce调用的时候传入的数据如下:(1950,[20,30])--(1950,30)用表达式表示为:Max(0,20,10,25,15,30)=max(max(0,20,10),max(25,15,30))=max(20,30)=30Combiners简化了reduce端的工作量PatitionerPartitioner主要作用就是将map的结果发送到相应的Reduce。这就对partition有两个要求:1)均衡负载,尽量的将工作均匀的分配给不同的reduce。2)效率,分配速度一定要快。MapReduce示例:单词计数为了统计论文中出现次数最多的几个单词,可以采用以下几种方法:写一个小程序,把所有论文按顺序遍历一遍,统计每一个遇到的单词的出现次数,最后就可以知道哪几个单词最热门了(适合于数据集比较小,且非常有效的、实现最简单)。(单机计算)写一个多线程程序,并发遍历论文。理论上是可以高度并发的,因为统计一个文件时不会影响统计另一个文件。使用多核机器时比方法一高效。但是,写一个多线程程序要复杂得多。(并行计算)把作业交给多个计算机去完成。可以使用方法一的程序,部署到N台机器上去,然后把论文集分成N份,一台机器跑一个作业。这个方法跑得足够快,但是部署起来很麻烦,既要人工把论文集分开,复制到各台机器,还把N个运行结果进行整合。(并发计算)4)使用MapReduce,同并发计算类似,但如何拆分文件集,如何复制分发程序,如何整合结果这些都是框架定义好的。我们只要定义好这个任务(用户程序),其它都交给MapReduce。处理过程分析每个拿到原始数据的机器只要将输入数据切分成单词就可以了,所以可以在map阶段完成单词切分的任务。相同单词的频数计算也可以并行化处理,可以将相同的单词交给一台机器来计算频数,然后输出最终结果,这个过程可以交给reduce阶段完成。至于将中间结果根据不同单词分组再发送给reduce机器,这正好是MapReduce过程中的shuffle能够完成的。单词统计的处理过程1.Map阶段完成由输入数据到单词切分的工作。2.Shuffle阶段完成相同单词的聚集和分发工作(这个过程是MapReduce的默认过程,不用具体配置)。3.Reduce阶段完成接收所有单词并计算其频数的工作。MapReduce示例:单词计数案例:单词记数问题(WordCount)给定一个巨大的文本(如1TB),如何计算单词出现的数目?MapReduce示例:单词计数使用MapReduce求解该问题定义Map和Reduce函数MapReduce示例:单词计数使用MapReduce求解该问题Step1:自动对文本进行分割,形成初始的<key,value>对MapReduce示例:单词计数使用MapReduce求解该问题Step2:在分割之后的每一对<key,value>进行用户定义的Map进行处理,再生成新的<key,value>对MapReduce示例:单词计数使用MapReduce求解该问题Step3:对输出的结果集归拢、排序(系统自动完成)shuffleMapReduce示例:单词计数使用MapReduce求解该问题Step4:通过Reduce操作生成最后结果流程总揽Map的数目通常是由输入数据的大小决定的,一般就是所有输入文件的总块(block)数。Map正常的并行规模大致是每个节点(node)大约10到100个map,对于CPU消耗较小的map任务可以设到300个左右。由于每个任务初始化需要一定的时间,因此,比较合理的情况是map执行的时间至少超过1分钟。这样,如果你输入10TB的数据,每个块(block)的大小是128MB,你将需要大约82,000个map来完成任务我们使用天气的数据作为我们的示例,通常气象站几乎在每个小时,很多地点都在手机我们的气温信息,并采用日志的方式记录下来,所以用MapReduce来分析这些数据是在合适不过了。
我们使用天气的数据作为我们的示例,通常气象站几乎在每个小时,很多地点都在手机我们的气温信息,并采用日志的方式记录下来,所以用MapReduce来分析这些数据是在合适不过了。
数据文件按照日期和气象站的地点组织,目录从1901到2001年按照年来分目录,其中每个气象站的数据按照gzip压缩方式打包到一个文件中,下面这个例子列出累1990年的那个目录信息。 %lsraw/1990|head,010010-99999-1990.gz
010014-99999-1990.gz,010015-99999-1990.gz
010016-99999-1990.gz,10017-99999-1990.gz
010030-99999-1990.gz,010040-99999-1990.gz
010080-99999-1990.gz,10100-99999-1990.gz
010150-99999-1990.gz,目前为止,已经有成千上万个气象站,全部的数据将由一些相对来说比较小的文件组成,相对来说处理小文件比较容易。所以这就是为什么需要按照年份拆分成小文件。
解析后的年份与温度(0,11990999991950051507004...9999999N9+00001+9999..)(106,11990999991950051512004...9999999N9+00221+9999...)(212,11990999991950051518004...9999999N9-00111+99...)(318,2650999991949032412004...0500001N9+01111+99...)(424,12650999991949032418004...0500001N9+00781+99...)
Map函数仅仅从中解析出年份和温度(数据中加粗的部分),然后将他们输出[Key,value] (1950,0) (1950,22) (1950,−11) (1949,111) (1949,78)从map返回的output,在被送往reduce函数之前会被进行预处理。把key-value对进行排序和分组。所以接下来在reduce函数里看到的将是如下格式的输入: (1949,[111,78]) (1950,[0,22,−11])每年的温度数据在后面都可以通过后面的列表读取,所有的reduce函数需要做的就是遍历他然后找出最大的数据即可,最后结果如下。 (1949,111) (1950,22)最后输出这种结果:每年的最高气温。GoogleMapReduce执行流程文件存储位置源文件:GFSMap处理结果:本地存储Reduce处理结果:GFS日志:GFSMapReduce的用途MapReduce适合进行数据分析、日志分析、商业智能分析、客户营销、大规模索引等业务,并具有非常明显的效果。通过结合MapReduce技术进行实时分析,某家电公司的信用计算时间从33小时缩短到8秒,而MKI的基因分析时间从数天缩短到20分钟。NoSQLNoSQL(NoSQL=NotOnlySQL),意即反SQL运动,指的是非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展关系数据库暴露的问题Highperformance-对数据库高并发读写的需求web2.0网站要根据用户个性化信息来实时生成动态页面和提供动态信息,所以基本上无法使用动态页面静态化技术,因此数据库并发负载非常高,往往要达到每秒上万次读写请求。关系数据库应付上万次SQL查询还勉强顶得住,但是应付上万次SQL写数据请求,硬盘IO就已经无法承受了。其实对于普通的BBS网站,往往也存在对高并发写请求的需求。关系数据库暴露的问题HugeStorage-对海量数据的高效率存储和访问的需求对于大型的SNS网站,每天用户产生海量的用户动态,以国外的Friendfeed为例,一个月就达到了2.5亿条用户动态,对于关系数据库来说,在一张2.5亿条记录的表里面进行SQL查询,效率是极其低下乃至不可忍受的。再例如大型web网站的用户登录系统,例如腾讯,盛大,动辄数以亿计的帐号,关系数据库也很难应付。关系数据库暴露的问题HighScalability&&HighAvailability-对数据库的高可扩展性和高可用性的需求在基于web的架构当中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量与日俱增的时候,你的数据库却没有办法像webserver和appserver那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能力。对于很多需要提供24小时不间断服务的网站来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移,为什么数据库不能通过不断的添加服务器节点来实现扩展呢?关系数据库无用武之地在上面提到的“三高”需求面前,关系数据库遇到了难以克服的障碍,而对于web2.0网站来说,关系数据库的很多主要特性却往往无用武之地,如数据库事务一致性需求数据库的写实时性和读实时性需求对复杂的SQL查询,特别是多表关联查询的需求关系数据库无用武之地数据库事务一致性需求很多web实时系统并不要求严格的数据库事务,对读一致性的要求很低,有些场合对写一致性要求也不高。因此数据库事务管理成了数据库高负载下一个沉重的负担。关系数据库无用武之地数据库的写实时性和读实时性需求对关系数据库来说,插入一条数据之后立刻查询,是肯定可以读出来这条数据的,但是对于很多web应用来说,并不要求这么高的实时性。关系数据库无用武之地对复杂的SQL查询,特别是多表关联查询的需求任何大数据量的web系统,都非常忌讳多个大表的关联查询,以及复杂的数据分析类型的复杂SQL报表查询,特别是SNS类型的网站,从需求以及产品设计角度,就避免了这种情况的产生。往往更多的只是单表的主键查询,以及单表的简单条件分页查询,SQL的功能被极大的弱化了NoSQLNoSQL是非关系型数据存储的广义定义。它打破了长久以来关系型数据库与ACID理论大一统的局面。NoSQL数据存储不需要固定的表结构,通常也不存在连接操作。在大数据存取上具备关系型数据库无法比拟的性能优势。该术语在2009年初得到了广泛认同NoSQL与关系型数据库设计理念比较关系型数据库中的表都是存储一些格式化的数据结构,每个元组字段的组成都一样,即使不是每个元组都需要所有的字段,但数据库会为每个元组分配所有的字段,这样的结构可以便于表与表之间进行连接等操作,但从另一个角度来说它也是关系型数据库性能瓶颈的一个因素。而非关系型数据库以键值对存储,它的结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销。NoSQL实例Google的BigTable与Amazon的Dynamo是非常成功的商业NoSQL实现。一些开源的NoSQL体系,如Facebook的Cassandra,Apache的HBase,也得到了广泛认同MembaseMembase是NoSQL家族的一个新的重量级的成员。Membase是开源项目,源代码采用了Apache2.0的使用许可。该项目托管在GitHub.Sourcetarballs上,目前可以下载beta版本的Linux二进制包。MongoDBMongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。它的特点是高性能、易部署、易使用,存储数据非常方便MongoDB文件存储格式为BSON(一种JSON的扩展)BSON(BinarySerializeddOcumentFormat)存储形式是指:存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各中复杂的文件类型MongoDB可通过网络访问MongoDB服务端可运行在Linux、Windows或OSX平台,支持32位和64位应用,默认端口为27017。推荐运行在64位平台,因为MongoDB在32位模式运行时支持的最大文件尺寸为2GBHypertableHypertable是一个开源、高性能、可伸缩的数据库,它采用与Google的Bigtable相似的模型。Google的三个关键组件GoogleFileSystem(GFS),这是一个高可用的文件系统Map-Reduce的计算框架,它与GFS紧密协作,帮助处理收集到的海量数据Bigtable,它是传统数据库的替代Hypertable是Bigtable的一个开源实现HadoopHDFS(HadoopDistributedFileSystem)是GoogleFileSystem(GFS)的开源实现。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论