资源预览内容
第1页 / 共51页
第2页 / 共51页
第3页 / 共51页
第4页 / 共51页
第5页 / 共51页
第6页 / 共51页
第7页 / 共51页
第8页 / 共51页
第9页 / 共51页
第10页 / 共51页
亲,该文档总共51页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
大数据处理技术 科信办 刘伟 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是自动分裂 数据透明分布 节点间的负载自动均衡 表按照行排序,行按照列排序 这个设计可以高效读取和扫描
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号