Hadoop教程(五):Flume、Sqoop、Pig、Hive、OOZIE
在我們了解Flume和Sqoop之前,讓我們研究數據加載到Hadoop的問題:
使用Hadoop分析處理數據,需要裝載大量從不同來源的數據到Hadoop集群。
從不同來源大容量的數據加載到Hadoop,然后這個過程處理它,這具有一定的挑戰。
維護和確保數據的一致性,并確保資源的有效利用,選擇正確的方法進行數據加載前有一些因素是要考慮的。
主要問題:
1. 使用腳本加載數據
傳統的使用腳本加載數據的方法,不適合于大容量數據加載到 Hadoop;這種方法效率低且非常耗時。
2. 通過 Map-Reduce 應用程序直接訪問外部數據
提供了直接訪問駐留在外部系統中的數據(不加載到Hadopp)到map reduce,這些應用程序復雜性。所以,這種方法是不可行的。
3.除了具有龐大的數據的工作能力,Hadoop可以在幾種不同形式的數據上工作。這樣,裝載此類異構數據到Hadoop,不同的工具已經被開發。Sqoop和Flume 就是這樣的數據加載工具。
SQOOP介紹
Apache?Sqoop(SQL到Hadoop)被設計為支持批量從結構化數據存儲導入數據到HDFS,如關系數據庫,企業級數據倉庫和NoSQL系統。Sqoop是基于一個連接器體系結構,它支持插件來提供連接到新的外部系統。
一個Sqoop 使用的例子是,一個企業運行在夜間使用 Sqoop 導入當天的生產負荷交易的RDBMS 數據到 Hive 數據倉庫作進一步分析。
Sqoop 連接器
現有數據庫管理系統的設計充分考慮了SQL標準。但是,每個不同的 DBMS 方言化到某種程度。因此,這種差異帶來的挑戰,當涉及到整個系統的數據傳輸。Sqoop連接器就是用來解決這些挑戰的組件。
Sqoop和外部存儲系統之間的數據傳輸在 Sqoop 連接器的幫助下使得有可能。
Sqoop 連接器與各種流行的關系型數據庫,包括:MySQL, PostgreSQL, Oracle, SQL Server 和 DB2 工作。每個這些連接器知道如何與它的相關聯的數據庫管理系統進行交互。 還有用于連接到支持Java JDBC協議的任何數據庫的通用JDBC連接器。 此外,Sqoop提供優化MySQL和PostgreSQL連接器使用數據庫特定的API,以有效地執行批量傳輸。
除了這一點,Sqoop具有各種第三方連接器用于數據存儲,
從企業數據倉庫(包括Netezza公司,Teradata和甲骨文)到 NoSQL存儲(如Couchbase)。但是,這些連接器沒有配備Sqoop束; ?這些需要單獨下載并很容易地安裝添加到現有的Sqoop。
FLUME 介紹
Apache Flume 用于移動大規模批量流數據到 HDFS 系統。從Web服務器收集當前日志文件數據到HDFS聚集用于分析,一個常見的用例是Flume。
Flume 支持多種來源,如:
- “tail”(從本地文件,該文件的管道數據和通過Flume寫入 HDFS,類似于Unix命令“tail”)
- 系統日志
- Apache log4j (允許Java應用程序通過Flume事件寫入到HDFS文件)。
在 Flume 的數據流
Flume代理是JVM進程,里面有3個組成部分 -?Flume Source,?Flume Channel?和?Flume Sink?-通過該事件傳播發起在外部源之后。
FLUME 一些重要特性
- Flume 基于流媒體數據流靈活的設計。這是容錯和強大的多故障切換和恢復機制。 Flume 有不同程度的可靠性,提供包括“盡力傳輸'和'端至端輸送'。盡力而為的傳輸不會容忍任何 Flume 節點故障,而“終端到終端的傳遞”模式,保證傳遞在多個節點出現故障的情況。
- Flume 承載源和接收之間的數據。這種數據收集可以被預定或是事件驅動。Flume有它自己的查詢處理引擎,這使得在轉化每批新數據移動之前它能夠到預定接收器。
- 可能 Flume 包括HDFS和HBase。Flume 也可以用來輸送事件數據,包括但不限于網絡的業務數據,也可以是通過社交媒體網站和電子郵件消息所產生的數據。
自2012年7月Flume 發布了新版本 Flume NG(新一代),因為它和原來的版本有明顯的不同,因為被稱為 Flume OG (原代)。
在本教程中,我們將討論 Pig & Hive
Pig簡介
在Map Reduce框架,需要的程序將其轉化為一系列 Map 和 Reduce階段。 但是,這不是一種編程模型,它被數據分析所熟悉。因此,為了彌補這一差距,一個抽象概念叫 Pig 建立在 Hadoop 之上。
Pig是一種高級編程語言,分析大數據集非常有用。 Pig 是雅虎努力開發的結果
Pig 使人們能夠更專注于分析大量數據集和花更少的時間來寫map-reduce程序。
類似豬吃東西,Pig 編程語言的目的是可以在任何類型的數據工作。
Pig 由兩部分組成:
Pig Latin 程序由一系列操作或變換應用到輸入數據,以產生輸出。這些操作描述被翻譯成可執行到數據流,由 Pig 環境執行。下面,這些轉換的結果是一系列的 MapReduce 作業,程序員是不知道的。所以,在某種程度上,Pig 允許程序員關注數據,而不是執行過程。
Pig Latin 是一種相對硬挺的語言,它采用熟悉的關鍵字來處理數據,例如,Join, Group 和 Filter。
執行模式:
Pig 有兩種執行模式:
HIVE 介紹
在某種程度上數據集收集的大小并在行業用于商業智能分析正在增長,它使傳統的數據倉庫解決方案更加昂貴。HADOOP與MapReduce框架,被用于大型數據集分析的替代解決方案。雖然,Hadoop 地龐大的數據集上工作證明是非常有用的,MapReduce框架是非常低級別并且它需要程序員編寫自定義程序,這導致難以維護和重用。 Hive 就是為程序員設計的。
Hive 演變為基于Hadoop的Map-Reduce 框架之上的數據倉庫解決方案。
Hive 提供了類似于SQL的聲明性語言,叫作:HiveQL, 用于表達的查詢。使用 Hive-SQL,用戶能夠非常容易地進行數據分析。
Hive 引擎編譯這些查詢到 map-reduce作業中并在 Hadoop 上執行。此外,自定義 map-reduce 腳本,也可以插入查詢。Hive運行存儲在表中,它由基本數據類型,如數組和映射集合的數據類型的數據。
配置單元帶有一個命令行shell接口,可用于創建表并執行查詢。
Hive 查詢語言是類似于SQL,它支持子查詢。通過Hive查詢語言,可以使用 MapReduce 跨Hive 表連接。它有類似函數簡單的SQL支持- CONCAT, SUBSTR, ROUND 等等, 聚合函數?- SUM, COUNT, MAX etc。它還支持GROUP BY和SORT BY子句。 另外,也可以在配置單元查詢語言編寫用戶定義的功能。
MapReduce,Pig 和 Hive 的比較
| Sqoop | Flume | HDFS |
| Sqoop用于從結構化數據源,例如,RDBMS導入數據 | Flume 用于移動批量流數據到HDFS | HDFS使用 Hadoop 生態系統存儲數據的分布式文件系統 |
| Sqoop具有連接器的體系結構。連接器知道如何連接到相應的數據源并獲取數據 | Flume 有一個基于代理的架構。這里寫入代碼(這被稱為“代理”),這需要處理取出數據 | HDFS具有分布式體系結構,數據被分布在多個數據節點 |
| HDFS 使用 Sqoop 將數據導出到目的地 | 通過零個或更多個通道將數據流給HDFS | HDFS是用于將數據存儲到最終目的地 |
| Sqoop數據負載不事件驅動 | Flume 數據負載可通過事件驅動 | HDFS存儲通過任何方式提供給它的數據 |
| 為了從結構化數據源導入數據,人們必須只使用Sqoop,因為它的連接器知道如何與結構化數據源進行交互并從中獲取數據 | 為了加載流數據,如微博產生的推文。或者登錄Web服務器的文件,Flume 應都可以使用。Flume 代理是專門為獲取流數據而建立的。 | HDFS擁有自己的內置shell命令將數據存儲。HDFS不能用于導入結構化或流數據 |
OOZIE 是什么鬼?
Apache?Oozie是工作流調度用在Hadoop中。它是一個運行相關的作業工作流系統。這里,用戶被允許創建向非循環圖工作流程,其可以在并列 Hadoop 并順序地運行。
它由兩部分組成:
- 工作流引擎:一個工作流引擎的職責是存儲和運行工作流程,由 Hadoop 作業組成:MapReduce, Pig, Hive.
- 協調器引擎:它運行基于預定義的時間表和數據的可用性工作流程作業。
Oozie可擴展性和可管理及時執行成千上萬的工作流程(每個由幾十個作業)的Hadoop集群。
Oozie 也非常靈活。人們可以很容易啟動,停止,暫停和重新運行作業。Oozie 可以很容易地重新運行失敗的工作流。可以很容易重做因宕機或故障錯過或失敗的作業。甚至有可能跳過一個特定故障節點。
Oozie 如何工作?
Oozie 運行作為集群服務,客戶端提交的工作流定義:立即或以后處理。
Oozie 工作流由動作節點和控制流的節點組成。
一個操作節點代表一個工作流任務,例如,移動文件到HDFS,運行 MapReduce,Pig 或 Hive 作業,使用 Sqoop 導入數據或 運行Java 編寫程序的 shell 腳本。
一個控制流節點通過允許像條件邏輯結構,不同的分支可以根據較早動作節點的結果,隨后執行動作工作流程。
開始節點,終端節點和錯誤節點屬于這一類節點。
開始節點,?指定的工作流程作業的開始。
結束節點,?作業的結束信號。
錯誤節點,?指定要打印錯誤和相應的錯誤信息的發生。
在執行工作流的結束, HTTP 回調用于通過 Oozie 更新客戶端與工作流狀態。入門或出口,從動作節點還可能會觸發回調。
工作流程圖示例
為什么要使用 Oozie ?
使用Oozie的主要目的是為了管理不同類型的作業在Hadoop系統中處理。
作業之間的依賴關系是由用戶向無環圖的形式指定。Oozie 的消費信息以及在工作流中指定負責其執行的順序正確。這樣,用戶同時管理保存整個工作流程。此外 Oozie 有指定執行特定工作頻率規定。
Oozie的特點
- Oozie 客戶端 API 以及命令行界面可以用來啟動,控制和監視Java應用程序作業
- 使用其Web服務的API可以從任何位置控制作業
- Oozie有規定執行這些計劃定期來運行作業
- Oozie 有規定作業完成后可發送電子郵件通知
from: http://www.yiibai.com/hadoop/
總結
以上是生活随笔為你收集整理的Hadoop教程(五):Flume、Sqoop、Pig、Hive、OOZIE的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hadoop教程(四):理解MapRed
- 下一篇: Deep Learning论文笔记之(一