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