1. 程式人生 > >Pig Hive對比

Pig Hive對比

Pig Latin:資料流程式語言

一個Pig Latin程式是相對於輸入的一步步操作。其中每一步都是對資料的一個簡單的變換。

用Pig Latin程式設計更像在RDBMS中“查詢規劃器”(query planner)這一層對資料進行操作,查詢規劃器決定了如何將描述型語句轉化為一系列系統化執行的步驟。

Pig對它所處理的資料要求則寬鬆得多;可以在執行時定義模式,而且這是可選的。本質上,Pig可以在任何來源的元組上進行操作。(當然資料來源必須支援並行的讀操作,例如存放在多個檔案中)。它使用UDF(User define feature)從原始格式中讀取元組。最常用的輸入格式使用製表符分隔的欄位組成的文字檔案。Pig為這種輸入提供了內建載入函式。和傳統的資料庫不同,Pig並不提供專門的資料匯入過程將資料載入到RDBMS。在第一步處理中,資料是從檔案系統(通常是HDFS中載入的)。

Pig對複雜、巢狀資料結構的支援也使其不同於處理平面資料型別的SQL。Pig的語言能和UDF及流式操作緊密整合。它的這一能力及其巢狀資料結構,使Pig Latin比大多數SQL的變種具有更強的定製能力。

不支援線上和低時延查詢,不支援事務和索引。

不支援隨機讀和隨機寫。

和MapReduce一樣,所有的寫都是批量的,流式的寫操作。

Pig相比Hive相對輕量,它主要的優勢是相比於直接使用Hadoop Java API可大幅減少開發量。

SQL:描述性程式語言

SQL是一個約束的集合,這些約束結合在一起,定義了輸出。

RDBMS把資料儲存在嚴格定義了模式的表內。

HIVE

HIVE介於Pig和傳統的RDBMS之間,和Pig一樣,Hive也被設計為HDFS作為儲存,但是他們之間有著顯著的區別。Hive的查詢語言HiveQL,是基於SQL的。任何熟悉SQL的人都可以輕鬆使用HiveQL寫查詢。和RDBMS相同。Hive要求所有資料必須儲存在表中,表必須有模式,而模式由Hive進行管理。但是Hive允許為預先存在於HDFS的資料關聯一個模式。所以,資料的載入步驟是可選的。

和Pig一樣,Hive也不支援低時延查詢。