1.数据仓库周边技术框架

1.1 技术框架概述

    在数据仓库的搭建过程中,会涉及大量技术框架,下面我们对数据仓库建设过程中的周边技术框架进行说明,常用的周边技术框架如下图所示:

数据仓库核心技术框架

 

1.2 数据采集

    将目前主要的数据源分为数据库、日志、平面文件(在一些情况下你不能直接取抓取源数据库的数据,只能由源端数据的生成端按照一定格式将数据整理到文件中,然后采集到数据仓库中,总的来说,平面文件就是有一定格式的文件,其实日志也是平面文件的一种)三 种,针对每种数据源的特点,采用适当的采集方案,目前常用的主要开源产品如下:

数据仓库核心技术框架

1.2.1 Datax

    Ali 开源的,基于多线程级别的并行实现离线、异构平台同步工具,能够快速实现数据 异构数据源的离线同步。

数据仓库核心技术框架

    Datax 的架构如下图所示:

数据仓库核心技术框架

    Datax 的特点如下:

    • 支持数据实例广泛,灵活的实现各种结构存储之间的数据同步; 

    • 部署、使用简单;

    • 能够实现流量精准控制;

    • datax 不是分布式的框架,单节点运行。

1.2.2  Sqoop

    • Sqoop,开源的、基于 MapReduce 的、关系型数据库与 HDFS 之间数据同步工具,大数据生态中的关键组件,目前有 Sqoop1(绝大多数公司都使用 Sqoop1)、Sqoop2 两个版本同步更新。

    • Sqoop1:仅有一个客户端,架构简单明了,部署即用,使用门槛比较低;但是耦合性强,用户密码暴露导致不安全(通过环境变量可以解决密码暴露的问题)。

    • Sqoop2:服务端部署、运行,提供 cli、rest api、web ui 等入口,conncetor 集中管理,RDBMS 账号控制更安全,但 Sqoop2 仅负责数据的读、写操作,架构相对复杂。

1.2.3  Datax 与 Sqoop 的对比

    • Datax:支持更多的异构同步,多线程而非分布式,易于部署;开源版本仅提供单节点 部署方案,任务较多时容易产生性能瓶颈;

    • Sqoop:支持 RDBMS->HDFS、HDFS->RDBMS 的同步,支持场景有限,基于 MapReduce 的分布式程序,方便弹性扩展;

1.2.4 数据采集框架综述

    • Linux 自带的 scp 是非实时的数据采集。

    • Rsyslog 性能很高,但是配置很复杂。

    • Filebeat 轻量级,耗费的资源相对较少,但无法对日志进行解析。

    • Flume 和 Logstach 都支持实时,但比较耗费资源(相对的,如果服务器资源充足,也没 有问题),在 Logstach 中对日志进行解析是非常耗费资源的。

 

1.3 数据通道

1.3.1 Kafka

    Kafka 是目前使用最为广泛的消息队列,能够满足绝大部分的生产环境需求。

    详见:https://blog.csdn.net/luomingkui1109/article/category/7766639

1.3.2 RabbitMQ

    RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现。

 

1.4 系统调度

1.4.1 Oozie

    Oozie 是一个重量级的任务调度系统,功能全面,但是需要进行大量的基于 XML 的配 置,而且代码复杂度比较高。

    在实际工厂环境下如果使用 Oozie,复杂的配置会严重降低工作效率,因此往往会在上 层封装一层 JavaEE,开发出一套 OM 界面,用户通过填写页面上的选项来完成配置,使得 Oozie 的复杂配置对于用户是透明的。

    Oozie 的运行有以下几个级别:

    • oozie v1: workflow,普通工作流,根据作业间的依赖关系构建成有向无环图,和其它的工作流无异;

    • oozie v2:根据 Coordinator 协调工作流的执行,提供时间触发(定时运行)、数据触发 (指定依赖路径,路径中的文件满足条件,任务开始运行)(可以基于 Hive 元数据触发, 例如 Hive 中的某个表或者某个分区存在了,触发任务);

    • oozie v3:根据 Bundle 协调一批 Coordinator 的执行;

    说明:Oozie 与 hadoop、hive、spark 有较强的版本依赖关系,使用中版本升级等过程需注意

jar 包冲突。

1.4.2 Azkaban

    Azkaban 是由 Linkedin 开源的一个批量工作流任务调度器。用于在一个工作流内以一个 特定的顺序运行一组工作和流程。Azkaban 使用 Properties 文件定义工作流,并提供一个易于使用的 web 用户界面维护和跟踪你的工作流。

    Azkaban 是一个轻量级的任务调度器,更适用于中小量任务的调度工作,如果不在意某 些功能的缺失,Azkaban 是一个很不错的候选对象。

    详见:https://blog.csdn.net/luomingkui1109/article/category/8054813

1.4.3  Oozie 与 Azkaban 的比较

数据仓库核心技术框架

    在数据仓库的任务调度中,如果表 A 失败,对于 Azkaban,那么所有的任务全部停止, 发送报警消息,对于 Oozie,表 A 失败后立即发送报警消息,只有依赖于这个任务的任务会 受到影响,其他的任务不受影响,继续运行,错误修复后,可以再次启动之前报错的任务, 完成任务,单一任务的失败不会影响系统的整体运行。

 

2. Hive 技术框架剖析

    详见:https://blog.csdn.net/luomingkui1109/article/category/7766635

    

3. Hbase 技术框架剖析

    详见:https://blog.csdn.net/luomingkui1109/article/category/7766637

相关文章: