勝還是平?PigvsHive!!!
這篇文章討論了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有時會內存洩露和不靠譜的性能,然而,有一些參數可以進行調整和定位問題。