翻譯自:
這篇文章討論了pig和hive的特性。
開發者通常處於選擇滿足業務需求的技術體系。 在hadoop體系中,pig和hive很相似,並能給出幾乎相同的結果,但是那種技術更適合特殊的業務場景了?這裡列出了pig和hive的一些對比。
pig and hive:
流型別:
pig是過程式資料流語言。過程式語言通常按照一步一步的執行方式去編寫,你能夠控制和優化每一步。
hive更像sql,因此,它是宣告式語言,你要指定需要做什麼而不是怎麼做。hive依靠自己的優化器,因此hive中優化是比較難的。
易用性:
pig擁有新而不同的語法,需要額外的時間去學習。
hive更像sql,開發者會更興奮的去使用hive.
一般場景:
推薦程式開發者使用pig。主要原因是它計算高效,當你的查詢有大量的join和filter時,pig更合適。
hive更多的用於分析,它遵循hadoop和datawarehouse一些規則。一般更傾向使用hive產生報表。如果你的查詢join和filters比較少可以繼續使用hive,相反,如果查詢擁有很多join,hive的效能也許會降低。
資料型別:
pig能高效處理結構化和非結構化資料。
hive能高效的處理結構化資料。
中間層:
pig使用變數表示資料,當要儲存中間結果,可以很容易的用變數存起來並在以後引用。
hive使用表表示資料,儲存中間結果比較困難,需要建立乙個表,並從其他的表插入進去。因此,呈現乙個複雜的查詢時,可能需要幾百行的**。
除錯方式:
pig可以使用本地模式除錯。
hive使用本來模式除錯比較複雜並且很費時。
擴充套件性:
pig中udf很容易。
hive中udf相對麻煩。
維護性:
pig比hive差一點。
hive比較簡單。
永續性:
pig中可能不會保留變數的值,每一次你都需要重新執行pig**重新獲取變數值。
hive中即使退出當前會話外部表依然存在,因為外部表依然指向hdfs檔案。
pig開發需要更多的時間,更多的依賴對pig的熟悉度。
sql語句,開發時間很少。
相容性:
rdbms與pig相容有點複雜,因為pig的語法完全不同。
大部分在rdbms中的sql可以在hive中執行,只有少數需要修改。
資料量:
pig處理大資料很高效。
hive有時會記憶體洩露和不靠譜的效能,然而,有一些引數可以進行調整和定位問題。
巨頭支援:
pig:yahoo,twitter, linkedin
hive: facebook