DataCube
数据立方大数据库
背景
近年来,随着计算机技术的发展,各领域数据的增长越来越快。这些数据来自方方面面,从搜集天气情况的感测器,接入社交媒体网站的指令,数码图片,在线的视频资料,到网络购物的交易记录,手机的全球定位系统信号等等。随着数据规模的急剧膨胀,各行业累积的数据量越来越巨大,数据类型也越来越多、越来越复杂,已经超越了传统数据管理系统、处理模式的能力范围,传统的串行数据库系统已经难以适应这种飞速增长的应用需求。在这种需求的驱动下,云计算中的MapReduce[1]技术、并行数据库技术以及云计算与数据库相结合的技术应运而生。
我们在大数据的背景下,对大数据处理技术进行了探讨,将其分为三类:MapReduce
技术、并行数据库技术和云计算与数据库相结合的技术。通过研究这些技术的架构、适用环境,提出了一种全新的云计算数据库--数据立方。
新一代EB级云计算数据库--数据立方大数据库DataCube
通过对MapReduce、并行数据库和两者的混合技术研究,南京云创存储科技有限公司推出了实施云计算数据库--数据立方,该系统通过引入索引模块、并行执行架构以及读取本地磁盘的执行方式,使查询达到了实时完成、简单易用、高可靠安全的效能,使EB级的数据能够秒级处理,极大地提高了用户执行查询操作后的使用效率,不仅在查询和检索这部分数据的时候具有非常高的性能优势,数据立方还可以支持数据仓库存储、数据深度挖掘和商业智能分析等业务。
数据立方的体系架构
图4 数据立方架构
数据立方(DataCube)的结构分为用户接口、索引、SQL解析器、作业生成器、元数据管理、并行计算架构、分布式文件系统等部分,如图4所示。用户接口主要有两个:JDBC 和Shell。JDBC主要执行
数据的定义操作,即建立数据库、建表、建分区,对数据库、表和分区的删改等,同时可执行数据查询的SQL语句,暂不支持单条记录的增删改;数据立方提供友好的shell交互界面,shell支持数据库、表的增删改以及数据查询的SQL语句。数据在入库的同时与数据对应的索引也在同时建立,索引是一颗B树,数据插入到内存的同时,索引B树也在生成,当达到设置上限时,数据和索引会刷新到分布式文件系统上成为文件。数据立方的元数据存储在数据库中。其中包括,数据库的名字和属性,数据库中的表,表的名字,表的列和分区及其属性,表的属性,表的数据所在目录等等。SQL解析器接收从JDBC 和SHELL传来的SQL查询语句,同时对SQL进行词法分析、语法分析、编译、优化。作业生成器根据SQL语法树生成查询作业,分析所要处理的数据表对应的索引文件的所在存储子节点位置,并将作业发送给并行计算架构。并行计算架构接收到作业生成器生成的作业,根据索引文件的位置切分查询作业形成子任务,然后将子任务发送给数据所在的存储子节点,每个节点执行这些子任务查询索引得到结果记录所在的数据文件名与偏移量,并以广播的方式发送查询子任务到数据文件所在的节点,在执行完毕后将结果返回。数据立方可以使用HDFS和cStor[19]作为底层存储系统,cStor是一个主从结构的分布式文件系统,不仅具有HDFS的高吞吐率、高读写性能等特性,还支持HDFS所不具备的对文件修改等功能,并且支持POXIS接口。
分布式并行计算架构(DPCA)
图5 DPCA架构
数据立方的分布式并行架构(DPCA)是典型的主从结构,主Master与从Master分别部署在HDFS的主从NameNode物理节点上,而Slave部署在DataNode物理节点上,主从Master使用Zookeeper同步,并共享系统日志,Master与Slave之间用心跳信息保持信息交换。
云数据库服务
图6 并行计算架构上作业执行过程图7 并行计算架构的三中分发方式
相对于MapReduce架构,DPCA具有实时性、计算的数据本地性以及数据平衡性。MapReduce架构的job提交过程较为复杂,客户端将job提交到JobTracker有较长的延迟,JobTracker将job处理为MapReduce task后,通过TaskTracker的心跳信息将task任务返回给TaskTracker,此过程中也存在延迟。MapReduce架构虽然也遵循数据本地性,但仍会有很大比例的数据处理不是本地的,相对于MapReduce架构,DPCA的job提交是实时性的,在提交job之前所需程序jar包已经分发到所有计算节点,在job提交之后,master 在初始化处理之后即将task直接分发到所有slave节点上,如图6所示,在job提交后,master根据数据文件所在位置分配task,这样在每个计算节点上要处理的HDFS上的数据块就在本地,这样避免了数据的移动,极大地减少了网络IO负载,缩短了计算时间,每个计
算节点会根据Task中SQL解析器生成的执行计划对Task执行的结果进行分发,分发的方式有三种:分
发所有中间数据到所有计算节点,分发所有中间数据到部分节点,根据数据所在位置分发,如图7所示。并行计算架构能够周期性地对HDFS上的数据表进行维护,保持数据表在所有的DataNode节点上所存储的数据量的平衡,减少因数据负载的不平衡而导致的计算负载的不平衡。
图7 小表与大表的join实例
举一个典型的小表与大表join连接的实例,如图7所示,Master解析Job中的执行计划,判断小表的位置后,将Task0发送给了Slave0,指令Slave0发送小表到所有节点,而其他节点接收到的子任务是等待接受小表的数据,接收到数据后将小表与大表连接并将数据返回给Master,当所有数据返回完成则这个job完成。
分布式索引
MapReduce是对每个查询都是直接从分布式文件系统中读入原始数据文件,I/O代价远高于数据库,相对于MapReduce架构以及在其之上的SQL解析器Hive,数据立方引入了一种高效的分布式索引机制,不同于并行数据库的shared-nothing和shared-disk架构,数据立方的数据文件与索引文件都存放在分布式文件系统之上。
图8 B树索引
数据在入库的同时B树索引在内存中同步生成,B树中的叶子节点存储的是数据文件路径与记录在文件中的偏移量,如图所示,在B树中的叶子节点达到设置上限后,索引将被序列化到分布式文件系统之上,在根据条件进行单表查询的时,job被提交到并行计算框架,master节点首先分析该表的索引文件根据索引文件所在的节点将task发送到相应的节点,每个节点在查询本地的索引文件之后将符合条件
的数据文件路径+偏移量打包成task根据数据文件位置进行再次分发,在数据文件中的记录查询出来之后将结果返回,如图8所示。
测试与评估
测试环境
测试环境搭建在两个机架的12台物理机组成的集上。每台物理机使用Ubuntu9.04 server系统,JDK版本为1.6.0.18,使用的Hadoop版本为2.0.0,将HDFS作为分布式存储环境。软硬件配置如表1、表2所示。
表1 硬件配置
表2 软件配置

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。