對比Pig、Hive和SQL,淺看大數據工具之間的差異

【編者按】在筆者看來,語言和工具之爭從來都沒有太大的意義,所謂存在既有道理,如何在場景下做出最合適的選擇才至關重要。本文,DeZyre公司專家Manisha Nandy Mazumder對比了Pig、Hive和SQL的區別,並為讀者淺談了一些選擇標準。

以下為譯文

有人說對於大數據分析來說Hadoop才是炙手可熱的新技術,SQL雖然久經考驗但已經有些過時了。這話說得不錯,但有非常多的項目都用Hadoop作為數據存儲,而以SQL構建前端查詢,這說明Hadoop確實需要一種高級的查詢語言。為了簡化Hadoop的使用,開發人員創造出了類似於SQL的Pig和Hive。而用戶在進行數據分析的時候使用這些工具可以避免Java編碼,但在使用之前很重要的一點是了解工具之間的區別以便在不同的用例中使用最優化的工具。

在現在的大數據時代,開發人員有不少的查詢工具可供選擇。雖然SQL仍然占據著絕對的統治地位,企業對於大數據的興趣使得Apache Pig和Hive這樣的開源語言獲得了不少機會。工欲善其事,必先利其器,選對平台和語言對於數據的提取、處理和分析都起著至關重要的作用。現在日趨流行的一種觀點是隨著大數據產業的發展,對於大數據分析的使用必須得到簡化。只有在處理速度和使用門檻上下功夫大數據分析才能得到更廣泛的使用。

談到大數據,Apache Pig、Apache Hive和SQL是目前比較主流的工具,三者在合適的情況下都能體現出自己的優勢。Pig和Hive、Pig和SQL以及Hive和SQL之間孰優孰劣的爭論永遠不會有結果,因為很難有一種語言可以適用於所有的情況。通過本文,筆者希望能夠為大家提供一些選擇工具和語言的技巧。在此之前我們也會對三者做些簡要介紹。

SQL

SQL陪伴工程師們已經幾十年了,幾乎已經成為了提取數據的標準方法。大數據的出現改變了數據處理和可視化的方式,但SQL對於數據存儲方式的嚴格要求和它聲明式編程的特性使得我們的注意力不能集中在提取數據上面。盡管SQL有著廣泛的應用,大數據的進步對SQL的功能和性能都提出了挑戰。

PIG

SQL工程師們需要這樣一種編程語言:既利於SQL工程師們學習同時又有下面這兩個特點:

1. 避免SQL對數據存儲的要求

2. 能夠輕鬆應對大型數據集

Pig最初是由雅虎在2006年開發的,它很好地解決了上面提到的問題,同時也提供了較好的擴展性和性能優化。Apache Pig對Multi-query的支持減少了數據檢索循環的次數。Pig支持map、tuple和bag這樣的復合數據類型以及常見的數據操作如篩選、排序和聯合查詢。這些優勢讓Pig在全球範圍內都得到了廣泛的應用。Pig簡便的特點也是雅虎和Twitter使用它的原因之一。

HIVE

盡管Pig性能強勁,要使用它開發人員必須掌握SQL之外的新知識,而Hive則與SQL非常相像。盡管Hive查詢語言HQL的命令有所局限,它還是取得了一定的成功。Hive為MapReduce提供了優秀的開源做到,它在分布式數據處理的同時避免了SQL對於數據存儲的局限。

我們介紹的這些數據提取、處理和分析方式都不能完全適用於所有的情況。在做出選擇之前我們要考慮諸如數據存儲方式、編程語言架構以及期望等因素。下面我們就把Pig、Hive和SQL兩兩進行對比以便了解它們各自所適用的情況。

Pig vs SQL

SQL所操作的關係型數據庫速度上較Pig通過PigLatin操作的MapReduce快一些,然而關係型數據庫的數據加載很有挑戰性所以設置比較困難。PigLatin在聲明式執行計劃、ETL流程和管道的修改上則有著優勢。

整體上來看SQL是一門聲明式語言而PigLatin屬於過程式語言。在SQL中我們指定需要完成的任務而在Pig中我們則指定任務完成的方式。Pig腳本其實都是轉換成MapReduce任務來執行的,不過Pig腳本會比對應的MapReduce任務簡短很多所以開發的速度要快上很多。

Hive vs SQL

SQL是一門通用的數據庫語言,大量的事務和分析語句都是由SQL完成的。Hive則是以數據分析為目標所設計的,這意味著雖然Hive缺乏更新和刪除這樣的功能但讀取和處理大量數據的速度會比SQL快得多。所以Hive SQL看起來像SQL但在更新和刪除等功能上兩者還是有很大區別的。雖然有所不同,但如果你有SQL背景的話學習起Hive還是很容易的。不過要注意兩者在構造和語法上的區別否則容易混淆。

現在我們已經對三種數據挖掘語言進行了介紹和對比,接下來就來分析一下三種語言最適用的情況。

1. 什麼時候用Apache Pig

當你需要處理非格式化的分布式數據集時,如果想充分利用自己的SQL基礎,可以選擇Pig。使用Pig你無需自己構建MapReduce任務,有SQL背景的話學習起來比較簡單,開發速度也很快。

2. 什麼時候用Apache Hive

有時我們需要收集一段時間的數據來進行分析,而Hive就是分析歷史數據絕佳的工具。要注意的是數據必須有一定的結構才能充分發揮Hive的功能。用Hive來進行實時分析可能就不是太理想了,因為它不能達到實時分析的速度要求(實時分析可以用HBase,Facebook用的就是HBase)。

3. 什麼時候用SQL

SQL是這三者中最傳統的數據分析手段。隨著用戶需求的改變SQL本身也在進行著更新,所以即便到了今天也不能說SQL過時。對於專業的數據分析師來說SQL當然比Excel強多了但要用它來進行快速的複雜處理和分析還是顯得有點欠缺。如果所進行的分析比較簡單的話SQL仍然是一個非常趁手的工具。它歷史上的廣泛使用和靈活性也使它廣受開發人員歡迎。大部分開發人員都對SQL有所了解所以使用SQL的話開發人員從項目開始的第一天就能有所產出。SQL提供的擴展和優化功能也讓我們能夠根據需求進行定制。

顯然不同的數據沒有一個所有情況都適用的查詢工具,根據自己的需求來選擇不同工具才是正確的方法。

CSDN原創編譯文章,禁止轉載,侵權必究。

閱讀原文


關於作者:
CSDN分享Hadoop、Spark、NoSQL/NewSQL、HBase、Impala、記憶體計算、流計算、機器學習和智能算法等相關大數據觀點,提供雲計算和大數據技術、平台、實踐和產業信息等服務。

微信號:csdnbigdata


推薦閱讀:

》生不出男孩被婆家逼走,獨自養兩個女兒流落街頭,如今她是身價60億的水餃皇后!

》她是中國史上最強女海盜,讓多少洋人感受過被她支配的恐懼!