摘 要 :在当今泛“大数据”的时代,基础数据的体量越来越大,限于硬件读取数据的瓶颈限制,使用分布式的方式对海量数据进行处理基本是主流的解决方案。目前数据库架构和开发的新方向是采用轻型化、廉价的 PC 机集群来取代往日重型的一体化服务器,基于上述思想的 Hadoop 数据库架构在近年有着蓬勃的发展,并在互联网领域已经有了许多成功的应用案例。本文旨在通过介绍、分析和对比 Hadoop 架构和一体化并行数据库 TeraData 架构的主要模块,探讨在金融、证券数据领域引入类似 Hadoop 的轻型化并行数据库架构的可能性,并从模块层面上分析将已有业务应用的可移植性和移植工作的重点。
关键词 : Hadoop ;teradata ;并行数据库架构
1. 前言
海量数据的处理并不是刚刚出现的概念和技术,只是随着技术进步,特别是开源社区和互联网领域的工作积累,泛“大数据”领域的成熟工具越来越多,特别是近年热门的 Hadoop 数据架构,极大地降低了大型并行数据库构建的技术门槛和初始费用,同时似乎也不用再担心一体化系统昂贵的硬件和维护成本。有人说,这是一场骑士和长弓兵的战争,重装骑士终将下马。
在国内金融、证券领域,由于数据敏感性、重要性以及相关领域的技术开发模式限制和开发人员相对较少,目前国内的金融证券数据仓库领域还是以一体化系统为主,尚未大规模移植至轻型平台,本文希望通过分析在互联网领域已经成熟应用的 Hadoop 数据架构和主要模块,并与在金融证券领域主流应用的 TeraData 架构中的主要模块进行对比,剖析在架构层面移植一体化系统的可行性,并从业务应用层面分析移植的重难点工作。
2. 并行数据库架构介绍
当前,数据传输和通信的速度普遍远大于磁盘读写的速度,相对于网络高速传输的快速发展而言,现在在数据处理中的瓶颈取决于磁盘寻址和处理的速度,因此实际中体量较大的数据处理在技术层面更多地倾向于并行和分布式的处理方式,而近年来快速发展的 Hadoop分布式数据库架构为分布式、并行数据库的发展提供了极大的推动。
在开源社区的分布式处理框架 Hadoop 没有普及之前,海量数据的处理和计算一般交由专业的数据厂商提供整体解决方案,如天睿公司的 TeraData 数据仓库系统。国内的一些大型的金融、电信、制造业公司都是TeraData 的客户,上海证券交易所从 2002 年开始建设基于 TeraData 设备的数据仓库,至今已有 12 年的历史。
以下,分别对 Hadoop 和 TeraData 的底层架构做一些相关介绍,然后在数据存储、计算、容错、通信、物理布置等方面对这两种在开源和传统方面具有代表性的数据仓库架构进行一些对比。
2.1 Hadoop 架构介绍
Hadoop 分布式数据系统是一个开源的分布式系统基础架构,用户可以在不了解分布式底层细节的情况下,开发分布式程序,充分利用集群进行高速运算和存储。Hadoop 架构的底层核心组件主要由分布式文件系统 HDFS(Hadoop Distributed File System) 和MapReduce 计算框架组成。HDFS 有高容错性的特点,并且可以部署在廉价的硬件,例如 Linux PC 上;而且它提供高吞吐量来访问应用程序的数据,适合那些有着超大数据集的应用程序。MapReduce 框架可以把一个应用程序分解为许多并行计算指令,跨大量的计算节点运行非常巨大的数据集。使用该框架的一个典型例子就是在网络数据上运行的搜索算法。Hadoop 最初主要是谷歌公司用来进行网页索引有关的海量数据处理的,后来迅速发展成为分析大数据的重要框架,结合 HBase和 Hive 等基于 Hadoop 架构的数据库应用,成为大数据分析中的比较热门的技术方向。
Hadoop 的 核 心 底 层 组 件 有 两 个,HDFS 和MapReduce,其中 HDFS 为海量的数据提供了存储,而 MapReduce 为海量的数据提供了计算方法。
HDFS 采用主从式架构,多个 HDFS 集群形成基础的数据存储体系。一个 HDFS 集群是由一个命名节点(Namenode) 和若干数据节点 (Datanode) 组成的,命名节点是一个中心服务器,负责管理文件系统的名字空间 (Namespace) 以及客户端对文件的访问。集群中的数据节点一般是每个物理节点上运行一个,负责管理它所在节点上的数据存储。HDFS 暴露了文件系统的名字空间,用户能够以文件的形式在上面存储数据。从内部看,一个文件其实被分成一个或多个数据块,这些块被分布式地存储在一组数据节点上。命名节点作为一个总控节点,执行文件系统的名字空间操作,比如打开、关闭、重命名文件或目录。它也负责确定数据块到具体数据节点的映射。数据节点负责处理文件系统客户端的读写请求。在命名节点的统一调度下进行数据块的创建、删除和复制。
MapReduce 借鉴了函数式程序设计语言的设计思想,在函数式语言 ( 比如 Lisp 语言 ) 里,Map 表示对一个列表(List)中的每个元素做计算,Reduce 表示对一个列表中的每个元素做迭代计算,它们具体的计算是通过传入的函数来实现的,Map 和 Reduce 提供的是计算的框架。在 MapReduce 里,Map 阶段各分布式模块各自处理原始数据,到了 Reduce 阶段,数据是以 key 后面跟着若干个 value 来组织的,从而可以进行进一步的处理来得到整体结果。MapReduce 的软件实现是指定一个映射 (Map) 函数,把键值对 (Key/Value) 映射成新的键值对 (Key/Value),形成一系列中间结果形式的键值对 (Key/Value),然后把它们传给规约 (Reduce) 函数,把具有相同键 (Key) 的值 (Value)合并在一起。
类似于 HDFS 的主从架构,MapReduce 的集群中也有单一的主服务器(称为 JobTracker)以及若干个从服务器 (TaskTracker),每个物理个节点都有一个从服务器。JobTracker 是用户与 Hadoop 框架的交互点。用户把 Map/Reduce 作业提交给 JobTracker,JobTracker 将这些作业添加到一个等待队列,基于先到先服务的原则执行。JobTracker 负责将映射和规约任务分配给 TaskTracker,各个 TaskTracker 依据 JobTracker 的指令来执行任务,同时处理映射和规约步骤间的数据移动。
MapReduce 处理时 ( 如图 3),每个节点就近读取本地存储的数据处理(Map),将处理后的数据进行合并、排序后再分发至 Reduce 节点,因为它并没有将存储移动到某个位置以供处理,避免了大量数据的传输,而是将处理移动到存储,这通过根据集群中的节点数调节处理,因此可以支持高效的数据处理。无共享式架构的另一个好处是配合复制策略,集群可以具有良好的容错性,一部分节点不能工作对集群的正常工作不会造成影响。
2.2 TeraData 数据库系统结构介绍
目前上海证券交易所的数据仓库使用的是天睿(TeraData) 公司的并行数据库,它是一种按无共享资源(Shared-Nothing)结构体系进行组织的数据库,该结构由多个完全独立的处理节点构成,每个处理节点具有自己独立的处理器、独立的内存(主存储器)和独立的磁盘存储,多个处理节点在处理器级由高速通信网络连接,系统中的各个处理器使用自己的内存独立地处理自己的数据,相较于另外两种并行结构共享内存(SharedMemory)结构和共享磁盘(Shared-Disk)结构来说,它具有更好的扩展性。
TeraData 数据库是一个商用的关系型数据库管理系统 (Relational Database Management System), 它 将 整 个 大 规 模 并 行 处 理 (Massively Parallel Processing) 系统集成为一个单一的数据库系统呈现给用户。既然是关系型数据库,那么自然 TeraData中基础的数据形式就是关系表格 (Table),一般来说,TeraData 会将大型的关系表格打散,并把数据分布式地存储在不同的存储单元中,从而形成高效的存储和访问。
相对于 Hadoop 架构来说,Teradata 数据仓库配备性能较高、较可靠的大规模并行处理 (MPP) 平台,能够高速处理海量数据。它使得用户可以专注于业务,无需花费大量人力、精力到整个底层软件的开发、测试和运维上,当然其成本也是相对较高的。
整个 TeraData 数据库系统的核心模块是解析引擎(Parsing Engine, 简称 PE) 和模块存储器 (Access Module Processor, 简称 AMP)。其中 PE 负责解析、优化用户的 SQL 操作请求,然后将操作任务分配到各个 AMP 模块,并汇总操作结果返回给用户。AMP 则负责管理自己分配到的那一部分存储数据,并且按照 PE分配的操作任务对存储磁盘阵列进行物理读写,PE 与AMP 的通讯是通过 TeraData 数据库特有的消息传输层 (Massage Passing Layer, 简称 MPL) 进行,整个过程如图 4 所示。
TeraData 数据库的高效存储和访问是基于表格中每一条记录的索引实现的,这些索引包括主索引(Primary Index),次索引 (Secondary Index),主键(Primary Key) 等,通过特定的哈希算法 ( 如图 5 所示 ),每个表格中的数据被尽可能均衡地存放在各个 AMP上,其物理地址存储于 MPL 中间层,在大多数的情况下,每条记录只需要通过在 MPL 的哈希表查找其物理地址,访问 1 到 2 个 AMP 即可得到该记录的数据,因此 TeraData 也是一个相当高效、成熟、可以处理大数据的并行数据库。由此可见,TeraData 数据库通过 PE进行的计算过程与 MapReduce 的计算过程非常类似,只是在具体实现上有不同。
2.3 Hadoop 与 TeraData 数据库系统核心架构对比
由以上对两种不同系统架构的介绍,我们可以看出不管是商用的 TeraData 数据仓库系统还是开源的Hadoop 数据计算框架,其大体的设计思路都是类似的,都是使用分布式的存储和计算,将大规模的数据处理并行化,然后使用相对较少的计算结果进行归并综合,从而使快速处理成为可能。
在各种具体的实现上,两种系统还是存在较大的差异,如表 1 所示,从底层数据存储设备来讲,Hadoop使用的是较便宜的 Linux PC,使用文件存储的方式,将每个大文件拆分成若干个 64M 大小的数据“块”,然后分在集群的各 PC 硬盘中,而 TeraData 使用的是独立磁盘冗余阵列 (Redundant Array of Independent Disks, 简称 RAID),在硬件布置上即加入了容错机制。在存储发方法上,Hadoop 和 TeraData 系统都加入了冗余备份机制,以防止单点损坏造成整体数据不可用,Hadoop 的同一份文件通常有 3 个备份,分别在本节点,本机架的另外一个节点,和不同机架上的另一个节点;TeraData 采用的是 FallBack 机制,将同一数据表的不同模块分散于不同的 AMP 上,保证某个 AMP 损坏之后不影响数据完整,甚至有些情况下的多 AMP 故障也可以克服。
Hadoop 将数据地址和名字空间等信息全部存放在集群的名字节点 (NameNode) 上,而 TeraData 的消息处理层 (Message Processing Layer,简称 MPL)以哈希表的方式存储了数据表的地址信息。Hadoop各节点之间的通信使用 TCP/IP 网络协议进行,而TeraData 系统以其专利 BYNET 总线方式进行各节点间通信。
关系型数据库是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。TeraData 从一开始就支持传统的关系数据库和SQL 语言,并且还加入了不少 SQL 语言的扩展,使得SQL 查询和处理非常便利。TeraData 体系里也出现SQL-MapReduce 的技术可以兼容 Hadoop 底层架构。
Hadoop 架构并不天然支持关系型数据库,因为它是从谷歌公司的 GFS 系统发展而来,初期是作为一个面向文件的数据库系统而演进。为了支持关系型数据库,Hadoop 开源社区,已有 Hive 和 Pig 等查询处理引擎工具可以支持一些简单的 HiveQL( 类似 SQL) 查询。
总体来说,在大数据分析日益流行的背景下,开源社区里基于 Hadoop 的数据挖掘和分析工具的开发、测试和实际应用都较多,因此基于 Hadoop 的数据分析和挖掘工作进展相对快一些。而由于 TeraData 系统本身是封闭的,以前的分析挖掘较多需要依靠 SAS 统计工具来处理。目前有一些数据库和商业智能 (BI) 厂商,如TIBCO 公司的 Spotfire 或 Aster 公司在 Hadoop 架构上开发了一些商业的 BI 工具,新产品的价格较高,市场推广和实际效用有待进一步验证。
由于数据仓库系统的数据量非常庞大,负责数据写入、迁移和维护数据的 ETL 工具非常重要,TeraData采用 Perl 脚本实现了完整的 ETL 工具库,在数据维护工作方面比较完整和成熟,相较而言,由于 Hadoop 架构上的数据仓库选型较不固定,因此可以借鉴的工作不多,虽然在工具上现在比 10 年前有更多的脚本语言和开源代码库可以选择,但在后期开发上只能从头做起,这方面的工作量投入是免不了的。
3. 上交所数据仓库轻型化移植工作浅析
由以上对 Hadoop 和 TeraData 的一些介绍和比较可以看出,大型的并行数据仓库的架构和功能模块其实是比较相似的,概括来讲,都需要分布式的存储和计算,各模块间需要通信、汇总。以下,我们概述一下上交所目前的数据仓库逻辑架构,并分析一下使用 Hadoop 进行数据仓库移植的工作重难点。
3.1 上交所 TeraData 数据仓库架构简介
2002 年 ~2008 年, 上 海 证 券 交 易 所 联 合Teradata 公司通过分步实施数据仓库一期、二期、三期项目,整合了上证所交易系统与上市公司、会员、市场监管等其他业务系统的相关数据,而且把自 1990 年建所以来的所有历史数据都纳入数据仓库,为开展信息服务提供了基础技术平台。在数据仓库三期项目中,上证所还建成了国内首个主、从双备份数据仓库系统,使其单一业务系统发生故障时,全部业务部门仍可通过灾备系统访问多达 700 个应用,从而保证对外的数据服务与证券市场的稳定运行。目前上海证券交易所的数据仓库数据量已达到接近 30T 的规模,始于 1990 年的证券全市场数据已成为上交所的宝贵资产。
如图 6 所示,目前上海交易所数据仓库的主要架构大致可以分为源数据层、数据导入层、数据存储层、中间服务层、业务应用层和 IT 管理层。源数据层包括对各种源数据的定向传输和组织,源数据包括原始的交易数据,也有其它结构化和非结构化的数据,以及具有一定格式的表格文件等。然后通过数据导入层,包括 ETL 转换,数据质量检查,出错回溯和调度控制几个大的模块。数据存储层的核心工作基本上由 TeraData 数据库组完成,然后在中间服务层上进行分类处理和针对不同权限
用户的输出,业务用户层是针对不同需求开发的各个具体的应用和输出对象。此外整体数据仓库的管理备份、监控运行等工作是由 IT 管理层来完成。
3.2 上交所数据仓库移植工作重点
如果要将数据仓库移植到 Hadoop 架构上,那么需要将数据存储层这个核心部件整体换掉,用 Hadoop 架构的硬件取代现有的 TeraData 设备,其余部分可以重新开发,也可以尽可能复用原有的工作,只在接口上进行小的改动,具体可以根据实际的需求进行考虑。
3.2.1 数据存储和计算
Hadoop 架构上的数据仓库并没有天然地兼容结构化数据的查询访问,特别是对 SQL 没有原生态的支持,根据上海证券交易所有现有的关系型数据仓库的体系进行移植,那么有两种大的技术方案可供选择。一是将原有的结构化数据查询转为 Hadoop 架构里的新的MapReduce 方法,而不支持 SQL 语言,二是设计类似 Hive 的中间层可以支持 SQL 查询。鉴于上交所目前的数据体量、数百个基于 SQL 的应用和 12 年的数据积累,第一种移植方案的工作量和实现难度较大,后期所需的测试稳定时间也会较长。第二种技术方案目前在Hadoop 社区里已有类似的应用,如 Hive 数据仓库工具,如图 7 所视。十分适合数据仓库的统计分析。那么这样看来,比较简单的移植工作可以简化为对 Hive 的扩充,稍复杂一些的是自行开发 SQL-MapReduce 的架构,使上层应用的 SQL 语言保持不变,从而兼容目前已积累的大量业务层应用。
3.2.2 ETL
ETL 是 Extract-Transform-Load 的缩写,其中包括数据抽取、转换、装载以及清洗等过程。ETL 是构建数据仓库的重要一环,用户从数据源抽取出所需的数据,经过数据清洗,最终按照预先定义好的数据仓库模型,将数据加载到数据仓库中去。如果说数据仓库的模型设计是一座大厦的设计蓝图,数据是砖瓦的话,那么 ETL就是建设大厦的过程。在整个项目中最难部分是用户需求分析和模型设计,而 ETL 规则设计和实施则是工作量最大的,从国内外众多实践中得到的经验来看,此部分工作可能会占至整个项目的 60% ~ 80%。
数据仓库项目数据繁杂多样,数据的导入导出需要依赖自动化 ETL 机制来进行,即能够让许多的作业在作业的执行条件满足时就能够自动地执行这些作业。在数据仓储 (Data Warehousing) 环境的建置过程中 , ETL Automation 机制的好坏不但在建置初期会决定数据仓库的运维是否能够顺利进行 , 同时也会影响到系统在后续维护上的容易性。
ETL 体系随着新产品的不断推出和原有业务的调整是在不断变动的,对于此部分工作的复杂度和移植困难容易在技术开发初期被低估。ETL 体系不但包括自动化的存储和读取数据等,所有的运营和维护工作也都是以ETL 工作为基础的。目前的上交所 TeraData 系统的ETL 系统是基于 Perl 脚本语言进行开发的,大量的常规工作被自动化实现并进行了流程化,并且这些任务的调度和集成是参照它们在 TeraData 系统上占用 CPU、内存等资源的多少、耗时、重要程度、先后关系设计和构建出来的,具体调度的优化工作是基于 TeraData 底层系统的性能和大量实际经验的,基本上是 24 小时不间断运行。
因此,类似的,新的数据仓库架构如果能够保持相同的接口,很多的前期工作可以被复用,也省去了大量的开发和重新调优的过程。
3.2.3 前端应用
在上交所数据仓库体系里,前端应用是直接与用户打交道的,目前上交所有数百个前端应用在线上运行,它们负责处理各种业务需求和输出数据结果,数据仓库里的数据经过查询、调用和处理后传输给不同的用户。如果保留应用接口和 SQL 查询的方式,开发人员的大量重新开发工作可以被节省下来,而业务人员对于应用的适应和不稳定期也可以大大缩短。对于应用程序来说,由于新业务出现、原有业务变动和需求方面的不断调整,其本身也是在不断地更新的,因此这部分移植的工作可以考虑重写。另外,大数据时代的数据量进一步增长并且更加复杂化,数据展现的方式也越来越多,一些新的工具和图表也被开发了出来,原有应用在数据呈现方面的升级也可以在移植工作的过程中被引入。
4. 结论与展望
通过对基于开源 Hadoop 技术和基于 TeraData 商用设备的两种数据仓库体系进行介绍和对比,Hadoop架构与商用 TeraData 系统在处理大型数据的并行数据库在架构上大致是类似的,通过 Linux PC 集群分布式的数据处理和并行计算,可以跨越数据读写的瓶颈,在不显著提高硬件成本的前提下更快更好地处理更大和更复杂的数据。
结合上交所目前数据仓库的现状来看,在底层技术构架上,TeraData 数据仓库核心部分是可以相对容易地移植到 Hadoop 的 HDFS 文件系统及 MapReduce计算架构上的。在数据 ETL 层面上,大量的维护工作是交由脚本自动化运行的,此部分的工作十分重要且需要大量时间进行优化调整,因此保持接口不变尽量复用以前的工作较为妥当。在应用层面上,面向用户的应用林林总总,本身就是一个不断变化工程,可以根据最新的状况进行升级和重写,特别是针对目前大数据分析的各种新的可视化方法,也是值得投入适当工作量的。
相较于 TeraData 数据仓库服务维护的外包形式,以及随之而来的高费用,开源的 Hadoop 架构在硬件成本上的投入也小得多,并且可以实现知识产权和核心技术的自主化,和敏感性任务完全保密化,应该是未来大型金融企业的发展方向,如工商银行、阿里巴巴等企业已经在 Hadoop 架构上有了一定的工作积累,在证券行业引入自主研发的数据仓库系统,未来的工作通过借鉴和自身的情况进一步开展。
参考文献 :
[1] 从 Hadoop 框架与 MapReduce 模式中谈海量数据处理(含淘宝技术架构)http://blog.csdn.net/v_july_v/article/details/6704077 2011 年 8 月
[2] HDFS Architecture.http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html
[3] Hadoop 分布式文件系统:架构和设计要点 . http://www.blogjava.net/killme2008/archive/2008/06/05/206043.html 2008 年 6 月
[4] Teradata Company. TeraData Factory-Student Guide [R].No.9038, V14.00.2, 2012, 1.
作者简介
黄鹏 (1982- )男,籍贯湖北武汉,2010 年博士毕业于上海交通大学电子工程系,博士期间主要研究领域为基于机器学习方法的软件质量控制理论,目前在上海证券交易所信息中心从事数据仓库和大数据挖据、分析工作。
原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/53093.html