大數據倉庫理論(二)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)資源管理相關參數配置
