在本教程中,我們將討論 Pig & Hive
在Map Reduce框架,需要的程序?qū)⑵滢D(zhuǎn)化為一系列 Map 和 Reduce階段。 但是,這不是一種編程模型,它被數(shù)據(jù)分析所熟悉。因此,為了彌補這一差距,一個抽象概念叫 Pig 建立在 Hadoop 之上。
Pig是一種高級編程語言,分析大數(shù)據(jù)集非常有用。 Pig 是雅虎努力開發(fā)的結(jié)果
Pig 使人們能夠更專注于分析大量數(shù)據(jù)集和花更少的時間來寫map-reduce程序。
類似豬吃東西,Pig 編程語言的目的是可以在任何類型的數(shù)據(jù)工作。
Pig 由兩部分組成:
Pig Latin 程序由一系列操作或變換應(yīng)用到輸入數(shù)據(jù),以產(chǎn)生輸出。這些操作描述被翻譯成可執(zhí)行到數(shù)據(jù)流,由 Pig 環(huán)境執(zhí)行。下面,這些轉(zhuǎn)換的結(jié)果是一系列的 MapReduce 作業(yè),程序員是不知道的。所以,在某種程度上,Pig 允許程序員關(guān)注數(shù)據(jù),而不是執(zhí)行過程。
Pig Latin 是一種相對硬挺的語言,它采用熟悉的關(guān)鍵字來處理數(shù)據(jù),例如,Join, Group 和 Filter。


執(zhí)行模式:
Pig 有兩種執(zhí)行模式:
在某種程度上數(shù)據(jù)集收集的大小并在行業(yè)用于商業(yè)智能分析正在增長,它使傳統(tǒng)的數(shù)據(jù)倉庫解決方案更加昂貴。HADOOP與MapReduce框架,被用于大型數(shù)據(jù)集分析的替代解決方案。雖然,Hadoop 地龐大的數(shù)據(jù)集上工作證明是非常有用的,MapReduce框架是非常低級別并且它需要程序員編寫自定義程序,這導(dǎo)致難以維護(hù)和重用。 Hive 就是為程序員設(shè)計的。
Hive 演變?yōu)榛贖adoop的Map-Reduce 框架之上的數(shù)據(jù)倉庫解決方案。
Hive 提供了類似于SQL的聲明性語言,叫作:HiveQL, 用于表達(dá)的查詢。使用 Hive-SQL,用戶能夠非常容易地進(jìn)行數(shù)據(jù)分析。
Hive 引擎編譯這些查詢到 map-reduce作業(yè)中并在 Hadoop 上執(zhí)行。此外,自定義 map-reduce 腳本,也可以插入查詢。Hive運行存儲在表中,它由基本數(shù)據(jù)類型,如數(shù)組和映射集合的數(shù)據(jù)類型的數(shù)據(jù)。
配置單元帶有一個命令行shell接口,可用于創(chuàng)建表并執(zhí)行查詢。
Hive 查詢語言是類似于SQL,它支持子查詢。通過Hive查詢語言,可以使用 MapReduce 跨Hive 表連接。它有類似函數(shù)簡單的SQL支持- CONCAT, SUBSTR, ROUND 等等, 聚合函數(shù) - SUM, COUNT, MAX etc。它還支持GROUP BY和SORT BY子句。 另外,也可以在配置單元查詢語言編寫用戶定義的功能。
MapReduce,Pig 和 Hive 的比較
|
Sqoop |
Flume |
HDFS |
|
Sqoop用于從結(jié)構(gòu)化數(shù)據(jù)源,例如,RDBMS導(dǎo)入數(shù)據(jù) |
Flume 用于移動批量流數(shù)據(jù)到HDFS |
HDFS使用 Hadoop 生態(tài)系統(tǒng)存儲數(shù)據(jù)的分布式文件系統(tǒng) |
|
Sqoop具有連接器的體系結(jié)構(gòu)。連接器知道如何連接到相應(yīng)的數(shù)據(jù)源并獲取數(shù)據(jù) |
Flume 有一個基于代理的架構(gòu)。這里寫入代碼(這被稱為“代理”),這需要處理取出數(shù)據(jù) |
HDFS具有分布式體系結(jié)構(gòu),數(shù)據(jù)被分布在多個數(shù)據(jù)節(jié)點 |
|
HDFS 使用 Sqoop 將數(shù)據(jù)導(dǎo)出到目的地 |
通過零個或更多個通道將數(shù)據(jù)流給HDFS |
HDFS是用于將數(shù)據(jù)存儲到最終目的地 |
|
Sqoop數(shù)據(jù)負(fù)載不事件驅(qū)動 |
Flume 數(shù)據(jù)負(fù)載可通過事件驅(qū)動 |
HDFS存儲通過任何方式提供給它的數(shù)據(jù) |
|
為了從結(jié)構(gòu)化數(shù)據(jù)源導(dǎo)入數(shù)據(jù),人們必須只使用Sqoop,因為它的連接器知道如何與結(jié)構(gòu)化數(shù)據(jù)源進(jìn)行交互并從中獲取數(shù)據(jù) |
為了加載流數(shù)據(jù),如微博產(chǎn)生的推文?;蛘叩卿沇eb服務(wù)器的文件,F(xiàn)lume 應(yīng)都可以使用。Flume 代理是專門為獲取流數(shù)據(jù)而建立的。 |
HDFS擁有自己的內(nèi)置shell命令將數(shù)據(jù)存儲。HDFS不能用于導(dǎo)入結(jié)構(gòu)化或流數(shù)據(jù) |