企业是如何选择技术栈来做离线数仓



前言

         最近在跟一位粉丝聊天,聊起来了做离线数仓时该用那些技术栈。于是根据我的经验和参考一些资料于就有本篇文章。在这里我会分享三个案例,仅供参考。2bf4376e2778400d6899f9c1a168cb9a.jpg

案例一、小型公司

         首先我们要明白一点小型公司人员并不多其次服务器的配置有不是很高,这时如果要做数仓使用到的大数据组件就不可能了,那我们就使用传统数据库来进行讲解。

1.1 技术选型

          首先公司在选择一个技术时需要考虑成本的,比如人员的安排,公司的员工对大数据的组件都不是很了解,如果选择大数据的组件学习成本较高,可以还会找一批大数据的员工进来开发,提高了项目的成本,由于数据量也不是很高1年也就几百万的数据量,目前市场上的数据库也是支持存储的,MySQLoracleSQL server 该选择那个一个那?

MySQL、oracle、SQL server 对比

MySQL优缺点

  1. 它使用的核心线程是完全多线程,支持多处理器。
  2. 有多种列类型:1、2、3、4、和8字节长度自有符号/无符号整数、FLOAT、DOUBLE、CHAR、VARCHAR、TEXT、BLOB、DATE、TIME、DATETIME、 TIMESTAMP、YEAR、和ENUM类型。
  3. 它通过一个高度优化的类库实现SQL函数库并像他们能达到的一样快速,通常在查询初始化后不该有任何内存分配。没有内存漏洞。
  4. 全面支持SQL的GROUP BY和ORDER BY子句,支持聚合函数(COUNT()、COUNT(DISTINCT)、AVG()、STD()、SUM()、MAX()和MIN())。你可以在同一查询中混来自不同数据库的表。
  5. 支持ANSI SQL的LEFT 0UTER JOIN和ODBC。
  6. 所有列都有缺省值。你可以用INSERT插入一个表列的子集,那些没用明确给定值的列设置为他们的决省值。
  7. MySQL可以工作在不同的平台上。支持C、C++、Java、Perl、PHP、Python和TCL API。
  8. 支持索引创建

  1. MySQL最大的缺点是其安全系统,主要是复杂而非标准,另外只有到调用mysqladmin来重读用户权限时才发生改变。
  2. MySQL的另一个主要的缺陷之一是缺乏标准的RI(Referential Integrity-RI)机制;Rl限制的缺乏(在给定字段域上的一种固定的范围限制)可以通过大量的数据类型来补偿。
  3. MySQL没有一种存储过程(Stored Procedure)语言,这是对习惯于企业级数据库的程序员的最大限制。
  4. MySQL不支持热备份。
  5. MySQL的价格随平台和安装方式变化。Linux的MySQL如果由用户自己或系统管理员而不是第三方安装则是免费的,第三方案则必须付许可费。Unix或Linux 自行安装 免费 、Unix或Linux 第三方安装 200美元,

oraclet优缺点

  1. 开放性:oracle 能所有主流平台上运行(包括 windows)完全支持所有工业标准采用完全开放策略使客户选择适合解决方案对开发商全力支持;
  2. 可伸缩性,并行性:Oracle 并行服务器通过使组结点共享同簇工作来扩展windownt能力提供高用性和高伸缩性簇解决方案windowsNT能满足需要用户把数据库移UNIXOracle并行服务器对各种UNIX平台集群机制都有着相当高集成度;
  3. 安全性:获得最高认证级别的ISO标准认证。
  4. 性能:Oracle 性能高 保持开放平台下TPC-D和TPC-C世界记录;
  5. 客户端支持及应用模式:Oracle 多层次网络计算支持多种工业标准用ODBC、JDBC、OCI等网络客户连接
  6. 使用风险:Oracle 长时间开发经验完全向下兼容得广泛应用地风险低

  1. 对硬件的要求很高;
  2. 价格比较昂贵;
  3. 管理维护麻烦一些;
  4. 操作比较复杂,需要技术含量较高;

SQL Server优缺点

  1. 易用性、适合分布式组织的可伸缩性、用于决策支持的数据仓库功能、与许多其他服务器软件紧密关联的集成性、良好的性价比等;
  2. 为数据管理与分析带来了灵活性,允许单位在快速变化的环境中从容响应,从而获得竞争优势

  1. SQL Server 只能windows上运行没有丝毫开放性操作系统系统稳定对数据库十分重要Windows9X系列产品偏重于桌面应用NT server只适合小型企业而且windows平台靠性安全性和伸缩性非常有限象unix样久经考验尤其处理大数据库;
  2. SQL server 并行实施和共存模型并成熟难处理日益增多用户数和数据卷伸缩性有限;
  3. 没有获得任何安全证书。
  4. SQL Server 多用户时性能佳 ;客户端支持及应用模式:客户端支持及应用模式。只支持C/S模式,SQL Server C/S结构只支持windows客户用ADO、DAO、OLEDB、ODBC连接
  5. SQL server 完全重写代码经历了长期测试断延迟许多功能需要时间来证明并十分兼容;

小结         

        根据开会和各位领导的决定使用oracle来做数仓,分别在oracle中构构建四层分别为 odsdwddwsads这里我就不介绍数仓分层概念了最后的整体架构如下:数据库:Oracle 数据同步 :kettle 数据展示:大屏展示,Superset

1.2 技术架构

e4aa5b76e58821646a1b9215d143cd09.jpg

