在 HDInsight 上搭配 Apache Hadoop 使用 Apache Pig

瞭解如何搭配 HDInsight 使用 Apache Pig

Apache Pig 是使用稱為 Pig Latin 的程序語言,為 Apache Hadoop 建立程式的平臺。 Pig 是 Java 的替代方案,可用來建立 MapReduce 解決方案,並隨附於 Azure HDInsight 中。 使用下表來探索 Pig 可與 HDInsight 搭配使用的各種方式:

為何使用 Apache Pig

在Hadoop中使用 MapReduce 處理數據的其中一個挑戰,就是只使用對應和 reduce 函式來實作您的處理邏輯。 針對複雜的處理,您通常必須將處理分成多個已鏈結在一起的 MapReduce 作業,以達到所需的結果。

Pig 可讓您將處理定義為數據流經過的一系列轉換,以產生所需的輸出。

Pig Latin 語言可讓您描述從原始輸入到一或多個轉換的數據流,以產生所需的輸出。 Pig Latin 程式遵循下列一般模式:

  • 載入:讀取要從文件系統操作的數據。

  • 轉換:操作數據。

  • 傾印或儲存:將數據輸出到畫面或儲存以供處理。

使用者定義的函式

Pig Latin 也支援使用者定義函式 (UDF),其可讓您叫用外部元件,以實作難以在 Pig Latin 中建立模型的邏輯。

如需 Pig Latin 的詳細資訊,請參閱 Pig Latin 參考手冊 1Pig Latin 參考手冊 2

範例數據

HDInsight 提供儲存在 /example/data/HdiSamples 目錄中的各種範例數據集。 這些目錄位於叢集的預設記憶體中。 本檔中的 Pig 範例會使用 中的/example/data/sample.loglog4j 檔案。

檔案內的每一個記錄都包含一 [LOG LEVEL] 行欄位,其中包含顯示類型和嚴重性欄位的欄位,例如:

2012-02-03 20:26:41 SampleClass3 [ERROR] verbose detail for id 1527353937

在上一個範例中,記錄層級為 ERROR。

注意

您也可以使用 Apache Log4j 記錄工具來產生 log4j 檔案,然後將該檔案上傳至 Blob。 如需相關指示,請參閱 將數據上傳至 HDInsight 。 如需 Azure 記憶體中 Blob 如何搭配 HDInsight 使用的詳細資訊,請參閱搭配 HDInsight 使用 Azure Blob 儲存體。

範例作業

下列 Pig Latin 作業會從 HDInsight 叢集的預設記憶體載入 sample.log 檔案。 然後,它會執行一系列轉換,以計算輸入數據中每個記錄層級發生的次數。 結果會寫入 STDOUT。

LOGS = LOAD 'wasb:///example/data/sample.log';
LEVELS = foreach LOGS generate REGEX_EXTRACT($0, '(TRACE|DEBUG|INFO|WARN|ERROR|FATAL)', 1)  as LOGLEVEL;
FILTEREDLEVELS = FILTER LEVELS by LOGLEVEL is not null;
GROUPEDLEVELS = GROUP FILTEREDLEVELS by LOGLEVEL;
FREQUENCIES = foreach GROUPEDLEVELS generate group as LOGLEVEL, COUNT(FILTEREDLEVELS.LOGLEVEL) as COUNT;
RESULT = order FREQUENCIES by COUNT desc;
DUMP RESULT;

下圖顯示每個轉換對數據的用途摘要。

Graphical representation of the transformations.

執行 Pig Latin 作業

HDInsight 可以使用各種方法來執行 Pig Latin 作業。 使用下表來決定哪一種方法適合您,然後遵循逐步解說的連結。

Pig 和 SQL Server Integration Services

您可以使用 SQL Server Integration Services (SSIS) 來執行 Pig 作業。 適用於 SSIS 的 Azure Feature Pack 提供下列元件,可搭配 HDInsight 上的 Pig 作業使用。

在這裡深入瞭解適用於 SSIS 的 Azure Feature Pack。

下一步

既然您已瞭解如何搭配 HDInsight 使用 Pig,請使用下列連結來探索使用 Azure HDInsight 的其他方式。