智慧吴中大数据平台建设方案书v05.docx
《智慧吴中大数据平台建设方案书v05.docx》由会员分享,可在线阅读,更多相关《智慧吴中大数据平台建设方案书v05.docx(31页珍藏版)》请在冰豆网上搜索。
智慧吴中大数据平台建设方案书v05
1.大数据平台项目建设方案
1.1大数据平台建设目标与内容
建设目标
国家工信部软件服务业司司长陈伟为大数据概括出四方面特征,“首先在于体量大,是一个数据全集的概念,第二是类型多,包括结构化数据、半结构化数据、非结构化数据等多种类型,其中视频数据在目前占到了90%以上的总额;第三要求速度快,需要以秒级为目标进行实时动态处理。
最后在于价值密度,由于大量有用和可能没用的数据并存,遍地是金子,又遍地是沙子”,所以大数据的目的就在于从庞大的数据集合中找寻有价值的数据和知识,通过分析挖掘为各行业提供真正的智慧,“可以说21世纪是‘数据钻出石油’的时代。
”
我们要将各种系统的各种有用数据汇集起来,通过一个统一的平台管理与分析,这就是大数据平台的最大优势。
本期建设内容
大数据平台的发展是基于云计算平台不断升级并向数据库大数据应用靠拢的一个过程,可更好的适应关系型计算模式,拥有不同结构数据的综合管理、提供同时支持在线分析处理(OLAP)和在线事务处理(OLTP)能力以及多存储模式等,会在未来发挥不可估量的作用。
1.2大数据平台设计
大数据平台的设计原则
大数据平台是一种面向大数据应用的云计算数据存储与管理平台,该平台基于关系数据模型,访问方式也是简化版本的SQL语言规范,对SQL语言规范支持度达到80%以上,可管理的数据规模达到万亿条记录级,容量可达到PB级,同时该平台支持大数据的OLTP(联机事务处理)和OLAP(联机分析处理),,数据入库速度到达每秒千兆字节级,数据关联查询响应时间达到秒级,支持自动容错和动态扩展,在平安城市、智能交通、智能电网、互联网数据处理、移动信令处理等领域构建典型应用并进行大规模产业推广。
数据中心建设遵循以下原则:
1)体系架构
•分布式并行计算、多副本机制、没有单点的高可靠体系架构
•面向行业应用的软硬件一体化整合
2)系统功能
•结构化、半结构化、非结构化数据的管理和搜索
•主流格式机器数据的实时采集、解析、管理和搜索
•多存储模式
•高效的分布式SQL解析器
•支持事务机制
•实时及用户行为数据的高效管理和分析
•创新的多检索引擎机制,提供开放的二次开发接口
3)性能指标
•PB级的海量数据管理
•海量用户的高并发实时访问(千万级用户、万级并发)
•相对较低的资源消耗
•充分释放硬件的潜力(多核、大内存等)
4)管理功能
•大规模部署的自动化和运行状态监控
•对核心数据管理服务的高可用技术研究与实施
5)工程性功能
•高性能分布式环境的构建与部署
•负载均衡分布式环境的构建与部署
1.3大数据平台架构
1.3.1体系架构
如上图所示,大数据平台有多个层次,其中最主要的是数据处理层和数据存储层,数据存储层使用云存储技术,数据处理层包括多个模块,如下图所示:
图4大数据平台架构
大数据平台的结构可以分为以下几部分:
用户接口:
包括DDLJDBC,DMLAPI,DDLShell,DMLShell,数据导入API
数据接收模块:
单条多条记录入库。
索引模块:
索引生成。
SQL解析器:
对SQL语句解析为一个大数据平台的一个作业。
任务执行器:
处理一个大数据平台作业的子任务。
元数据管理器:
大数据平台的元数据是在mysql中进行管理的。
(1)用户接口
用户接口主要有四个:
JDBC,数据查询API,Shell,数据导入API。
JDBC主要执行数据的定义操作,即建立数据库、建表、建分区,对数据库、表和分区的删改等;数据查询API主要执行数据查询的SQL语句,暂不支持增删改;数据立方提供友好的shell交互界面,shell支持数据库、表的增删改以及数据查询的SQL语句;数据导入API的作用是表记录的单条多条插入,数据库中数据的导入使用sqoop工具。
(2)数据接收模块
该模块支持表的单条和多条记录的插入,通过使用数据导入API来实现数据的插入,当需要与数据库进行数据交互时,可以使用sqoop工具来进行相关操作,同时也可以使用HDFS的API来直接进行数据文件的导入导出。
(3)索引模块
数据在插入的同时与数据对应的索引也在同时建立,索引是一颗B树,数据插入到内存的同时,索引B树也在生成,当达到设置上限时,数据和索引会刷新到HDFS上成为文件。
(4)SQL解析器
SQL解析器、执行器完成大数据平台查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。
SQL解析器接收从数据查询API和SHELL传来的SQL语句,同时对SQL进行词法分析、语法分析、编译、优化以及生成查询作业,接着分析所要处理数据的所在位置,根据数据位置切分查询作业形成子任务,然后将子任务发送给数据所在节点的执行器。
(5)任务执行器
每个子节点的任务执行器接收到SQL解析器发来的子任务,随后执行这些子任务,执行完毕将结果传回SQL解析器。
(6)元数据管理
大数据平台将元数据存储在mysql数据库中。
大数据平台中的元数据包括,数据库的名字和属性,数据库中的表,表的名字,表的列和分区及其属性,表的属性,表的数据所在目录等等。
3.2.2数据立方与Hadoop的关系
(1)数据立方与HDFS的关系
大数据平台是建立在Hadoop上的分布式数据库。
大数据平台是一种可以存储、查询和分析在Hadoop中海量数据的机制。
大数据平台的底层存储是架设在HDFS之上,表的数据和索引均是以文件形式存储在HDFS上,所以当前大数据平台中表的数据还不支持删改。
与HDFS集群相对应,大数据平台主节点与NameNode部署在同一个物理节点上,子节点与DataNode部署在同一个物理节点上,在执行SQL查询语句时主节点的SQL解析器会向NameNode发送请求获取相关表的数据文件的元数据信息,SQL解析器生成子任务发给子节点的任务执行器,任务执行器通过数据文件的数据块ID从DataNode获取该数据块在本地磁盘的绝对路径,然后直接读取本地文件。
(2)大数据平台与MapReduce的关系
同时,因为大数据平台的数据存储在HDFS上,因此也允许MapReduce开发者的开发自定义的MapReduce程序来处理大数据平台中的数据。
1.3.2体系特点
1)高可靠分布式存储体系架构的构建
数据存储支持分布式架构,满足海量数据存储的高可靠、高可用、大吞吐率等要求,支持POSIX、SHELL流式数据访问、WEB等多种接口,支持简单一致性模型、多副本机制、回收站机制和主节点热备机制。
在硬件上支持符合工业标准的服务器,支持IBM、HP、DELL品牌的国际主流服务器整机产品;支持联想、浪潮、曙光、宝德、长城等品牌的国内主流服务器整机产品;在操作系统层面支持主流LINUX系统,例如:
CentOS、RedHat、Fedora 、Debian 、Ubuntu、SuSE等。
2)面向行业应用的资源整合
形成将面向金融、电信行业、公共事业等服务器端应用从传统数据库迁移到大数据平台的迁移移植能力,将原系统的数据库、中间件、应用平台以及业务逻辑单元整体迁移到大数据平台上,并针对其应用场景进行优化增强。
3)支持与传统数据库和NoSQL数据库等多种数据库的整合
大数据平台支持跨平台的应用,在自身基于云平台的同时又可以支持传统数据库和NoSQL数据库等多种数据库的嵌入,提供一系列的中间件和软件总线保证云平台与其他数据库的兼容性并提供数据流与指令流的交互接口,同时提供统一的用户界面和编程接口。
这种多系统的整合能够在一个统一平台上处理不同结构数据、支持不同类型应用、支持不同存储模式并提供丰富的对外接口,这种整合可以使存储在不同数据库系统中的不同类型数据的混合关联处理得以实现,可以让各种数据管理系统扬长避短,最大限度地发挥优势以取得最大效率。
1.3.3大数据处理技术
MapReduce计算架构把运行在大规模集群上的并行计算过程简单抽象为两个函数:
Map和Reduce,也就是分解与规约。
简单说,MapReduce就是“任务的分解与结果的汇总”。
程序将大数据分解为多个数据块由Map函数处理,Reduce把分解后多任务处理产生的中间结果汇总起来,得到最终结果。
适合MapReduce处理的任务特征为:
待处理的大规模数据集可以切分为多个小的数据集,并且每一个小数据集都可以完全并行地进行处理。
图1介绍了用MapReduce处理大数据集的过程。
一个MapReduce操作分为两个阶段:
Map阶段和Reduce阶段。
图1MapReduce处理大数据集的过程
在映射阶段,MapReduce并行计算架构将用户的输入数据切分为M个数据段,每个数据段对应1个Map任务。
每一个Map函数的输入是数据段中的键值对集合,Map函数是用户继承MapReduce并行计算架构而编写的,Map操作调用此函数,输出一组中间结果,即键值对集合。
接下来,按照中间结果集合的K2将中间结果集进行排序,生成一个新的集合,使得对应同一个K2的所有值的数据都聚集在一起。
然后,按照K2的范围将这些元组分割为R个片断,对应Reduce任务的数目。
在规约阶段,每一个Reduce操作的输入是一个片断,Reduce操作调用用户定义的Reduce函数,生成用户需要的键值对进行输出。
这种简洁的并行计算模型在系统层面解决了可用性、扩展性、容错性等问题,是非关系数据管理和分析技术的典型代表。
MapReduce是面向廉价计算机组成的大规模集群设计的,其非共享结构、松耦合性和较强的容错能力带来了较强的扩展能力,同时,MapReduce在工业界被广泛应用,Google、twitter、Facebook、Yahoo等厂商对其进行了深度的改进和扩展。
此外,MapReduce的存储模型能够存储任意格式的数据,Map和Reduce函数可以进行各种复杂的数据处理,这也使得程序员的负担加重,在对上层业务的开发效率上不如SQL简单。
在相同的硬件条件下,对于有具体条件的查询来说,并行数据库[2]的性能是远远超过MapReduce的,但是对于在大数据上的复杂统计业务来说,MapReduce在速度上会占有一定优势,MapReduce是为非结构化大数据的复杂处理而设计的,这些业务具有一次性处理的特点,此外由于采取了全数据扫描的模式以及对中间结果逐步汇总的策略,使其在拥有良好扩展能力和容错能力的同时也导致了较高的磁盘和网络I/O的负载以及较高的数据解析代价
1.4大数据平台功能
1.4.1系统功能
1)支持不同种类数据的存储
大数据平台支持非结构化、半结构化和结构化数据,即支持图形、图像、声音等多媒体信息的大文件和海量小数据文件存储,支持XML、结构化记录和Key/Value键值对的存储,同时支持复杂的结构化多维数据。
2)多索引引擎机制
大数据平台支持传统关系数据库的字段索引,同时也支持半结构化数据和非结构化数据的子字段索引、全文索引(英文单词索引和中文单汉字索引)、人工标记索引和中、英文混合索引等方式。
此外,配合数据库的格式化语言,可以对同一字段进行若干种不同的索引,以满足特殊检索的需求。
支持基于哈希的索引技术,研发适用于海量数据内容管理的存储与索引技术,实现大数据并行访问与查询。
3)支持在线分析处理(OLAP)和在线事务处理(OLTP)
在处理大数据时,大数据平台满足一个单表查询或多表关联操作的秒级响应。
支持一次返回上百万条以上结果集的海量数据分析查询,支持快速、一致和交互的数据存取,支持基于关系型数据库与多维数据库的混合方式数据分析,支持大量并发用户定期对数据的操作,支持每秒万次的事务操作,支持事务机制的原子性、一致性、孤立性和持续性。
4)支持多存储模式
大数据平台同时拥有列式存储和行式存储执行引擎,同时存储半结构化和结构化数据,综合两者的优势以达到更高的效率。
传统数据库使用的是行式存储,其读写方式是以一行记录为单位,从第一列开始,到最后一列结束。
行存储的写入是一次完成,对于结构化数据这种写入模式非常适合,但对于大数据,这种写入的效率比较低下,并会产生很多冗余数据,导致带宽占用严重。
列存储是一种区别于传统行存储的新型数据库读写模式,列存储完全改变了这种模式,列存储数据在写入之前会把一行记录拆分为单列保存,这种打散数据的保存模式能满足大数据的存储需求。
5)支持事务机制
单个逻辑工作单元执行的一系列操作,同步发生数据更新时,系统确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。
通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。
系统能够防止数据的不一致的同时,满足原子性、一致性、隔离性和持久性。
6)支持大数据挖掘
支持海量数据分析与挖掘云服务应用,以解决分布式分析与挖掘算法、多任务调度、结果展现、服务描述标准等技术问题。
提供高效率的、鲁棒的和负载平衡的并行数据预处理、统计分析以支持深度挖掘服务;支持实用、高效的并行数据挖掘算法的并行化策略和算法的扩展;支持数据处理任务调度优化,提出以节点状态、存储能力、活动周期、最近活动时间等为评估要素的负载评估模型和基于进化计算的任务调度算法。
1.3.3性能指标
1)相对较低的资源消耗
包括了在线分析处理业务时较低的CPU、内存、网络资源的消耗、以及在做大并发在线事务处理业务时较低的磁盘IO占用。
2)实时查询秒级响应
系统通过提供支持不同结构数据的索引使得查询能够达到秒级,同时又提供一个支持高并发、高缓存吞吐、高性能分布式的内存缓存系统,该系统将数据源中的数据临时存储于内存中,然后从内存中读取,从而大大提高读取速度。
1.4.2管理功能
1)大规模部署的自动化和运行状态监控
支持面向高性能分布式环境的云数据库系统自动化批量安装部署、自动化批量配置、集中监控管理。
自动化安装部署工具支持升级软件包、管理配置文件、系统服务、cron任务以及添加新的配置、修复错误。
系统运行状态监控采集服务器的各种性能指标数据,并发送到Server端,使网络管理员能实时查看服务器的状态;采集服务器的相关信息,并保存在服务器的日志文件中,供网络管理员进行定期的数据分析。
系统运行状态监控支持服务器进程信息的监测、日志文件监控和Web服务器监控。
2)对核心数据管理服务的高可用技术研究与实施
支持对核心数据管理服务的高可用保护,采用对核心服务网络心跳、串口心跳和磁盘心跳三层心跳管理机制,实现核心数据管理系统可靠、计算可靠、应用可靠三个层面的可靠性保护;使用分布式内存缓存系统来执行心跳信号交换,多个节点将各自的心跳信息写入分布式内存缓存,同时读取其他节点写入的信息,共享心跳数据。
心跳机制最大的好处就是可以防止集群发生脑裂时,集群中的节点会对共享存储中数据造成破坏。
1.4.3工程性功能
1)高性能分布式环境的构建与部署
面向集分布式结构提供优化支持,支持保证集群内部的全局一致的分布式文件系统视图,支持集群系统内部节点之间的高速通信机制,提供对集群内全部软硬件资源的管理,对外为用户提供统一的数据库管理视图,同时针对高性能计算应用场景,提供多种运行时优化方案。
2)负载均衡分布式环境的构建与部署
支持面向负载均衡分布式环境的数据库系统自动化批量安装部署、自动化批量配置、集中监控管理。
提供基于IP的负载均衡、基于虚拟机的负载均衡,以及基于传输会话的负载均衡三级层次化的自适应动态负载均衡机制。
3)对关键业务数据的实时备份与异地容灾
通过分布式内存缓存系统进行信息交互的技术,将节点的状态信息写入分布式内存缓存,并对所有节点在分布式内存缓存保存的信息进行检测,在节点故障和网络故障时,从正常工作节点中智能选举主控节点,避免高可用系统脑裂发生,保证高可用系统不间断正常运行的功能。
实现的服务器之间镜像块设备内容的存储复制解决技术。
数据备份实时、透明、同步、异步,备份技术的核心功能通过Linux的内核实现。
集群备份技术还可以实现增量备份,计划备份,远程容灾备份等。
2.关键挑战和应对举措
2.1关键技术挑战和应对举措
2.1.1高效分布式数据管理机制
随着移动互联网、物联网、云计算技术的蓬勃发展,非结构化、半结构化、结构化数据均成倍增长,非结构化数据的超大规模和增长,总数据量已经达到80~90%,比结构化数据增长快10倍到50倍。
因此,如何高效的进行分布式数据管理就成为了一个重中之重。
下表列出了分布式数据存储系统的技术挑战和应对措施。
技术挑战
应对措施
数据完整性
CRC校验和保证数据完整性,客户端写一个块之前会计算其对应的校验和。
校验和文件和数据块存储在datanode的相同目录下。
客户端读取数据块并读取其校验和文件,进行校验。
校验失败则尝试其他副本。
数据块副本之间的一致性
简单一致性模型即一个文件一旦创建、写入、关闭之后就不需要修改了
体系架构
采用主从结构的体系,一个集群是由一个名字节点管理元数据的命名空间,和多个数据节点来管理数据块的存储。
数据块存储
将一个文件分割成一个或多个的数据块,这些数据块存储在一组数据节点中。
元数据节点操作文件命名空间的文件或目录操作,如打开,关闭,重命名,等等。
它同时确定块与数据节点的映射。
数据节点来负责来自文件系统客户的读写请求。
数据副本放置位置
在数据块复制数为3的情况下,放置方式是将第一个放在本地数据节点,将第二个复制放到本地机架上的另外一个数据节点而将第三个复制放到不同机架上的数据节点。
这种方式减少了机架内的写流量,提高了写的性能。
机架失效的机会远小于机器实效的。
这种方式没有影响数据的可靠性和可用性的保证。
但是它减少了读操作的网络聚合带宽。
读操作时的副本选择
对一个读操作来说应该读取离它最近的数据块副本。
如果在读节点的同一个机架上就有这个复制,就直接读这个,如果物理集群是跨越多个数据中心,那么本地数据中心的复制是优先于远程的复制。
2.1.2高性能多表实时复杂关联查询
高性能的关联查询需要根据不同的模式采用不同关联算法,在基于代价的优化方式下,一般采用hashjoin算法,它是一种用于equi-join(而anti-join就是使用NOTIN时的join)的技术。
Hashjoin的主要资源消耗在于CPU(在内存中创建临时的hash表,并进行hash计算)。
在绝大多数情况下,hashjoin效率比其他join方式效率更高:
在Sort-MergeJoin(SMJ),两张表的数据都需要先做排序,然后做merge。
因此效率相对最差;Nested-LoopJoin(NL)效率比SMJ更高。
特别是当驱动表的数据量很大(集的势高)时。
这样可以并行扫描内表。
Hashjoin效率最高,因为只要对两张表扫描一次。
Hashjoin一般用于一张小表和一张大表进行join时。
Hashjoin的过程大致如下(在并行情况下):
(1) 一张小表被hash在内存中。
因为数据量小,所以这张小表的大多数数据已经驻入在内存中,剩下的少量数据被放置在临时表空间中;
(2)每读取一条大表的记录,和内存中小表的数据比较,如果符合先做join,而不直接输出,直到整张大表数据读取完毕。
如果内存足够,Join好的数据就保存在内存中。
否则,就保存在临时表空间中。
(3)当大表的所有数据都读取完毕,将临时表空间中的数据以其输出。
如果小表的数据量足够小,那所有数据就都在内存中了,可以避免对临时表空间的读写。
基于规则的优化方式下,经常采用Sort-MergeJoin(SMJ)连接和Nested-LoopJoin(NL)连接。
NestedLoopJoin(嵌套循环联结)对于主表的每条记录将其与从表的每条记录在JOIN条件的字段上直接比较并筛选出符合条件的元组。
被联结的表所处内层或外层的顺序对磁盘I/O开销有着非常重要的影响,而CPU开销相对来说影响较小。
NestedLoop一般在两个集合都很大的情况下效率就相当差了,而Sort-Merge在这种情况下就比它要高效不少,尤其是当两个集合的JOIN字段上都有聚集索引(clusteredindex)存在时,Sort-Merge性能将达到最好。
基本算法主要有两个步骤:
(1)按JOIN字段进行排序
(2)对两组已排序集合进行合并排序,从来源端各自取得数据列后加以比较(需要根据是否在JOIN字段有重复值做特殊的“分区”处理)
有两个因素左右Sort-Merge的开销:
JOIN字段是否已排序以及JOIN字段上的重复值有多少。
•最好情况下(两列都已排序且至少有一列没有重复值):
O(n+m)只需要对两个集合各扫描一遍。
•最差情况下(两列都未排序且两列上的所有值都相同):
O(n*logn+m*logm+n*m)两次排序以及一次全部元组间的笛卡尔乘积
2.1.3基于云计算平台的分布式SQL解析
SQL解析器、执行器完成数据查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。
SQL解析器接收从数据查询API和SHELL传来的SQL语句,同时对SQL进行词法分析、语法分析、编译、优化以及生成查询作业,接着分析所要处理数据的所在位置,根据数据位置切分查询作业形成子任务,然后将子任务发送给数据所在节点的执行器。
2.2关键工程化挑战和应对举措
2.2.1系统可维护性
维护管理是指为了保证维护质量、提高维护效率、控制维护成本而进行的维护过程管理,它要求对软件的每次“修改”均需经过申请、评估、批准、实施、验证等步骤。
事实上在全部维护活动中一半以上是完善性维护。
国外的统计数字表明,完善性维护占全部维护活动的50%~66%,改正性维护占17%~21%,适应性维护占18%~25%,其他维护活动只占4%左右。
应该注意,维护软件文档和维护软件的可执行代码是同样重要的。
针对目前大数据情况下系统的可维护性难的特点,大数据平台表现为可理解性和可测试性两个方面。
可理解性表现为外来读者理解软件的结构、功能、接口和内部处理过程的难易程度,大数据平台具有模块化(模块结构良好,高内聚,松耦合)、详细的设计文档、结构化设计、程序内部的文档和良好的高级程序设计语言等等,都对提高可理解性有重要贡献。
可测试性表现为软件结构、可用的测试工具和调试工具,以及以前设计的测试过程也都是非常重要的。
大数据平台具有便捷的测试工具,维护人员能够得到在开发阶段用过的测试方案,以便进行回归测试。
2.2.2系统可靠性
●分布式存储系统主节点宕机
分布式存储系统主节点是一个单一故障点,在主节点宕机时,分布式存储系统恢复耗时较长,这对于24x7uptime的应用来说是难以接受的,在这样的情况下,采取Facebook的Avatar机制,可以达到秒级的迁移(Failover)时间。
Avatar的系统架构如图所示,它包括一个PrimaryNameNode、一个StandbyNameNode、一个NFS服务器、多个DataNodes以及多个Clients。
其中,PrimaryNameNode是对外提供服务的NameNode;StandbyNameNode也运行一个NameNode进程,与PrimaryNameNode的内存元数据保持同步,当PrimaryNameNode无法对外服务时,它将接替PrimaryNameNode对外服务;PrimaryNameNode和StandbyNameNode通过NFS服务器进行元数据同步,PrimaryNameNode向NFS共享目录写入日志记录,StandbyNameNode定期读入NFS共享目录中的日志