大数据 数据仓库架构
一、大数据 数据仓库架构
大数据一直是企业在现代信息时代面临的一项重要挑战和机遇。随着数据量的爆炸性增长,如何有效地管理、存储和分析这些海量数据成为了企业发展的关键。而数据仓库架构作为大数据管理的核心,扮演着至关重要的角色。
数据仓库架构的基本概念
数据仓库架构是指一套用于组织、存储和管理企业数据的结构化系统,旨在支持企业决策和业务分析需求。在构建数据仓库架构时,需要考虑数据的来源、存储、处理和分发,以便为用户提供准确、一致、可靠的数据。
数据仓库架构通常包括数据提取、数据转换和数据加载(ETL)过程,用于从不同的数据源中提取数据、清洗和转换数据,最终加载到数据仓库中供分析使用。此外,数据仓库架构还涉及数据存储、数据管理、数据查询和报表生成等方面的设计和实现。
大数据对数据仓库架构的影响
随着大数据技术的发展和普及,传统的数据仓库架构面临着诸多挑战和变革。大数据的特点在于数据量大、数据类型多样、数据速度快,传统的数据仓库架构往往无法满足大数据处理和分析的需求。
因此,企业需要重新思考数据仓库架构的设计和优化,以适应大数据时代的需求。一方面,需要引入新的大数据技术和工具,如Hadoop、Spark、Hive等,来支持大数据的存储和处理。另一方面,还需要优化数据仓库架构,提升数据处理和查询的性能和效率。
构建适应大数据的数据仓库架构
为了构建适应大数据的数据仓库架构,企业可以采取以下几点策略:
- 采用分布式架构:引入分布式计算和存储技术,如Hadoop和Spark,以支持海量数据的存储和处理。
- 数据湖与数据仓库结合:结合数据湖和数据仓库的优势,实现数据的存储、管理和分析。
- 数据治理和安全:加强数据治理和安全控制,确保数据的质量和安全性。
- 自动化和智能化:引入自动化和智能化技术,提升数据处理和分析的效率。
通过以上策略的实施,企业能够构建一个灵活、高效且安全的数据仓库架构,满足大数据处理和分析的需求,并为业务决策提供可靠的数据支持。
结语
数据仓库架构在大数据时代扮演着至关重要的角色,它不仅是数据管理和分析的基石,也是企业决策和发展的关键。随着大数据技术的不断发展和创新,数据仓库架构将不断演进和完善,以适应企业在信息化时代的需求。
二、大数据仓库架构
大数据仓库架构:理解其重要性及设计策略
随着大数据技术的不断发展,大数据仓库架构已成为企业数据管理的重要组成部分。它负责存储、处理和提供企业所需的大数据,为决策支持、业务分析等应用提供基础。本文将探讨大数据仓库架构的重要性,并介绍一些设计策略。 一、大数据仓库架构概述 大数据仓库架构是指用于存储、处理和管理大数据的系统架构。它通常包括数据存储、数据处理、数据检索和数据安全等模块。该架构需要处理的数据量巨大,且对数据的处理速度要求较高,因此需要采用一些特定的技术和工具来应对挑战。 二、大数据仓库架构的重要性 1. 数据集中管理:通过大数据仓库架构,企业可以将各种类型和来源的数据集中管理,方便数据分析和业务应用的开展。 2. 提高数据处理效率:大数据仓库架构能够快速处理大量数据,提高数据处理效率,为企业决策提供及时准确的数据支持。 3. 降低数据安全风险:大数据仓库架构通常采用安全可靠的存储技术,确保数据的安全性和可靠性,降低企业数据泄露的风险。 三、大数据仓库架构的设计策略 1. 合理选择存储技术:根据数据量和数据类型,选择适合的存储技术,如分布式存储、对象存储等,以提高数据存储和处理效率。 2. 优化数据处理流程:采用适当的数据处理技术和工具,如Hadoop、Spark等,优化数据处理流程,提高数据处理速度和准确性。 3. 建立数据检索机制:建立完善的数据检索机制,方便用户快速获取所需数据,提高数据利用率。 4. 强化数据安全保障:采取有效的数据安全措施,如加密、备份等,确保数据的安全性和可靠性。 综上所述,大数据仓库架构是企业数据管理的重要组成部分,它能够集中管理数据、提高数据处理效率、降低数据安全风险。在设计和实施大数据仓库架构时,企业应合理选择存储技术、优化数据处理流程、建立数据检索机制和强化数据安全保障,以满足企业数据管理的需求。三、数据仓库权限架构思路?
1、数据仓库所处环节
在一个成体系、结构化的数据应用场景下,数据和处理有四个层次: 操作层、数据仓库层、部门/数据集市层、个体层。
操作层
操作层是指为具体业务提供实时响应的各个业务系统,比如常见的订单系统、ERP、用户中心等等具体业务系统,这些系统中的数据一般都是存入关系型数据库。它们是数据的来源。
数据仓库
数据仓库收集操作层各个业务系统中的数据,进行统一格式、统一计量单位,规整有序地组织在一起,为数据分析、数据挖掘等需求提供数据支持。
数据集市
部门/数据集市层是各个部门根据自己的数据分析需求,从数据仓库中抽取自己部门所关心的数据报表。
个体层
个体层中的不同角色个体有读取不同数据的权限。
2、数据仓库概念
数据仓库是一个面向主题的、集成的、非易失的、随时间变化的,用来支持管理人员决策的数据集合,数据仓库中包含了粒度化的企业数据。
面向主题的
数据仓库不同于传统的操作型系统,传统的操作型系统中的数据是围绕功能进行组织的,而数据仓库是针对于某一个主题进行分析数据用的,比如针对于销售主题、针对于客户主题等等。
集成的
不同产品或者系统中的数据是分散在各自系统中的,并且格式不一致、计量单位不一致。而数据仓库必须将多个分散的数据统一为一致的、无歧义的数据格式后,并解决了命名冲突、计量单位不一致等问题,然后将数据整合在一起,才能称这个数据仓库是集成的。
随时间变化的
数据仓库要体现出数据随时间变化的情况,并且可以反映在过去某一个时间点上数据是什么样子的,也就是随时间变化的含义。而传统的操作型系统,只能保存当前数据,体现当前的情况。
非易失的
非易失是指:数据一旦进入数据仓库,就不能再被改变了,当在操作型系统中把数据改变后,再进入数据仓库就会产生新的记录。这样数据仓库就保留了数据变化的轨迹。
3、一般架构
1、 STAGE层
业务系统的数据接入到数据仓库时,首先将业务数据仓储到STAGE层中,Stage层作为一个临时缓冲区,并屏蔽对业务系统的干扰。STAGE层中的表结构和数据定义一般与业务系统保持一致。Stage中的数据可以每次全量接入也可以每次增量接入,一般都有会数据老化的机制,不用长期保存。Stage的数据不会对外部开放。
2、 ODS层
ODS才是数据仓库真正意义上的基础数据,数据是被清洗过的,ODS层的数据是定义统一的、可以体现历史的、被长期保存的数据。ODS层的数据粒度与Stage层数据粒度是一致的。Stage层中的数据是完全形式的源数据,需要进行清洗才能进入ODS层,所以说ODS层是数据仓库格式规整的基础数据,为上层服务。
3、 MDS层
MDS是数据仓库中间层,数据是以主题域划分的,并根据业务进行数据关联形成宽表,但是不对数据进行聚合处理,MDS层数据为数据仓库的上层的统计、分析、挖掘和应用提供直接支持。MDS层的数据也可以执行一定的老化策略。
4、 ADS层
ADS层是数据仓库的应用层,一般以业务线或者部门划分库。这一层可以为各个业务线创建一个数据库。ADS层的数据是基于MDS层数据生成的业务报表数据,可以直接作为数据仓库的输出导出到外部的操作型系统中(MySQL、MSSQL、Hbase、Elasticsearch等)。
5、 DIM层
DIM层是数据仓库数据中,各层公用的维度数据。比如:省市县数据。
6、 ETL调度系统
对接入数据仓库的数据进行清洗、数据仓库各层间数据流转都需要大量的程序任务来操作,这些任务一般都是定时的,并且之间都是有前后依赖关系的,为了能保证任务的有序执行,就需要一个ETL调度系统来管理。
7、 元数据管理系统
描述数据的数据叫做元数据,元数据信息一般包括表名、表描述信息、所在数据库、表结构、存储位置等基本信息,另外还有表之间的血缘关系信息、每天的增量信息、表结构修改记录信息等等。数据仓库中有大量的表,元数据管理系统就是用来收集、存储、查询数据仓库中元数据的工具,这个系统为数据使用方提供了极大的便利。
四、大数据仓库 架构规范
随着信息技术的迅速发展,大数据时代已经悄然而至,大数据在各行各业中发挥着越来越重要的作用。大数据仓库是企业管理大数据的核心,其架构需遵循一定的规范,才能保证数据的高效存储与管理。
大数据仓库架构规范概述
大数据仓库架构规范是指在设计和建设大数据仓库时需要遵循的一系列规定和标准,以确保整个数据仓库系统的稳定性、可靠性和高效性。
大数据仓库架构规范的重要性
大数据仓库架构规范的制定和执行对于企业数据管理至关重要。首先,规范化的架构可以降低数据仓库运维成本,提高数据的质量和可靠性;其次,规范化的架构可以提高数据查询和分析的效率,为企业决策提供支持。
大数据仓库架构规范的内容
大数据仓库架构规范包括数据仓库的物理架构、逻辑架构、数据模型、元数据管理、系统集成等方面的规范。其中,合理的物理架构是大数据仓库架构规范中最基础的要素之一。
大数据仓库架构规范的实施
实施大数据仓库架构规范需要企业的技术团队和管理团队密切合作,确保规范的落地执行。同时,也需要不断优化和调整规范,以适应企业数据管理的不断变化。
大数据仓库架构规范的效益
遵循大数据仓库架构规范可以为企业带来多方面的效益。首先,规范化的架构能够提高数据仓库系统的稳定性和可靠性,降低系统故障的风险;其次,规范化的架构能够提高数据仓库系统的性能,加快数据的处理和查询速度。
结语
大数据仓库架构规范是企业数据管理的关键,只有遵循科学合理的规范,才能充分发挥大数据的作用,为企业发展提供有力支持。
五、大数据数据仓库架构师
在现代科技领域,**大数据数据仓库架构师**是一种非常重要的角色。随着信息量的爆炸式增长,企业需要有效管理、分析和利用海量数据以获取商业洞见。而**大数据数据仓库架构师**的职责就是设计并维护适合企业需求的数据架构,确保数据仓库的高效运作。
**大数据**技术的重要性
随着互联网的普及和物联网技术的发展,大数据已经成为企业竞争的核心。**大数据**技术能够帮助企业从海量数据中提炼出有价值的信息,为企业决策提供支持。而**大数据数据仓库架构师**则是负责确保数据仓库系统能够高效地存储、管理和分析这些海量数据。
**数据仓库**的重要性
数据仓库是企业存储和管理数据的重要系统。它集成了各个不同来源的数据,并通过数据处理和分析,为企业决策提供支持。**数据仓库**的设计和架构直接影响着企业对数据的利用效率,而**大数据数据仓库架构师**在其中扮演着关键角色。
**大数据数据仓库架构师**的角色
作为**大数据数据仓库架构师**,需要具备丰富的数据管理和分析经验,熟悉各种数据库和数据仓库技术,能够根据企业需求设计出高效的数据架构。**大数据数据仓库架构师**还需要持续关注数据科技领域的发展,不断优化数据仓库系统,确保企业能够及时获得有用的数据洞见。
成为**大数据数据仓库架构师**的路径
要成为一名专业的**大数据数据仓库架构师**,需要系统学习数据管理、数据库技术、数据分析等知识领域。同时,还需不断提升自己的技能和实践经验,参与真实项目并解决实际问题。另外,及时跟踪**大数据**技术的最新发展,拓展自己的视野。
结语
总的来说,**大数据数据仓库架构师**是企业数据管理和分析领域中不可或缺的角色。他们通过精心设计和优化数据架构,帮助企业从海量数据中获取有价值的信息,为企业发展提供支持。而要成为一名优秀的**大数据数据仓库架构师**,需要不断学习和提升自己的技能,把握**大数据**技术的最新动态,助力企业实现数据驱动发展。
六、怎样的架构设计才是真正的数据仓库架构?
一直想整理一下这块内容,既然是漫谈,就想起什么说什么吧。我一直是在互联网行业,就以互联网行业来说。先大概列一下互联网行业数据仓库、数据平台的用途:
整合公司所有业务数据,建立统一的数据中心;
提供各种报表,有给高层的,有给各个业务的;
为网站运营提供运营上的数据支持,就是通过数据,让运营及时了解网站和产品的运营效果;
为各个业务提供线上或线下的数据支持,成为公司统一的数据交换与提供平台;
分析用户行为数据,通过数据挖掘来降低投入成本,提高投入效果;比如广告定向精准投放、用户个性化推荐等;
开发数据产品,直接或间接为公司盈利;
建设开放数据平台,开放公司数据;
。。。。。。
上面列出的内容看上去和传统行业数据仓库用途差不多,并且都要求数据仓库/数据平台有很好的稳定性、可靠性;但在互联网行业,除了数据量大之外,越来越多的业务要求时效性,甚至很多是要求实时的 ,另外,互联网行业的业务变化非常快,不可能像传统行业一样,可以使用自顶向下的方法建立数据仓库,一劳永逸,它要求新的业务很快能融入数据仓库中来,老的下线的业务,能很方便的从现有的数据仓库中下线;
其实,互联网行业的数据仓库就是所谓的敏捷数据仓库,不但要求能快速的响应数据,也要求能快速的响应业务;
建设敏捷数据仓库,除了对架构技术上的要求之外,还有一个很重要的方面,就是数据建模,如果一上来就想着建立一套能兼容所有数据和业务的数据模型,那就又回到传统数据仓库的建设上了,很难满足对业务变化的快速响应。应对这种情况,一般是先将核心的持久化的业务进行深度建模(比如:基于网站日志建立的网站统计分析模型和用户浏览轨迹模型;基于公司核心用户数据建立的用户模型),其它的业务一般都采用维度+宽表的方式来建立数据模型。这块是后话。
整体架构下面的图是我们目前使用的数据平台架构图,其实大多公司应该都差不多:
逻辑上,一般都有数据采集层、数据存储与分析层、数据共享层、数据应用层。可能叫法有所不同,本质上的角色都大同小异。
我们从下往上看:
数据采集数据采集层的任务就是把数据从各种数据源中采集和存储到数据存储上,期间有可能会做一些简单的清洗。
数据源的种类比较多:
网站日志:
作为互联网行业,网站日志占的份额最大,网站日志存储在多台网站日志服务器上,
一般是在每台网站日志服务器上部署flume agent,实时的收集网站日志并存储到HDFS上;
业务数据库:
业务数据库的种类也是多种多样,有Mysql、Oracle、SqlServer等,这时候,我们迫切的需要一种能从各种数据库中将数据同步到HDFS上的工具,Sqoop是一种,但是Sqoop太过繁重,而且不管数据量大小,都需要启动MapReduce来执行,而且需要Hadoop集群的每台机器都能访问业务数据库;应对此场景,淘宝开源的DataX,是一个很好的解决方案(可参考文章 《异构数据源海量数据交换工具-Taobao DataX 下载和使用》),有资源的话,可以基于DataX之上做二次开发,就能非常好的解决,我们目前使用的DataHub也是。
当然,Flume通过配置与开发,也可以实时的从数据库中同步数据到HDFS
来自于Ftp/Http的数据源:
有可能一些合作伙伴提供的数据,需要通过Ftp/Http等定时获取,DataX也可以满足该需求;
其他数据源:
比如一些手工录入的数据,只需要提供一个接口或小程序,即可完成
数据存储与分析毋庸置疑,HDFS是大数据环境下数据仓库/数据平台最完美的数据存储解决方案。
离线数据分析与计算,也就是对实时性要求不高的部分,在我看来,Hive还是首当其冲的选择,丰富的数据类型、内置函数;压缩比非常高的ORC文件存储格式;非常方便的SQL支持,使得Hive在基于结构化数据上的统计分析远远比MapReduce要高效的多,一句SQL可以完成的需求,开发MR可能需要上百行代码;
当然,使用Hadoop框架自然而然也提供了MapReduce接口,如果真的很乐意开发Java,或者对SQL不熟,那么也可以使用MapReduce来做分析与计算;Spark是这两年非常火的,经过实践,它的性能的确比MapReduce要好很多,而且和Hive、Yarn结合的越来越好,因此,必须支持使用Spark和SparkSQL来做分析和计算。因为已经有Hadoop Yarn,使用Spark其实是非常容易的,不用单独部署Spark集群,关于Spark On Yarn的相关文章,可参考:《Spark On Yarn系列文章》
实时计算部分,后面单独说。
数据共享这里的数据共享,其实指的是前面数据分析与计算后的结果存放的地方,其实就是关系型数据库和NOSQL数据库;
前面使用Hive、MR、Spark、SparkSQL分析和计算的结果,还是在HDFS上,但大多业务和应用不可能直接从HDFS上获取数据,那么就需要一个数据共享的地方,使得各业务和产品能方便的获取数据; 和数据采集层到HDFS刚好相反,这里需要一个从HDFS将数据同步至其他目标数据源的工具,同样,DataX也可以满足。
另外,一些实时计算的结果数据可能由实时计算模块直接写入数据共享。
数据应用
业务产品
业务产品所使用的数据,已经存在于数据共享层,他们直接从数据共享层访问即可;
报表
同业务产品,报表所使用的数据,一般也是已经统计汇总好的,存放于数据共享层;
即席查询
即席查询的用户有很多,有可能是数据开发人员、网站和产品运营人员、数据分析人员、甚至是部门老大,他们都有即席查询数据的需求;
这种即席查询通常是现有的报表和数据共享层的数据并不能满足他们的需求,需要从数据存储层直接查询。
即席查询一般是通过SQL完成,最大的难度在于响应速度上,使用Hive有点慢,目前我的解决方案是SparkSQL,它的响应速度较Hive快很多,而且能很好的与Hive兼容。
当然,你也可以使用Impala,如果不在乎平台中再多一个框架的话。
OLAP
目前,很多的OLAP工具不能很好的支持从HDFS上直接获取数据,都是通过将需要的数据同步到关系型数据库中做OLAP,但如果数据量巨大的话,关系型数据库显然不行;
这时候,需要做相应的开发,从HDFS或者HBase中获取数据,完成OLAP的功能;
比如:根据用户在界面上选择的不定的维度和指标,通过开发接口,从HBase中获取数据来展示。
其它数据接口
这种接口有通用的,有定制的。比如:一个从Redis中获取用户属性的接口是通用的,所有的业务都可以调用这个接口来获取用户属性。
实时计算现在业务对数据仓库实时性的需求越来越多,比如:实时的了解网站的整体流量;实时的获取一个广告的曝光和点击;在海量数据下,依靠传统数据库和传统实现方法基本完成不了,需要的是一种分布式的、高吞吐量的、延时低的、高可靠的实时计算框架;Storm在这块是比较成熟了,但我选择Spark Streaming,原因很简单,不想多引入一个框架到平台中,另外,Spark Streaming比Storm延时性高那么一点点,那对于我们的需要可以忽略。
我们目前使用Spark Streaming实现了实时的网站流量统计、实时的广告效果统计两块功能。
做法也很简单,由Flume在前端日志服务器上收集网站日志和广告日志,实时的发送给Spark Streaming,由Spark Streaming完成统计,将数据存储至Redis,业务通过访问Redis实时获取。
任务调度与监控在数据仓库/数据平台中,有各种各样非常多的程序和任务,比如:数据采集任务、数据同步任务、数据分析任务等;
这些任务除了定时调度,还存在非常复杂的任务依赖关系,比如:数据分析任务必须等相应的数据采集任务完成后才能开始;数据同步任务需要等数据分析任务完成后才能开始; 这就需要一个非常完善的任务调度与监控系统,它作为数据仓库/数据平台的中枢,负责调度和监控所有任务的分配与运行。
前面有写过文章,《大数据平台中的任务调度与监控》,这里不再累赘。
总结在我看来架构并不是技术越多越新越好,而是在可以满足需求的情况下,越简单越稳定越好。目前在我们的数据平台中,开发更多的是关注业务,而不是技术,他们把业务和需求搞清楚了,基本上只需要做简单的SQL开发,然后配置到调度系统就可以了,如果任务异常,会收到告警。这样,可以使更多的资源专注于业务之上。
七、数据仓库架构中etl完成什么任务?
ETL是数据抽取(Extract)、清洗(Cleaning)、转换(Transform)、装载(Load)的过程。
是构建数据仓库的重要一环,用户从数据源抽取出所需的数据,经过数据清洗,最终按照预先定义好的数据仓库模型,将数据加载到数据仓库中去。
八、大数据仓库架构图
当今社会,信息量爆炸式增长,大数据已成为许多行业的核心。随着大数据分析应用的普及和深入,构建一个高效的大数据仓库架构图变得至关重要。一个合理设计的大数据仓库架构图可以帮助企业更好地管理、存储和分析海量数据,从而为业务决策提供有力支持。
什么是大数据仓库架构图?
大数据仓库架构图是指在大数据环境下,为了满足企业对数据存储、管理、分析需求,而设计的一个包含各种组件、工具和技术的框架图。这个架构图通常包括数据源、数据采集、数据处理、数据存储、数据管理、数据分析等模块,通过各模块间的协作和关联,实现对大数据的全方位处理和应用。
大数据仓库架构图的重要性
一个优秀的大数据仓库架构图能够带来诸多益处。首先,它可以帮助企业将分散的数据整合到一起,统一进行管理和分析,降低数据孤岛的风险;其次,合理的架构图能提高数据处理效率,加速数据的获取和分析速度,提升企业的决策效率;此外,通过优化架构图,还能降低数据存储、处理成本,提升整体的数据处理能力。
如何设计一个优秀的大数据仓库架构图?
要设计一个优秀的大数据仓库架构图,需要考虑以下几个方面:
- 需求分析:首先要明确业务需求和数据需求,了解数据来源和目标,明确数据的用途和分析目标,量化数据规模和增长趋势。
- 架构规划:根据需求分析结果,设计合适的架构规划,包括数据流程、数据质量、数据安全等方面的考量,确保架构图满足企业需求。
- 技术选型:选择合适的技术组件和工具,包括数据存储系统、数据处理引擎、数据分析工具等,保证架构图的可行性和高效性。
- 数据治理:建立完善的数据治理机制,包括数据质量管理、数据安全保障、数据隐私保护等,确保数据在架构图中的流转和应用符合法规和标准。
成功案例分析
以下是一个成功的大数据仓库架构图设计案例:
该企业以金融数据为主要业务数据,通过构建一个包括数据采集、数据清洗、数据存储、数据分析等模块在内的大数据仓库架构图,实现了金融数据的实时收集、准确清洗、高效存储和智能分析。通过该架构图的运作,企业可以快速响应市场变化,优化业务决策,并提升服务质量。
未来发展趋势
随着人工智能、物联网、云计算等新技术的不断发展,大数据仓库架构图也将迎来新的挑战和机遇。未来,大数据仓库架构图将更加注重数据安全和隐私保护,更加智能化和自动化,更加与业务需求深度融合,成为企业数字化转型的重要支撑。
结语
设计一个优秀的大数据仓库架构图不是一蹴而就的事情,需要全面考虑业务需求、技术能力、数据规模等多方面因素。只有通过科学理性的设计和不断优化,才能为企业的数据管理和应用带来实际价值和持续竞争力。
九、数据仓库十大主题模型?
数据仓库十大的主题模型如下
高层模型:考虑所有上层主题,主题之间的关系
中层模型:细化 上层主题 数据项
物理模型:基于性能,存储,平台特点,数据合并,分区设计
维度建模(Ralph Kimball 拉尔夫·金博尔)提出 (当前最主流的模型)
星型:所有维表直接连接到事实表
雪花型: 当有一个或多个维表没有直接连接到事实表上,而是通过其他维表连接到事实表上
十、数据仓库的含义,数据仓库和数据库的区别?
一直想整理一下这块内容,既然是漫谈,就想起什么说什么吧。我一直是在互联网行业,就以互联网行业来说。先大概列一下互联网行业数据仓库、数据平台的用途:
整合公司所有业务数据,建立统一的数据中心;
提供各种报表,有给高层的,有给各个业务的;
为网站运营提供运营上的数据支持,就是通过数据,让运营及时了解网站和产品的运营效果;
为各个业务提供线上或线下的数据支持,成为公司统一的数据交换与提供平台;
分析用户行为数据,通过数据挖掘来降低投入成本,提高投入效果;比如广告定向精准投放、用户个性化推荐等;
开发数据产品,直接或间接为公司盈利;
建设开放数据平台,开放公司数据;
。。。。。。
上面列出的内容看上去和传统行业数据仓库用途差不多,并且都要求数据仓库/数据平台有很好的稳定性、可靠性;但在互联网行业,除了数据量大之外,越来越多的业务要求时效性,甚至很多是要求实时的 ,另外,互联网行业的业务变化非常快,不可能像传统行业一样,可以使用自顶向下的方法建立数据仓库,一劳永逸,它要求新的业务很快能融入数据仓库中来,老的下线的业务,能很方便的从现有的数据仓库中下线;
其实,互联网行业的数据仓库就是所谓的敏捷数据仓库,不但要求能快速的响应数据,也要求能快速的响应业务;
建设敏捷数据仓库,除了对架构技术上的要求之外,还有一个很重要的方面,就是数据建模,如果一上来就想着建立一套能兼容所有数据和业务的数据模型,那就又回到传统数据仓库的建设上了,很难满足对业务变化的快速响应。应对这种情况,一般是先将核心的持久化的业务进行深度建模(比如:基于网站日志建立的网站统计分析模型和用户浏览轨迹模型;基于公司核心用户数据建立的用户模型),其它的业务一般都采用维度+宽表的方式来建立数据模型。这块是后话。
整体架构下面的图是我们目前使用的数据平台架构图,其实大多公司应该都差不多:
逻辑上,一般都有数据采集层、数据存储与分析层、数据共享层、数据应用层。可能叫法有所不同,本质上的角色都大同小异。
我们从下往上看:
数据采集数据采集层的任务就是把数据从各种数据源中采集和存储到数据存储上,期间有可能会做一些简单的清洗。
数据源的种类比较多:
网站日志:
作为互联网行业,网站日志占的份额最大,网站日志存储在多台网站日志服务器上,
一般是在每台网站日志服务器上部署flume agent,实时的收集网站日志并存储到HDFS上;
业务数据库:
业务数据库的种类也是多种多样,有Mysql、Oracle、SqlServer等,这时候,我们迫切的需要一种能从各种数据库中将数据同步到HDFS上的工具,Sqoop是一种,但是Sqoop太过繁重,而且不管数据量大小,都需要启动MapReduce来执行,而且需要Hadoop集群的每台机器都能访问业务数据库;应对此场景,淘宝开源的DataX,是一个很好的解决方案(可参考文章 《异构数据源海量数据交换工具-Taobao DataX 下载和使用》),有资源的话,可以基于DataX之上做二次开发,就能非常好的解决,我们目前使用的DataHub也是。
当然,Flume通过配置与开发,也可以实时的从数据库中同步数据到HDFS
来自于Ftp/Http的数据源:
有可能一些合作伙伴提供的数据,需要通过Ftp/Http等定时获取,DataX也可以满足该需求;
其他数据源:
比如一些手工录入的数据,只需要提供一个接口或小程序,即可完成
数据存储与分析毋庸置疑,HDFS是大数据环境下数据仓库/数据平台最完美的数据存储解决方案。
离线数据分析与计算,也就是对实时性要求不高的部分,在我看来,Hive还是首当其冲的选择,丰富的数据类型、内置函数;压缩比非常高的ORC文件存储格式;非常方便的SQL支持,使得Hive在基于结构化数据上的统计分析远远比MapReduce要高效的多,一句SQL可以完成的需求,开发MR可能需要上百行代码;
当然,使用Hadoop框架自然而然也提供了MapReduce接口,如果真的很乐意开发Java,或者对SQL不熟,那么也可以使用MapReduce来做分析与计算;Spark是这两年非常火的,经过实践,它的性能的确比MapReduce要好很多,而且和Hive、Yarn结合的越来越好,因此,必须支持使用Spark和SparkSQL来做分析和计算。因为已经有Hadoop Yarn,使用Spark其实是非常容易的,不用单独部署Spark集群,关于Spark On Yarn的相关文章,可参考:《Spark On Yarn系列文章》
实时计算部分,后面单独说。
数据共享这里的数据共享,其实指的是前面数据分析与计算后的结果存放的地方,其实就是关系型数据库和NOSQL数据库;
前面使用Hive、MR、Spark、SparkSQL分析和计算的结果,还是在HDFS上,但大多业务和应用不可能直接从HDFS上获取数据,那么就需要一个数据共享的地方,使得各业务和产品能方便的获取数据; 和数据采集层到HDFS刚好相反,这里需要一个从HDFS将数据同步至其他目标数据源的工具,同样,DataX也可以满足。
另外,一些实时计算的结果数据可能由实时计算模块直接写入数据共享。
数据应用
业务产品
业务产品所使用的数据,已经存在于数据共享层,他们直接从数据共享层访问即可;
报表
同业务产品,报表所使用的数据,一般也是已经统计汇总好的,存放于数据共享层;
即席查询
即席查询的用户有很多,有可能是数据开发人员、网站和产品运营人员、数据分析人员、甚至是部门老大,他们都有即席查询数据的需求;
这种即席查询通常是现有的报表和数据共享层的数据并不能满足他们的需求,需要从数据存储层直接查询。
即席查询一般是通过SQL完成,最大的难度在于响应速度上,使用Hive有点慢,目前我的解决方案是SparkSQL,它的响应速度较Hive快很多,而且能很好的与Hive兼容。
当然,你也可以使用Impala,如果不在乎平台中再多一个框架的话。
OLAP
目前,很多的OLAP工具不能很好的支持从HDFS上直接获取数据,都是通过将需要的数据同步到关系型数据库中做OLAP,但如果数据量巨大的话,关系型数据库显然不行;
这时候,需要做相应的开发,从HDFS或者HBase中获取数据,完成OLAP的功能;
比如:根据用户在界面上选择的不定的维度和指标,通过开发接口,从HBase中获取数据来展示。
其它数据接口
这种接口有通用的,有定制的。比如:一个从Redis中获取用户属性的接口是通用的,所有的业务都可以调用这个接口来获取用户属性。
实时计算现在业务对数据仓库实时性的需求越来越多,比如:实时的了解网站的整体流量;实时的获取一个广告的曝光和点击;在海量数据下,依靠传统数据库和传统实现方法基本完成不了,需要的是一种分布式的、高吞吐量的、延时低的、高可靠的实时计算框架;Storm在这块是比较成熟了,但我选择Spark Streaming,原因很简单,不想多引入一个框架到平台中,另外,Spark Streaming比Storm延时性高那么一点点,那对于我们的需要可以忽略。
我们目前使用Spark Streaming实现了实时的网站流量统计、实时的广告效果统计两块功能。
做法也很简单,由Flume在前端日志服务器上收集网站日志和广告日志,实时的发送给Spark Streaming,由Spark Streaming完成统计,将数据存储至Redis,业务通过访问Redis实时获取。
任务调度与监控在数据仓库/数据平台中,有各种各样非常多的程序和任务,比如:数据采集任务、数据同步任务、数据分析任务等;
这些任务除了定时调度,还存在非常复杂的任务依赖关系,比如:数据分析任务必须等相应的数据采集任务完成后才能开始;数据同步任务需要等数据分析任务完成后才能开始; 这就需要一个非常完善的任务调度与监控系统,它作为数据仓库/数据平台的中枢,负责调度和监控所有任务的分配与运行。
前面有写过文章,《大数据平台中的任务调度与监控》,这里不再累赘。
总结在我看来架构并不是技术越多越新越好,而是在可以满足需求的情况下,越简单越稳定越好。目前在我们的数据平台中,开发更多的是关注业务,而不是技术,他们把业务和需求搞清楚了,基本上只需要做简单的SQL开发,然后配置到调度系统就可以了,如果任务异常,会收到告警。这样,可以使更多的资源专注于业务之上。