案例二、中型公司

          首先中型公司做离线数仓并不单纯的做数仓,你将你数据存放在数仓中通报表的形式展示在大屏中,体现不出数仓的价值,可以通过这个些数据做一个用户画像。我在这里举一个不恰到的例子:比如数仓的中的数据没有被利用起来,我购买了一个商品在后台报表中加上我刚刚下单的这一条数据(死数据),只是报表发生了改变但是对于公司而是价值不大,这时我们是不是可用基于数仓做一个用户画像,分析出这个用户喜欢够那类商品,价格的区间是多少,这样就可以做一个精准推荐。废话就不多少了直接开始。

2.1 技术选型

         技术选型需要根据公司的需求以及公司的数据量等综合的因素进行选择,可以使用HiveHBase等技术来做。那我们这里就使用Hive详细架构请看下:

数据采集:Kettle、sqoop、flume 数据存储:HDFS、Hbase、Redis、Kafka 任务调度:Yarn 计算引擎:Spark 离线处理:Hive 数据应用层:kylin 、大屏展示、Superset

         我拍在这里就有好多小伙伴不知道为什么这么选型,我就在这一一给讲解下:

数据采集

         kettle 一般处理一些数据量比较小的数据,因为学习成本低,适合那些刚刚接触ETL的员工,并且还有丰富的组件,例如exec、Json、文本等信息录入到数据库中。

         sqoop主要将关系型数据同步到hive中,因为它的底层是通过MapReduce的方式当多量数据通过分布式方式效率也不会很慢。

         Flume 主要将前端产生的日志存到kafka中用来做一些点击流操作。例如:分析用户在这个页面停留了多长时间。求出页面的TopN等信息。

数据存储

          HDFS 主要存储一些要求时效不高的数据,但是这些数据又不能被丢失场景,一般会结合Hive一起使用。        

          Hbase 一般会将hive中的ADS层的一部分数据存储到Hbase中提供数据支撑。这一部分数据一般要求时效性比较高。          

          Redis  一般用于前端与数据库之间的桥梁,前端来的请求先去Redis查,这样就避免了数据库高并出现宕机的现象。         

           kafka 主要存储非结构化数据,一般设置保存7天,场景不同。这里用于做点击流。

任务调度

          yarn 想必大家对它都不陌生主要用户做资源调度了。

计算引擎

         Spark  在本次项目中主要做数据分析,通过SparkSql 更快的提高分析效率,大大的节约了时间。

离线处理        

Hive这里起到了数据仓库的作用 ,Hive在这里进行了分层分别为odsdwddwsads 每个层都有他自己的作用域。

2.2 技术架构

f2dab499b237a79b5bf0734d5b1e8ca9.jpg

案例三、携程机票数据仓库技术栈

以下内容来源于:https://www.sohu.com/a/403837625_411876

         携程机票部门的数据仓库建设主要基于公司公共部门的大数据基础环境及数据调度平台,辅以部分自运维的开源存储引擎和基于开源组件二次开发的数据同步工具和运维工具。

3.1 当前技术栈

生产环境的数据可以大致分成三类:

  1. 业务数据,主要存储在MySQL和SQLServer,在这些关系型数据库里面有数以万计的表承接着各种生产服务的业务数据写入;
  2. 基础数据,也是存储在MySQL和SQLServer中,生产应用时一般会建立一层中心化缓存(如Redis)或者本地缓存;
  3. 日志数据,这类数据的特点是”append only”,对已经生成的数据不会有更新的操作,考虑到这类数据的高吞吐量,生产环境一般会用消息队列Kafka暂存;

数据仓库在实施数据同步时,会根据需求在实时、近实时以及T+1天等不同的频率执行数据同步,并且在大数据环境会用不同的载体承接不同频率同步过来的数据。在携程机票,实时同步的目标载体是ElasticSearch、CrateDB或者HBase,近实时(一般T+1小时)或者T+1天的目标载体是Hive。

从生产的数据载体来讲,主要包括DB和消息队列,他们的数据同步方案主要是:

  1. 生产DB到Hive的同步使用taobao开源的DataX,DataX由网站运营中心DP团队做了很多扩展开发,目前支持了多种数据源之间的数据同步。实时同步的场景主要在MySQL,使用DBA部门使用Canal解析并写入至消息队列的bin log。
  2. 从Kafka到Hive同步使用Camus,但是由于Camus的性能问题及消费记录和消费过期较难监控的问题,我们基于spark-sql-kafka开发了hamal,用于新建的Kafka到Hive的同步;Kafka实时同步的载体主要是ElasticSearch或者CrateDB,主要通过Flink实施。
  3. 生产数据被同步数据仓库后,会在数仓内完成数据清洗、信息整合、聚合计算等数据扭转流程,最终数据出仓导入到其它载体,这一系列的流程调度由公司DP团队运维的调度平台Zeus完成。

3.2 技术架构

653e54a2d6eb23f19dae1529c74190c4.jpg

小结

         一套完整的数据仓库实施方案应该包括但不局限于上面介绍的数据同步方案、数据存储方案、数据规范、元数据建设、数据质量体系、运维工具等,每个实施团队应该根据面临的实际情况选择针对每个点的具体技术方案。我在这里为大家提供大数据的资料需要的朋友可以去下面GitHub去下载,信自己,努力和汗水总会能得到回报的。我是大数据老哥,我们下期见~~~

资源获取 获取Flink面试题,Spark面试题,程序员必备软件,hive面试题,Hadoop面试题,Docker面试题,简历模板等资源请去 GitHub自行下载 https://github.com/lhh2002/Framework-Of-BigData Gitee 自行下载  https://gitee.com/li_hey_hey/dashboard/projects




猜你喜欢

转载自blog.51cto.com/14417862/2604583