资源描述
Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,大数据处理技术,科信办 刘伟,2014,年,4,月,第一节,Mapreduce,编程模型,第二节,hadoop HDFS,原理,第三节,nosql,之,hbase,第一节,Mapreduce,编程模型,1.,技术背景,2. mapreduce,的概念,3.mapreduce,的编程模型原理,4mapreduce,工作流程,5.mapreduce,的局限,1.,技术背景:,分布式并行计算是大数据(,pb,)处理的有效方法,编写正确高效的大规模并行分布式程序是计算机工程领域的难题。,并行计算的模型、计算任务分发、计算机结果合并、计算节点的通讯、计算节点的负载均衡、计算机节点容错处理、节点文件的管理等方面都要考虑。,为了解决上述复杂的问题,谷歌设计一个新的抽象模型,使用这个抽象模型,普通程序员只要表述他们想要执行的简单运算即可,而不必关心并行计算、容错、 数据分布、负载均衡等复杂的细节,这些问题都被封装了,交个了后台程序来处理。这个模型就是,mapreduce,。,谷歌,2004,年公布的,mapreduce,编程模型,在工业界、学术界产生巨大影响,以至于谈大数据必谈,mapreduce,。,工业界试图做的事情就是要实现一个能够媲美或者比,Google mapreduce,更好的系统,多年的努力下来,,Hadoop,(开源)脱颖而出,成为外界实现,MapReduce,计算模型事实上的标准,围绕着,Hadoop,,已经形成了一个庞大的生态系统。,2. mapreduce,的概念:,MapReduce,是一个编程模型,一个处理和生成超大数据集的算法模型的相关实现。简单的一句话解释,MapReduce,就是“任务的分解与结果的汇总”。,mapreduce,成功的最大因素是它简单的编程模型。程序员只要按照这个框架的要求,设计,map,和,reduce,函数,剩下的工作,如分布式存储、节点调度、负载均衡、节点通讯、容错处理和故障恢复都由,mapreduce,框架(比如,hadoop,)自动完成,设计的程序有很高的扩展性。,3. mapreduce,的编程模型原理:,开发人员用两个函数表达这个计算:,Map,和,Reduce,。,即:,(input) = map(k1,v1) -list(k2,v2) =combine- =reduce(k2,list(v2) -list(v2)(output),单词统计,单词统计,map(String key, String value): / key: document name / value: document contents for each word w in value: EmitIntermediate(w, “1);,reduce(String key, Iterator values): / key: a word / values: a list of counts int result = 0; for each v in values: result += ParseInt(v); Emit(AsString(result);,一共分为,map,(分解),shuffle,(洗牌),reduce,(归并,)三个阶段。,map,阶段,每个节点调用程序员编写的,map,函数,作用于每一个在此节点存放的键值对,,map,函数的输出同样是一些键值对,中间结果进入,shuffle,阶段,,shuffle,系统自动完成,程序员无须也无法控制,,shuffle,阶段会把所有中间结果里的键相同的所有键,-,值对通过网络传递给同一个目标节点。在最后的,reduce,阶段,每个节点会对所有键相同的键值对调用程序员编写的,reduce,函数,输出最终结果。,4. mapreduce,工作流程,Map,阶段:数据经过分片化成,M,个数据集,每个数据集由一个,maper,节点经过,map,函数处理成,key-value,对形式的数据集。,Shuffle,阶段:,map,输出的结果放在,maper,节点本地内存缓存区,缓存区先按照,key,进行分区(如果有,R,个,reducer,,,hash,(,key,),mod R,分成,R,个分区,初步划分)、分区内对,key,排序(排序后可附加,combiner,合并操作,减少写磁盘数据量),缓冲区快要溢出时,溢写文件,多个溢写文件合并,合并过程再次排序(排序后可附加,combiner,合并操作),最后形成一个已经分区的、已经排序(对,key,的排序)的文件。,Reduce,端会把属于本区的数据取(,fetch,)到内存,进行合并,合并过程再次排序,缓冲区快要溢出时,溢写文件,多个溢写文件合并,合并过程再次排序,合并为更大的排序文件,最终实现,reduce,输入数据是经过排序(对,key,的排序)的数据。有,r,个,reduce,就有,r,个结果。,其实不管在,map,端还是,reduce,端,,MapReduce,都是反复地执行排序,合并操作,所以说:,mapreduce,是大数据处理的灵魂,,排序是,mapreduce,的灵魂。,Reduce,阶段:最后一次合并的数据总是直接送到,Reduce,函数那里,,Reduce,函数会作用在排序输入的每一个,key-list,(,value,)上,最后的输出,key-value,对被直接写到,HDFS,上(分布式文件系统)。,5.mapreduce,的局限,一个,mapreduce,任务的瓶颈往往在中间的,shuffle,阶段。,启动开销大,简单任务也要尽力,map-shuffle-redcuce,三个阶段,无法实时响应。只能处理静态数据,对于变化快的数据无能为力。,mapreduce,的系统实现是谷歌的机密,据说,2007,年谷歌,mapreduce,版本比,2012,年,hadoop,快一个数量级。,Hadoop,的,mapreduce,框架在,2013,年升级,mapreduceV2,,,yarn,。,第二节,HDFS (hadoop,分布式文件系统,),1.,三个部分,:,客户端、,nameserver,(可理解为主控和文件索引,类似,linux,的,inode,)、,datanode,(存放实际数据),2,、如何写数据过程,2,、如何写数据过程,2,、如何写数据过程,3,、读取数据过程,4,、容错:第一部分:故障类型及其检测方法(,nodeserver,故障,和网络故障,和脏数据问题),4,、容错:第一部分:故障类型及其检测方法(,nodeserver,故障,和网络故障,和脏数据问题),5,、容错第二部分:读写容错,6,、容错第三部分:,dataNode,失效,7,、备份规则,8,、结束语,第三节,nosqlhbase,为什么要用,HBase ?,1.,数据集成长为,tb,和,pb,级,2.,横向扩展(增加节点)比扩容便宜,通过添加节点即可适应数据的持续增长,*,出于同样的原因,我们需要,Hadoop,但有时,Hadoop,是不够的,3.,需要支持随机读取和随机写入,4,传统数据库扩容很昂贵,而且数据很难分发(分布式计算),HBase,是什么,?,分布式,列式数据库,多维,高可用性,高性能,存储系统,目标:十亿行*数百万列*成千上万的版本,Pb,级数据分布在成千上万的服务器节点上,HBase,不是,不是传统的,SQL,数据库,没有连接,没有查询引擎,没有类型,没有,SQL,有事务和二级索引,但这些是插件,而不是,HBase,的核心部分,作为,RDBMS,的替代,必须了解,RDBMS,相反的模式,非标准的数据,表格很宽,数据分布稀疏,HBase,是如何工作的呢,?,两种类型的,HBase,节点,:,Master,管理节点和,RegionServer,分区节点,master,(只有一个管理节点),管理集群的操作,任务调度、负载平衡、数据分裂,它不负责读,/,写数据,通过,ZooKeeper and standbys,(备用服务器)实现高度可用性,RegionServer(,一个或多个,),存表格的节点:执行读取、缓冲写,与客户端直接点对点进行读,/,写,HBase,表,一个,HBase,集群是由任意数量的用户定义的表组成,表模式只定义列族,每个列族包含任意数量的列,每一列包含任意数量的版本,列只在插入时才产生,空值不占用空间,除了表名和列族名外,所有的数据都是字节存储,表中的行已被排序,顺序存储,列族里列也被排序,顺序存储,(,表、,行,、列族、,列,时间戳,),值,HBase,表数据结构,一张表里行的映射与其列族是一个有序映射关系,SortedMap(rowlist(ColumnFamilies),一个列族里的列名与版本值是一个有序映射关系,SortedMap(columnSortedMap(Versioned Values),一列里时间戳与值是一个有序映射关系,-SortedMap(Timestamp Value),HBase,表是一个三维有序的映射表,SortedMap(RowKey,,,List(SortedMap(Column,,,List(SortedMap (Timestamp, Value) ) ), rowKey (ASC) + columnLabel(ASC) + Version (DESC) - value,行键升序,列族:列名 时间戳,value,row=row0,,,column=anchor:bar,,,timestamp=1174184619081,row=row0,,,column=anchor:foo,,,timestamp=1174184620720,row=row0,,,column=anchor:foo,,,timestamp=1174184617161,row=row1,,,column=anchor:bar,,,timestamp=1174184619081,row=row1,,,column=anchor:foo,,,timestamp=1174184620721,row=row1,,,column=anchor:foo,,,timestamp=1174184617167,row=row2,,,column=anchor:bar,,,timestamp=1174184619081,row=row2,,,column=anchor:foo,,,timestamp=1174184620724,row=row2,,,column=anchor:foo,,,timestamp=1174184617167,特点,良好的压缩比。由于大多数数据库设计都有冗余,如此一来,压缩比非常高,把,40,多,M,的数据导入,infobright,,没想到数据文件只有,1M,多,列上的计算非常的快。,方便,MapReduce,和,Key-value,模型的融合,读取整行的数据较慢,但部分数据较快,HBase Regions,表由任意数量的,Regions,组成,regions,用,startKey,和,endKey,来标记,空表,: (Table, NULL, NULL),-,两个,region,表,: (Table, NULL, “MidKey”) and (Table, “MidKey”, NULL),一个,region,放在一个,RegionServer,节点上,多个,region,可能放在一个不同的节点上,每一个,region,由若干个,HDFS files and blocks,组成,每个,HDFS files and blocks,由,Hadoop,复制,保存多个副本。,HBase,架构,region,信息和位置信息存储在特殊目录表,-ROOT,表包含元数据表的位置,-.META,表包含,user regions,的模式(结构说明)和位置信息,-ROOT,的位置存储在,zookeeper,上,,-,这是“引导”区,zookeeper,节点用于协调,/,监控,引导集群选举一个节点作为,master,节点,检测,RegionServer,节点故障 的临时节点(故障信息传递给,master,处理),HBase,关键特性,数据的自动分区,数据的增长,region,是自动分裂,数据透明分布,节点间的负载自动均衡,表按照行排序,行按照列排序,这个设计可以高效读取和扫描,组合键(即列)可以排序也可以分组,有服务器端的过滤功能,因为集成,ZooKeeper,,所以没有单点故障,在线状态下(不终止服务的情况下)快速添加,/,移除的节点,移动数据的位置,不移动数据(指向另外两个备份的中的一个),在线状态下(不终止服务的情况下)支持创建,/,修改表,可以配置表和列族的参数,与,Hadoop MapReduce,关系密切:,-TableInputFormat / TableOutputForma,表输入,/,输出格式化,HFileOutputFormat,文件输出格式化(都是,mapreduce,计算),HBase,访问接口,Native Java Client/API, Get, Scan, Put, Delete classes, HTable for read/write, HBaseAdmin for admin stuff, Non-Java Clients,Thrift server (Ruby, C+, PHP, etc), REST server (stargate contrib), HBase Shell,Jruby shell supports put, delete, get, scan,Also supports administrative tasks, TableInputFormat/TableOutputFormat,HBase,插件, MapReduce / Cascading / Hive / Pig, Support for HBase as a data source or sink, Transactional HBase, Distributed transactions using OCC, Indexed HBase, Utilizes Transactional HBase for secondary indexing, IHbase, New contrib for in-memory secondary indexes, HBql, SQL syntax on top of HBase,今天,,HBase,已经是,Apache,顶级项目,有着众多的开发人员和兴旺的用户社区。它成为一个核心的基础架构部件,运行在世界上许多公司(如,StumbleUpon,、,Trend Micro,、,Facebook,、,Twitter,、,Salesforce,和,Adobe,)的大规模生产环境中。,HBase,网页搜索的例子,存储搜索到的网页数据,搜索表有一个,content,列族, Row is URL with Columns,行是,url,(统一资源定位符,网页的地址),列族是,content, content:data,列:,stores raw crawled data,(存储抓起到的具体网页数据), content:language,列:,stores http language header,(存储语言), content:type,列:,stores,http content-type header,(存储内容的类型),如果需要对原始数据的超链接和图片进行处理,增加列族,links and images,,列名,:, links:,:保存超链接, images:,: 保存图片,Row=url1,Rdbms,网页搜索的例子,传统的数据库里如何保存数据?,-,网页表表包含:,url,列,,data,列,,language,列,,type,列,-,链接表包含:,url,列,,link,列,-,图片表包含:,url,列,,image,列,表格的规模怎样?,-10M documents w/ avg10 links and 10 images,(平均每个网页有,10,个链接和,10,张图片, 一共有,10m,个 网页内容),-210M total rows versus 10M total rows,(,rdbms,需要,210m,条记录来存储这些内容 而,hbase,只要,10m,条记录来存储),- Index bloat with links/images,(,tableslinks/images,表呈现指数膨胀),说明:,10,个网页,平均每个网页有,10,个链接和,10,张图片,用关系型数据来存储:网页表有,10,条记录,链接表、图片表分别有,10*10=100,条记录,总行数,=10+100+100=210,行,而,hbase,只有,10,行。,“NoSQL”,是什么,?,与,sql,的关系不大,-SQL,只是一个查询语言标准,HBql,试图向,HBase,添加,SQL,语法,sql,操作面对数百万的数据无能为力,!,-hive,和,pig,在处理原始的,MapReduce,时很受欢迎。,nosql,在非,RDBMS,架构方面有以下改进:,放弃,rdbms,的关联关系,降低在,acid,事务性方面的要求,说明:,ACID,,指数据库事务正确执行的四个基本要素的缩写。包含:原子性,(Atomicity,)、一致性(,Consistency,)、隔离性(,Isolation,)、持久性(,Durability,)。一个支持事务(,Transaction,)的数据库系统,必需要具有这四种特性,否则在事务过程(,Transaction processing,)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求。,NoSQL,类型和项目, Column-oriented, HBase, Cassandra, Hypertable, Key/Value, BerkeleyDB, Tokyo, Memcache, Redis, SimpleDB, Document,CouchDB, MongoDB,其他方面的区别:,-,强一致性(数据备份同一时刻同一值),vs,最终一致性。,-Database,层面的复制,vs Filesystem,层面的复制。,演讲完毕,谢谢观看!,内容总结,大数据处理技术。有r个reduce,就有r个结果。5、容错第二部分:读写容错。2.横向扩展(增加节点)比扩容便宜,通过添加节点即可适应数据的持续增长。目标:十亿行*数百万列*成千上万的版本。一张表里行的映射与其列族是一个有序映射关系。region信息和位置信息存储在特殊目录表。-ROOT的位置存储在zookeeper上,-这是“引导”区。-链接表包含:url列,link列。- 图片表包含:url列,image列。-强一致性(数据备份同一时刻同一值) vs最终一致性。演讲完毕,谢谢观看,
展开阅读全文