- Apache Pig 教程
- Apache Pig - 首頁
- Apache Pig 簡介
- Apache Pig - 概述
- Apache Pig - 架構
- Apache Pig 環境
- Apache Pig - 安裝
- Apache Pig - 執行
- Apache Pig - Grunt Shell
- Pig Latin
- Pig Latin - 基礎
- 載入 & 儲存運算子
- Apache Pig - 讀取資料
- Apache Pig - 儲存資料
- 診斷運算子
- Apache Pig - 診斷運算子
- Apache Pig - Describe 運算子
- Apache Pig - Explain 運算子
- Apache Pig - Illustrate 運算子
- 分組 & 連線
- Apache Pig - Group 運算子
- Apache Pig - Cogroup 運算子
- Apache Pig - Join 運算子
- Apache Pig - Cross 運算子
- Pig Latin 內建函式
- Apache Pig - Eval 函式
- 載入 & 儲存函式
- Apache Pig - Bag & Tuple 函式
- Apache Pig - 字串函式
- Apache Pig - 日期時間函式
- Apache Pig - 數學函式
- Apache Pig 有用資源
- Apache Pig - 快速指南
- Apache Pig - 有用資源
- Apache Pig - 討論
Apache Pig - 架構
在 Hadoop 中使用 Pig 分析資料的語言稱為 Pig Latin。它是一種高階資料處理語言,提供豐富的的資料型別和運算子來對資料執行各種操作。
為了執行特定的任務,使用 Pig 的程式設計師需要使用 Pig Latin 語言編寫 Pig 指令碼,並使用任何執行機制(Grunt Shell、UDF、嵌入式)執行它們。執行後,這些指令碼將經過 Pig 框架應用的一系列轉換,以產生所需的輸出。
在內部,Apache Pig 將這些指令碼轉換為一系列 MapReduce 作業,從而簡化了程式設計師的工作。Apache Pig 的架構如下所示。
Apache Pig 元件
如圖所示,Apache Pig 框架中有多個元件。讓我們看一下主要元件。
解析器
最初,Pig 指令碼由解析器處理。它檢查指令碼的語法,進行型別檢查和其他雜項檢查。解析器的輸出將是 DAG(有向無環圖),它表示 Pig Latin 語句和邏輯運算子。
在 DAG 中,指令碼的邏輯運算子表示為節點,資料流表示為邊。
最佳化器
邏輯計劃(DAG)傳遞給邏輯最佳化器,後者執行邏輯最佳化,例如投影和下推。
編譯器
編譯器將最佳化的邏輯計劃編譯成一系列 MapReduce 作業。
執行引擎
最後,MapReduce 作業按排序順序提交到 Hadoop。最後,這些 MapReduce 作業在 Hadoop 上執行,產生所需的結果。
Pig Latin 資料模型
Pig Latin 的資料模型是完全巢狀的,它允許複雜非原子資料型別,例如 map 和 tuple。以下是 Pig Latin 資料模型的圖示。
原子
Pig Latin 中的任何單個值,無論其資料型別如何,都稱為 原子。它儲存為字串,可以用作字串和數字。int、long、float、double、chararray 和 bytearray 是 Pig 的原子值。資料片段或簡單的原子值稱為 欄位。
示例 - ‘raja’ 或 ‘30’
元組
由一組有序欄位組成的記錄稱為元組,欄位可以是任何型別。元組類似於 RDBMS 表中的一行。
示例 - (Raja, 30)
包
包是一組無序的元組。換句話說,元組的集合(非唯一)稱為包。每個元組可以包含任意數量的欄位(靈活模式)。包由 ‘{}’ 表示。它類似於 RDBMS 中的表,但與 RDBMS 中的表不同,不必每個元組都包含相同數量的欄位,也不必相同位置(列)的欄位具有相同的型別。
示例 - {(Raja, 30), (Mohammad, 45)}
包可以是關係中的一個欄位;在這種情況下,它被稱為 內部包。
示例 - {Raja, 30, {9848022338, raja@gmail.com,}}
對映
對映(或資料對映)是一組鍵值對。鍵需要為 chararray 型別,並且必須唯一。值可以是任何型別。它由 ‘[]’ 表示
示例 - [name#Raja, age#30]
關係
關係是元組的包。Pig Latin 中的關係是無序的(不能保證元組按任何特定順序處理)。