這篇文章討論了pig和hive的特性,
勝還是平?PigvsHive!!!
。開發(fā)者通常處于選擇滿足業(yè)務(wù)需求的技術(shù)體系。 在hadoop體系中,pig和hive很相似,并能給出幾乎相同的結(jié)果,但是那種技術(shù)更適合特殊的業(yè)務(wù)場(chǎng)景了?這里列出了pig和hive的一些對(duì)比。PIG and Hive:
流類型:
Pig是過程式數(shù)據(jù)流語言。過程式語言通常按照一步一步的執(zhí)行方式去編寫,你能夠控制和優(yōu)化每一步。
Hive更像sql,因此,它是聲明式語言,你要指定需要做什么而不是怎么做。Hive依靠自己的優(yōu)化器,因此hive中優(yōu)化是比較難的。
易用性:
Pig擁有新而不同的語法,需要額外的時(shí)間去學(xué)習(xí)。
Hive更像sql,開發(fā)者會(huì)更興奮的去使用hive.
一般場(chǎng)景:
推薦程序開發(fā)者使用Pig。主要原因是它計(jì)算高效,當(dāng)你的查詢有大量的join和filter時(shí),pig更合適。
Hive更多的用于分析,它遵循Hadoop和DatawareHouse一些規(guī)則。一般更傾向使用Hive產(chǎn)生報(bào)表。如果你的查詢join和filters比較少可以繼續(xù)使用Hive,相反,如果查詢擁有很多join,Hive的性能也許會(huì)降低。
數(shù)據(jù)類型:
Pig能高效處理結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)。
Hive能高效的處理結(jié)構(gòu)化數(shù)據(jù)。
中間層:
Pig使用變量表示數(shù)據(jù),當(dāng)要存儲(chǔ)中間結(jié)果,可以很容易的用變量存起來并在以后引用,
電腦資料
《勝還是平?PigvsHive!!!》(http://www.msguai.com)。Hive使用表表示數(shù)據(jù),存儲(chǔ)中間結(jié)果比較困難,需要?jiǎng)?chuàng)建一個(gè)表,并從其他的表插入進(jìn)去。因此,呈現(xiàn)一個(gè)復(fù)雜的查詢時(shí),可能需要幾百行的代碼。
調(diào)試方式:
Pig可以使用本地模式調(diào)試。
Hive使用本來模式調(diào)試比較復(fù)雜并且很費(fèi)時(shí)。
擴(kuò)展性:
Pig中UDF很容易。
Hive中UDF相對(duì)麻煩。
維護(hù)性:
Pig比Hive差一點(diǎn)。
Hive比較簡單。
持久性:
Pig中可能不會(huì)保留變量的值,每一次你都需要重新執(zhí)行pig代碼重新獲取變量值。
Hive中即使退出當(dāng)前會(huì)話外部表依然存在,因?yàn)橥獠勘硪廊恢赶騂DFS文件。
開發(fā)時(shí)間:
pig開發(fā)需要更多的時(shí)間,更多的依賴對(duì)pig的熟悉度。
SQL語句,開發(fā)時(shí)間很少。
兼容性:
RDBMS與Pig兼容有點(diǎn)復(fù)雜,因?yàn)閜ig的語法完全不同。
大部分在RDBMS中的sql可以在Hive中執(zhí)行,只有少數(shù)需要修改。
數(shù)據(jù)量:
Pig處理大數(shù)據(jù)很高效。
Hive有時(shí)會(huì)內(nèi)存泄露和不靠譜的性能,然而,有一些參數(shù)可以進(jìn)行調(diào)整和定位問題。