大数据处理技术科信办刘伟2014年4月第一节Mapreduce编程模型第二节hadoopHDFS原理第三节nosql之hbase第一节Mapreduce编程模型1.技术背景2.mapreduce的概念3.mapreduce的编程模型原理4mapreduce工作流程5.mapreduce的局限1.技术背景:分布式并行计算是大数据(pb)处理的有效方法,编写正确高效的大规模并行分布式程序是计算机工程领域的难题。并行计算的模型、计算任务分发、计算机结果合并、计算节点的通讯、计算节点的负载均衡、计算机节点容错处理、节点文件的管理等方面都要考虑。为了解决上述复杂的问题,谷歌设计一个新的抽象模型,使用这个抽象模型,普通程序员只要表述他们想要执行的简单运算即可,而不必关心并行计算、容错、数据分布、负载均衡等复杂的细节,这些问题都被封装了,交个了后台程序来处理。这个模型就是mapreduce。谷歌2004年公布的mapreduce编程模型,在工业界、学术界产生巨大影响,以至于谈大数据必谈mapreduce。工业界试图做的事情就是要实现一个能够媲美或者比Googlemapreduce更好的系统,多年的努力下来,Hadoop(开源)脱颖而出,成为外界实现MapReduce计算模型事实上的标准,围绕着Hadoop,已经形成了一个庞大的生态系统。2.mapreduce的概念:MapReduce是一个编程模型,一个处理和生成超大数据集的算法模型的相关实现。简单的一句话解释MapReduce就是“任务的分解与结果的汇总”。mapreduce成功的最大因素是它简单的编程模型。程序员只要按照这个框架的要求,设计map和reduce函数,剩下的工作,如分布式存储、节点调度、负载均衡、节点通讯、容错处理和故障恢复都由mapreduce框架(比如hadoop)自动完成,设计的程序有很高的扩展性。3.mapreduce的编程模型原理:开发人员用两个函数表达这个计算:Map和Reduce。即:(input)k1,v1====map(k1,v1)-list(k2,v2)===combine---k2,v2[List]=reduce(k2,list(v2))-list(v2)(output)单词统计单词统计map(Stringkey,Stringvalue)://key:documentname//value:documentcontentsforeachwordwinvalue:EmitIntermediate(w,“1″);reduce(Stringkey,Iteratorvalues)://key:aword//values:alistofcountsintresult=0;foreachvinvalues: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)modR分成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、结束语第三节nosql——hbase为什么要用HBase?1.数据集成长为tb和pb级2.横向扩展(增加节点)比扩容便宜,通过添加节点即可适应数据的持续增长*出于同样的原因,我们需要Hadoop,但有时Hadoop是不够的3.需要支持随机读取和随机写入4,传统数据库扩容很昂贵,而且数据很难分发(分布式计算)HBase是什么?•分布式•列式数据库•多维•高可用性•高性能•存储系统目标:十亿行*数百万列*成千上万的版本Pb级数据分布在成千上万的服务器节点上HBase不是…不是传统的SQL数据库——没有连接,没有查询引擎,没有类型,没有SQL——有事务和二级索引,但这些是插件,而不是HBase的核心部分•作为RDBMS的替代•必须了解RDBMS相反的模式——非标准的数据——表格很宽,数据分布稀疏HBase是如何工作的呢?两种类型的HBase节点:Master管理节点和RegionServer分区节点•master(只有一个管理节点)——管理集群的操作•任务调度、负载平衡、数据分裂——它不负责读/写数据——通过ZooKeeperandstandbys(备用服务器)实现高度可用性•RegionServer(一个或多个)——存表格的节点:执行读取、缓冲写——与客户端直接点对点进行读/写HBase表•一个HBase集群是由任意数量的用户定义的表组成•表模式只定义列族——每个列族包含任意数量的列——每一列包含任意数量的版本——列只在插入时才产生,空值不占用空间——除了表名和列族名外,所有的数据都是字节存储——表中的行已被排序,顺序存储——列族里列也被排序,顺序存储(表、行、列族、列,时间戳)值HBase表数据结构•一张表里行的映射与其列族是一个有序映射关系——SortedMap(rowlist(ColumnFamilies))•一个列族里的列名与版本值是一个有序映射关系——SortedMap(columnSortedMap(VersionedValues))•一列里时间戳与值是一个有序映射关系------SortedMap(TimestampValue)HBase表是一个三维有序的映射表SortedMap(RowKey,List(SortedMap(Column,List(SortedMap(Timestamp,Value)))))–rowKey(ASC)+columnLabel(ASC)+Version(DESC)--value行键升序列族:列名时间戳valuerow=row0,column=anchor:bar,timestamp=1174184619081……row=row0,column=anchor:foo,timestamp=1174184620720row=row0,column=anchor:foo,timestamp=1174184617161row=row1,column=anchor:bar,timestamp=1174184619081row=row1,column=anchor:foo,timestamp=1174184620721row=row1,column=anchor:foo,timestamp=1174184617167row=row2,column=anchor:bar,timestamp=1174184619081row=row2,column=anchor:foo,timestamp=1174184620724row=row2,column=anchor:foo,timestamp=1174184617167特点良好的压缩比。由于大多数数据库设计都有冗余,如此一来,压缩比非常高,把40多M的数据导入infobright,没想到数据文件只有1M多列上的计算非常的快。方便MapReduce和Key-value模型的融合读取整行的数据较慢,但部分数据较快HBaseRegions•表由任意数量的Regions组成•regions用startKey和endKey来标记——空表:(Table,NULL,NULL)------两个region表:(Table,NULL,“MidKey”)and(Table,“MidKey”,NULL)•一个region放在一个RegionServer节点上•多个region,可能放在一个不同的节点上,每一个region由若干个HDFSfilesandblocks组成,每个HDFSfilesandblocks由Hadoop复制,保存多个副本。HBase架构•region信息和位置信息存储在特殊目录表----ROOT表包含元数据表的位置----.META表包含userregions的模式(结构说明)和位置信息•-ROOT的位置存储在zookeeper上,-这是“引导”区•zookeeper节点用于协调/监控——引导集群选举一个节点作为master节点——检测RegionServer节点故障的临时节点(故障信息传递给master处理)HBase关键特性•数据的自动分区——数据的增长,region是自动分裂•数据透明分布——节点间的负载自动均衡•表按照行排序,行按照列排序——这个设计可以高效读取和扫描——组合键(即列)可以排序也可以分组•有服务器端的过滤功能•因为集成ZooKeeper,所以没有单点故障•在线状态下(不终止服务的情况下)快速添加/移除的节点——移动数据的位置,不移动数据(指向另外两个备份的中的一个)•在线状态下(不终止服务的情况下)支持创建/修改表——可以配置表和列族的参数•与HadoopMapReduce关系密切:-TableInputFormat/TableOutputForma表输入/输出格式化HFileOutputFormat文件输出格式化(都是mapreduce计算)HBase访问接口NativeJavaClient/API–Get,Scan,Put,Deleteclasses–HTableforre