1. 程式人生 > >Hadoop生態中:Hive、Pig、HBase 關係與區別

Hadoop生態中:Hive、Pig、HBase 關係與區別

Pig

一種操作hadoop的輕量級指令碼語言,最初又雅虎公司推出,不過現在正在走下坡路了。當初雅虎自己慢慢退出pig的維護之後將它開源貢獻到開源社群由所有愛好者來維護。不過現在還是有些公司在用,不過我認為與其使用pig不如使用hive。:)

Pig是一種資料流語言,用來快速輕鬆的處理巨大的資料。

Pig包含兩個部分:Pig Interface,Pig Latin。

Pig可以非常方便的處理HDFS和HBase的資料,和Hive一樣,Pig可以非常高效的處理其需要做的,通過直接操作Pig查詢可以節省大量的勞動和時間。當你想在你的資料上做一些轉換,並且不想編寫MapReduce jobs就可以用Pig.

Pig是一種程式語言,它簡化了Hadoop常見的工作任務。Pig可載入資料、表達轉換資料以及儲存最終結果。Pig內建的操作使得半結構化資料變得有意義(如日誌檔案)。同時Pig可擴充套件使用Java中新增的自定義資料型別並支援資料轉換。

Hive

不想用程式語言開發MapReduce的朋友比如DB們,熟悉SQL的朋友可以使用Hive開離線的進行資料處理與分析工作。

注意Hive現在適合在離線下進行資料的操作,就是說不適合在掛在真實的生產環境中進行實時的線上查詢或操作,因為一個字“慢”。相反

起源於FaceBook,Hive在Hadoop中扮演資料倉庫的角色。建立在Hadoop叢集的最頂層,對儲存在Hadoop群上的資料提供類SQL的介面進行操作。你可以用 HiveQL進行select,join,等等操作。

如果你有資料倉庫的需求並且你擅長寫SQL並且不想寫MapReduce jobs就可以用Hive代替。

Hive在Hadoop中扮演資料倉庫的角色。Hive新增資料的結構在HDFS(hive superimposes structure on data in HDFS),並允許使用類似於SQL語法進行資料查詢。與Pig一樣,Hive的核心功能是可擴充套件的。

HBase

HBase作為面向列的資料庫執行在HDFS之上,HDFS缺乏隨即讀寫操作,HBase正是為此而出現。HBase以Google BigTable為藍本,以鍵值對的形式儲存。專案的目標就是快速在主機內數十億行資料中定位所需的資料並訪問它。

HBase是一個數據庫,一個NoSql的資料庫,像其他資料庫一樣提供隨即讀寫功能,Hadoop不能滿足實時需要,HBase正可以滿足。如果你需要實時訪問一些資料,就把它存入HBase。

你可以用Hadoop作為靜態資料倉庫,HBase作為資料儲存,放那些進行一些操作會改變的資料。

Hive更適合於資料倉庫的任務,Hive主要用於靜態的結構以及需要經常分析的工作。Hive與SQL相似促使其成為Hadoop與其他BI工具結合的理想交集。Pig賦予開發人員在大資料集領域更多的靈活性,並允許開發簡潔的指令碼用於轉換資料流以便嵌入到較大的應用程式。Pig相比Hive相對輕量,它主要的優勢是相比於直接使用Hadoop Java APIs可大幅削減程式碼量。

Pig VS Hive

Hive更適合於資料倉庫的任務,Hive主要用於靜態的結構以及需要經常分析的工作。Hive與SQL相似促使 其成為Hadoop與其他BI工具結合的理想交集。

Pig賦予開發人員在大資料集領域更多的靈活性,並允許開發簡潔的指令碼用於轉換資料流以便嵌入到較大的 應用程式。

Pig相比Hive相對輕量,它主要的優勢是相比於直接使用Hadoop Java APIs可大幅削減程式碼量。正因為如此,Pig仍然是吸引大量的軟體開發人員。

Hive和Pig都可以與HBase組合使用,Hive和Pig還為HBase提供了高層語言支援,使得在HBase上進行資料統計處理變的非常簡單

Hive VS HBase

Hive是建立在Hadoop之上為了減少MapReduce jobs編寫工作的批處理系統,HBase是為了支援彌補Hadoop對實時操作的缺陷的專案 。

想象你在操作RMDB資料庫,如果是全表掃描,就用Hive+Hadoop,如果是索引訪問,就用HBase+Hadoop 。

Hive query就是MapReduce jobs可以從5分鐘到數小時不止,HBase是非常高效的,肯定比Hive高效的多。

經過Pig Latin的轉換後變成了一道MapReduce的作業,通過MapReduce多個執行緒,程序或者獨立系統並行執行處理的結果集進行分類和歸納。Map() 和 Reduce() 兩個函式會並行執行,即使不是在同一的系統的同一時刻也在同時執行一套任務,當所有的處理都完成之後,結果將被排序,格式化,並且儲存到一個檔案。Pig利用MapReduce將計算分成兩個階段,第一個階段分解成為小塊並且分佈到每一個儲存資料的節點上進行執行,對計算的壓力進行分散,第二個階段聚合第一個階段執行的這些結果,這樣可以達到非常高的吞吐量,通過不多的程式碼和工作量就能夠驅動上千臺機器平行計算,充分的利用計算機的資源,打消執行中的瓶頸。

也就是說,Pig最大的作用就是對mapreduce演算法(框架)實現了一套shell指令碼 ,類似我們通常熟悉的SQL語句,在Pig中稱之為Pig Latin,在這套指令碼中我們可以對加載出來的資料進行排序、過濾、求和、分組(group by)、關聯(Joining),Pig也可以由使用者自定義一些函式對資料集進行操作,也就是傳說中的UDF(user-defined functions)。