1、,电子工业出版社云计算(第三版)配套课件,主编:刘鹏 教授,第 2 章,Google云计算原理与应用(四),本套PPT下载地址:http:/ PennySort国际计算机排序比赛冠军,两次夺得全国高校科技比赛最高奖,并三次夺得清华大学科技比赛最高奖。荣获“全军十大学习成才标兵”(排名第一)、南京“十大杰出青年”、江苏省“333高层次人才培养工程”中青年科学技术带头人、清华大学“学术新秀”等称号。,刘 鹏,目 录,2.1 Google文件系统GFS,2.2 分布式数据处理MapReduce,2.3 分布式锁服务Chubby,2.4 分布式结构化数据表Bigtable,2.5 分布式存储系统Meg
2、astore,2.6 大规模分布式系统的监控基础架构Dapper,2.7 海量数据的交互式分析工具Dremel,2.8 内存大数据分析系统PowerDrill,2.9 Google应用程序引擎,数据本身不会产生价值 只有经过分析才有可能产生价值,2.7 海量数据的交互式分析工具Dremel,2.7.1 产生背景,2.7.2 数据模型,2.7.3 嵌套式的列存储,2.7.4 查询语言与执行,2.7.5 性能分析,2.7.6 小结,7,产生背景,2.7 海量数据的交互式分析工具Dremel,MapReduce,优点:便携,缺点:效率低,Google的团队结合其自身的实际需求,借鉴搜索引擎和并行数据
3、库的一些技术,开发出了实时的交互式查询系统Dremel。,2.7 海量数据的交互式分析工具Dremel,Dremel支持的典型应用,8,2.7 海量数据的交互式分析工具Dremel,2.7.1 产生背景,2.7.2 数据模型,2.7.3 嵌套式的列存储,2.7.4 查询语言与执行,2.7.5 性能分析,2.7.6 小结,10,两方面的技术支撑,两方面的 技术支撑,一方面:统一的存储平台,另一方面:统一的数据存储格式,实现高效的数据存储,Dremel使用的底层数据存储平台是GFS,存储的数据才可以被不同的平台所使用,2.7 海量数据的交互式分析工具Dremel,11,2.7 海量数据的交互式分析
4、工具Dremel,面向记录和面向列的存储,Google的Dremel是第一个在嵌套数据模型基础上实现列存储的系统。,列存储更利于数据的压缩,处理时只需要使用涉及的列数据,好处一:,好处二:,12,2.7 海量数据的交互式分析工具Dremel,嵌套模型的形式化定义,原子类型(Atomic Type),原子类型允许的取值类型包括整型、浮点型、字符串等,记录类型(Record Type),记录类型则可以包含多个域,记录型数据包括三种类型:必须的(Required)、可重复的(Repeated)以及可选的(Optional),13,2.7 海量数据的交互式分析工具Dremel,嵌套结构的模式和实例,文
5、档的模式(Schema)定义,符合该模式的两条记录,利用该数据模型,可以使用Java语言,也可以使用C+语言来处理数据,甚至可以用Java编写的MapReduce程序直接处理C+语言产生的数据集。这种跨平台的优良特性正是Google所需要的。,2.7 海量数据的交互式分析工具Dremel,2.7.1 产生背景,2.7.2 数据模型,2.7.3 嵌套式的列存储,2.7.4 查询语言与执行,2.7.5 性能分析,2.7.6 小结,15,2.7 海量数据的交互式分析工具Dremel,数据结构的无损表示,带有重复深度和定义深度的r1与r2的列存储,重复深度主要关注的是可重复类型,而定义深度同时关注可重
6、复类型和可选类型(optional),每一列最终会被存储为块(Block)的集合,每个块包含重复深度和定义深度且包含字段值。,16,2.7 海量数据的交互式分析工具Dremel,高效的数据编码,计算重复和定义深度的基础算法,Dremel利用图中算法创建一个树状结构,树的节点为字段的writer,它的结构与模式中的字段层级匹配。,核心的想法是只在字段writer有自己的数据时执行更新,非绝对必要时不尝试往下传递父节点状态。,子节点writer继承父节点的深度值。,当任意值被添加时,子writer将深度值同步到父节点。,17,2.7 海量数据的交互式分析工具Dremel,数据重组,Dremel数据
7、重组方法的核心思想是为每个字段创建一个有限状态机(FSM),读取字段值和重复深度,然后顺序地将值添加到输出结果上。,18,2.7 海量数据的交互式分析工具Dremel,数据重组,r1的完整数据重组过程,19,2.7 海量数据的交互式分析工具Dremel,数据重组,如果具体的查询中不是涉及所有列,而是仅涉及很少的列的话,上述数据重组的过程会更加便利,下图中仅仅涉及DocId和Name.Language.Country的有限状态机。,20,2.7 海量数据的交互式分析工具Dremel,数据重组,核心的思想如下: 设置t为当前字段读取器的当前值f所返回的下一个重复深度。 在模式树中,找到它在深度 t
8、 的祖先,然后选择该祖先节点的第一个叶子字段 n。 由此得到一个FSM状态变化(f,t)-n。,有限状态机的构造算法,2.7 海量数据的交互式分析工具Dremel,2.7.1 产生背景,2.7.2 数据模型,2.7.3 嵌套式的列存储,2.7.4 查询语言与执行,2.7.5 性能分析,2.7.6 小结,22,2.7 海量数据的交互式分析工具Dremel,查询语言与执行,Dremel的SQL查询输入的是一个或多个嵌套结构的表以及相应的模式,而输出的结果是一个嵌套结构的表以及相应的模式。,嵌套子查询,记录内聚合,top-k,joins,自定义函数, ,23,2.7 海量数据的交互式分析工具Drem
9、el,Dremel利用多层级服务树(multi-level service tree)的概念来执行查询操作,根服务器 接受客户端发出的请求,读取相应的元数据,将请求转发至中间服务器。,中间服务器 负责查询中间结果的聚集,叶子服务器 负责执行数据来源,查询语言与执行,24,查询语言与执行,Dremel中的数据都是分布式存储的,因此每一层查询涉及的数据实际都被水平划分后存储在多个服务器上。,Dremel是一个多用户系统,因此同一时刻往往会有多个用户进行 查询。,查询分发器有一个很重要参数,它表示在返回结果之前一定要扫描百分之多少的tablet,2.7 海量数据的交互式分析工具Dremel,2.7
10、海量数据的交互式分析工具Dremel,2.7.1 产生背景,2.7.2 数据模型,2.7.3 嵌套式的列存储,2.7.4 查询语言与执行,2.7.5 性能分析,2.7.6 小结,26,2.7 海量数据的交互式分析工具Dremel,由于Dremel并不开源,我们只能通过Google论文中的分析大致了解其性能。Google的实验数据集规模如下图:,性能分析,27,2.7 海量数据的交互式分析工具Dremel,性能分析,MR从面向记录转换到列状存储后性能提升了一个数量级(从小时到分钟),而使用Dremel则又提升了一个数量级(从分钟到秒),2.7 海量数据的交互式分析工具Dremel,2.7.1 产
11、生背景,2.7.2 数据模型,2.7.3 嵌套式的列存储,2.7.4 查询语言与执行,2.7.5 性能分析,2.7.6 小结,29,2.7 海量数据的交互式分析工具Dremel,小结,Dremel和MapReduce并不是互相替代,而是相互补充的技术。在不同的应用场景下各有其用武之地。,Drill的设计目标就是复制一个开源的Dremel,但是从目前来看,该项目无论是进展还是影响力都达不到Hadoop的高度。,希望未来能出现一个真正有影响力的开源系统实现Dremel的主要功能并被广泛采用。,1,2,3,目 录,2.1 Google文件系统GFS,2.2 分布式数据处理MapReduce,2.3
12、分布式锁服务Chubby,2.4 分布式结构化数据表Bigtable,2.5 分布式存储系统Megastore,2.6 大规模分布式系统的监控基础架构Dapper,2.7 海量数据的交互式分析工具Dremel,2.8 内存大数据分析系统PowerDrill,2.9 Google应用程序引擎,2.8 内存大数据分析系统PowerDrill,2.8.1 产生背景与设计目标,2.8.2 基本数据结构,2.8.3 性能优化,2.8.4 性能分析与对比,32,2.8 内存大数据分析系统PowerDrill,产生背景与设计目标,两个假设结论,(1)绝大多数的查询是类似和一致的; (2)存储系统中的表只有一
13、小部分是经常被使用的,绝大部分的表使用频率不高。,考虑两方面的内容,(1)如何尽可能在查询中略去不需要的数据分块; (2)如何尽可能地减少数据在内存中的占用,占用越少意味着越多的数据可以被 加载进内存中处理。,PowerDrill整个系统实际分为三个部分,Web UI,一个抽象层,列式存储,2.8 内存大数据分析系统PowerDrill,2.8.1 产生背景与设计目标,2.8.2 基本数据结构,2.8.3 性能优化,2.8.4 性能分析与对比,34,2.8 内存大数据分析系统PowerDrill,下图阐述了PowerDrill采用的数据结构,简单来说就是一个双层数据字典结构。,块字典 记录的是
14、块id(chunk-id)和全局id的映射关系,块元素 记录的是块中存储数据的块id(注意不是全局id),基本数据结构,全局字典表,存储全局id和搜索关键字的对应关系,3个块的数据,2.8 内存大数据分析系统PowerDrill,2.8.1 产生背景与设计目标,2.8.2 基本数据结构,2.8.3 性能优化,2.8.4 性能分析与对比,36,2.8 内存大数据分析系统PowerDrill,数据分块,传统的索引对于PowerDrill的查询场景作用不是很大,因此一个很自然的考虑就是对数据进行分块,过滤查询中不需要的数据块来减少数据量,背景,常见的分区方法有范围分区、散列分区等。PowerDril
15、l实际采用的是一种组合范围分区方法。,方法,领域专家确定若干个划分的域,步骤,利用这几个域对数据进行划分,每个块的行数达到阈值时就停止划分,局限,PowerDrill采用的数据分块方法简单实用,但是由于域的确定需要领域专家,因此这种方法在实际使用中还有一定的局限性,37,2.8 内存大数据分析系统PowerDrill,数据编码的优化,统计一组数中不同值的个数有一个专有名词,称为“基数估计”,对于小规模的数据集,可以比较容易地统计出精确的基数。但是在大数据的环境下,精确的基数统计非常耗时,因此能保证一定精度的基数估计就可以满足实际的需求。,基数估计的方法很多,大多利用了散列函数的一些特性,Goo
16、gle内部使用的是一种称为Hyperloglog的基数估计方法的变种。,对于不同的块,如果我们可以确定块中不同值的数量,那么就可以根据这个数量值来选择可变的比特位来记录块id,38,2.8 内存大数据分析系统PowerDrill,全局字典优化,优化中主要利用 两个特性,全局字典是有序的,排序后的数据常常有共同的前缀,对每个全局字典块还会维护一个布隆过滤器(bloom filter)来快速确定某个值是否在字典中。,实际使用中为了进一步减少查询中需要加载到内存的全局字典,对全局字典又进行了分块,39,2.8 内存大数据分析系统PowerDrill,压缩算法,Google曾经对一些主流的压缩算法做过
17、简单的测试,如下图:,不管压缩算法的解压速度多快,总会消耗一定的物理资源与时间。对此PowerDrill采用了一种冷热数据分别对待的策略。,在冷热数据切换策略中,比较常用的是LRU算法。PowerDrill开发团队采用了启发式的缓存策略来代替原始的LRU算法。,40,2.8 内存大数据分析系统PowerDrill,行的重排,数据压缩的算法有很多,比较常用的一种称为游程编码(Run-Length Encoding,RLE),又称行程长度编码,其好处是压缩和解压缩都非常快。,数据重排的过程等效于著名的TSP(旅行商)问题,PowerDrill在实际生产环境中对数据分块时选定的那几个域按照字典序进行
18、排序来得到重排的结果,两个等长字符串之间的汉明距离是两个字符串对应位置的不同字符的个数,2.8 内存大数据分析系统PowerDrill,2.8.1 产生背景与设计目标,2.8.2 基本数据结构,2.8.3 性能优化,2.8.4 性能分析与对比,42,2.8 内存大数据分析系统PowerDrill,我们比较关注的两组数据,在查询过程中,平均92.41%的数据被略去 5.02%的数据会直接被缓存命中 一般仅须扫描2.66%的数据即可得到查询结果,超过70%的查询是不需要从磁盘访问任何数据的 这些查询的平均访问延迟大约是25秒 96.5%的查询需要访问的磁盘量不超过1GB,43,2.8 内存大数据分
19、析系统PowerDrill,性能分析与对比,访问数据量 (GB),延迟时间 (s),44,2.8 内存大数据分析系统PowerDrill,PowerDrill与Dremel的对比,目 录,2.1 Google文件系统GFS,2.2 分布式数据处理MapReduce,2.3 分布式锁服务Chubby,2.4 分布式结构化数据表Bigtable,2.5 分布式存储系统Megastore,2.6 大规模分布式系统的监控基础架构Dapper,2.7 海量数据的交互式分析工具Dremel,2.8 内存大数据分析系统PowerDrill,2.9 Google应用程序引擎,2.9 Google应用程序引擎,
20、2.9.1 Google App Engine简介,2.9.2 应用程序环境,2.9.3 Google App Engine服务,什么是 Google App Engine,Google App Engine是一个由Python应用服务器群、Bigtable数据库及GFS数据存储服务组成的平台,它能为开发者提供一体化的可自动升级的在线应用服务。,Google App Engine可以让开发人员在Google的基础架构上运行网络应用程序。,在Google App Engine中,用户可以使用域上的免费域名为应用程序提供服务,也可以使用Google企业应用套件从自己的域为它提供服务。,可以免费使用
21、Google App Engine。注册一个免费账户即可开发和发布应用程序,而且不需要承担任何费用和责任。,Google App Engine,49,2.9 Google应用程序引擎,Google App Engine的整体架构,前端和静态文件 负责将请求转发给应用服务器并进行负载均衡和静态文件的传输,应用服务器 能同时运行多个应用的运行时(Runtime),服务器群 提供了一些服务,主要有Memcache、Images、URLfetch、E-mail和Data Store等,应用管理节点 主要负责应用的启停和计费。,2.9 Google应用程序引擎,2.9.1 Google App Engi
22、ne简介,2.9.2 应用程序环境,2.9.3 Google App Engine服务,51,2.9 Google应用程序引擎,动态网络服务功能。能够完全支持常用的网络技术。 具有持久存储的空间。在这个空间里平台可以支持一些基本操作,如查询、分类和事务的操作。 具有自主平衡网络和系统的负载、自动进行扩展的功能。 可以对用户的身份进行验证,并且支持使用Google账户发送邮件。 有一个功能完整的本地开发环境,可以在自身的计算机上模拟Google App Engine环境。 支持在指定时间或定期触发事件的计划任务。,应用程序环境的特性,1,2,3,4,5,6,52,2.9 Google应用程序引擎
23、,沙盒的限制,2.9 Google应用程序引擎,2.9.1 Google App Engine简介,2.9.2 应用程序环境,2.9.3 Google App Engine服务,54,2.9 Google应用程序引擎,Google App Engine服务,图像操作API,邮件API,Memcache API,用户API,数据库API,1Google云计算技术包括哪些内容? 2当前主流分布式文件系统有哪些?各有什么优缺点? 3GFS采用了哪些容错措施来确保整个系统的可靠性? 4MapReduce与传统的分布式程序设计相比有何优点? 5Chubby的设计目标是什么?Paxos算法在Chubby中
24、起 什么作用? 6阐述Bigtable的数据模型和系统架构。 7分布式存储系统Megastore的核心技术是什么?,习题:,8大规模分布式系统的监控基础架构Dapper关键技术是什么? 9相比于行存储,列存储有哪些优点? 10为什么MapReduce不适合实时数据处理? 11简单阐述Dremel如何实现数据的无损表示。 12PowerDrill能实现高效的数据处理,在存储部分主要依赖哪两方面的技术? 13Google App Engine提供了哪些服务? 14Google App Engine的沙盒对开发人员有哪些限制?,习题:,百度排名首位的大数据资料和交流中心,百度排名首位的云计算资料和交
25、流中心,终生免费的智能硬件大数据托管平台,扫一扫,进入万物云,终生免费的环境大数据共享平台,扫一扫,进入环境云,云创大数据 给您一步到位的解决方案!,高校Hadoop教学科研,一揽子解决方案,云计算、大数据时代,社会亟需相关人才!而高校缺平台、缺人才、缺经验!怎么办?,建设一个Hadoop实验平台一套开源的Hadoop一体机和开发环境,详细的指导书籍和实验设计。培养一支云计算师资队伍来自云计算高手的系列培训,早在2010年就培训了全国第一批云计算师资力量。营造一个大数据科研环境为科研提供技术支持,与大数据应用相结合,让科研迈上新台阶。,刘鹏看未来,云计算头条,云创大数据,中国大数据,微信号: chinacloudnj,微信号: cstorbigdata,资源丰富、分析深入、更新及时的云计算知识共享平台。,微信号:lpoutlook,微信号: cStor_cn,国内大数据龙头企业。提供领先的云存储、云数据库、云视频、云传输产品和解决方案。,眼光决定成败,与刘鹏教授看未来。 刘鹏,清华博士,云计算作者。,分享大数据技术,剖析大数据案例,讨论大数据话题。,暂时仅有安卓版本,支持安卓和苹果,支持安卓和苹果,电子工业出版社云计算(第三版)配套课件,谢谢观看,主编:刘鹏 教授,第 2 章,