大数据仓库理论(二)Kettle+Sqoop+Azkaban+Impala
一、Kettle
1、Kettle的介绍
Kettle是一款开源的、元数据驱动的ETL工具集,是开源ETL工具里功能比较强大的一个。
Kettle需要对数据进行 抽取、转换、装入和加载 ,它的中文名字可以称为水壶。
其名字的起源:希望把各种数据放到一个壶里然后以一种指定的格式流出。
2、Kettle程序启动
1)Kettle程序启动分为两种:作业、转换。
2)作业调用启动脚本:kitchen.sh (kitchen.bat)
3)转换调用启动脚本:pan.sh (pan,bat)
3、Kettle的组件说明:JOB(作业调用)
分为串行执行和并行执行。
串行执行是先执行完其中一条线再执行另一条线;
并行是两条线同时执行,同一条线上的两个步聚会先执行前面的再执行后面的。
每个步骤执行结果分两种:true(成功)/false(失败),根据返回结果可以控制流程走向。

4、Kettle的组件说明:TRANSFORMATION(转换调用)
一开始所有步骤同时运行,记录会从最前端的步骤向后
传递,
传递到相应步骤则该记录被该步骤作相应
处理,
处理完成再把记录往后
传递,
记录传递分
复制和分发两种模式。

5、Kettle常用组件
6、Kettle输出日志说明
Nothing:不显示任何输出
Error:仅仅显示错误信息
Minimal:使用最小的日志
Basic:缺省的日志级别(一般上线的项目采用该日志)
Detailed:给出日志输出的细节(适用于未上线的项目)
Debug:调试目的,调试输出
Rowlevel:打印出每一行记录的信息
二、Sqoop
Sqoop是Apache旗下的一款“Hadoop和关系数据库服务器之间传送数据”的工具。
三、Azkaban
1、Azkaban简介
Azkaban是LinkedIn开源的
任务调度框架,类似于JavaEE中的JBPM和Activiti工作流框架。
如ETL的过程:
Sqoop在凌晨1点从RDBMS中抽取数据(E),在凌晨2点用Hadoop或Spark转换数据(T),在凌晨3点用Sqoop再把结果数据加载(L)进RDBMS或NOSQL。
假设没有Azkaban这样的调度框架,一般用crontab+shell,
crontab+shell虽然简单易用,但也有明显的缺点,如 任务的依赖处理、任务监控、任务流的可视化等,就需要一个调度框架来统一。
常见的任务调度框架有
Apache Oozie、LinkedIn Azkaban、Apache Airflow、Alibaba Zeus。
由于
Azkaban具有轻量可插拔、友好的WebUI、SLA告警、完善的权限控制、易于二次开发等优点,也得到了广泛应用。
2、Azkaban架构

Relational Database:
存储元数据,如项目名称、项目描述、项目权限、任务状态、SLA规则等。
Azkaban WebServer:
项目管理、权限授权、任务调度、监控executor。
Azkaban ExecutorServer:
作业流执行的Server。
3、Azkaban的部署方式
1)solo-server模式
DB使用的是一个内嵌的H2,Web Server和Executor Server运行在同一个进程里。
这种模式包含Azkaban的所有特性,但一般用来学习和测试。
2)two-server模式
DB使用的是MySQL,MySQL支持master-slave架构,Web Server和ExecutorServer运行在不同的进程中。
3)分布式multiple-executor模式
DB使用的是MySQL,MySQL支持master-slave架构,Web Server和ExecutorServer运行在不同机器上,且有多个Executor Server。
四、Impala
1、Impala简介
基于GOOGLE的Dremel为原型的查询引擎, Cloudera公司推出,
提供对HDFS、HBase数据的高性能、低延迟的交互式SQL查询功能。
- Impala服务器是一个分布式,大规模并行处理(MPP)的服务引擎。
- 基于Hive使用内存计算,兼顾数据仓库、具有实时、批处理、多并发等优点。
- 是CDH平台首选的PB级大数据实时查询分析引擎。
2、SMP和MPP
3、Impala架构
注:Impala目前没有很好的容错机制

1)Statestore Daemon
- 负责收集分布在集群中各个impalad进程的资源信息、各节点健康状况,同步节点信息。(存储元数据)
- 负责query的调度
2)Catalog Daemon
- 分发表的元数据信息到各个impalad中
- 接收来自statestore的所有请求
3)Impala Daemon
- 接收client、hue、jdbc或者odbc请求、Query执行并返回给中心协调节点子节点上的守护进程,
- 负责向statestore保持通信,汇报工作
详情参考: https://www.cnblogs.com/liuxinrong/articles/12918799.html
4、Impala的优势
1)
Impala不需要把中间结果写入磁盘,省掉了大量的I/O开销。
2)
省掉了MR作业启动的开销。
MR启动task的速度很慢,Impala直接通过相应的服务进程来进行作业调度,速度快了很多。
3)Impala完全抛弃了MR这个不太适合做SQL查询的范式,而是像Dremel一样借鉴了
MPP并行数据库的思想另起炉灶,
因此
可做更多的查询优化,从而
省掉不必要的shuffle、sort等开销。
4)用C++实现,
做了很多有针对性的硬件优化,例如使用SSE指令。
5)
使用了支持Data locality的I/O调度机制,尽可能地将数据和计算分配在同一台机器上进行,
减少了网络开销。
5、Impala资源管理
注:因为impala没有很好的容错机制所以需要对其进行资源管理
1)静态资源池

2)动态资源池

3)资源管理相关参数配置
