Hive的優(yōu)勢在于其基于HDFS上的數(shù)據(jù)系統(tǒng)模式而設(shè)計完成。其能夠在各可接受分區(qū)內(nèi)容納大量數(shù)據(jù),但卻不適合利用大量分區(qū)分別容納少量數(shù)據(jù)。畢竟分區(qū)的存在意義在于加快特定數(shù)據(jù)查詢速度,而不需要對整體數(shù)據(jù)集進行操作。分區(qū)數(shù)量的減少,意味著我們能夠?qū)崿F(xiàn)最低負載并最大程度提升集群資源利用率。
何時使用Pig
Apache Pig的胃口可以用“毫不挑食”來形容,其能夠消費各種數(shù)據(jù)類型,包括結(jié)構(gòu)化、半結(jié)構(gòu)化以及非結(jié)構(gòu)化。與Hive不同,Pig不會使用任何相關(guān)metastore,但卻能夠利用Hive中的Hcatalog。事實上,Pig的設(shè)計初衷正是為了立足于大規(guī)模數(shù)據(jù)集執(zhí)行復(fù)雜的可擴展操作,因為其能夠隨時隨地進行自我優(yōu)化。盡管Pig看起來采用多級腳本結(jié)構(gòu),但其各項內(nèi)部操作都會在執(zhí)行時得到優(yōu)化,這就顯著減少了數(shù)據(jù)的實際掃描次數(shù)。
下面我們?nèi)匀灰?0000個分區(qū)為例,考慮其在Pig中的處理效果。在這種情況下,由于不涉及metastore,因此分區(qū)概念完全不會限制Pig的執(zhí)行。要使用Hive中的Hcatalog,我們可以在Pig中運用以下腳本(這里我們使用的是Pig 0.15版本):
/* myscript.pig */
A = LOAD 'tablename' USING org.apache.hive.hcatalog.pig.HCatLoader();
-- date is a partition column; age is not