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