Hive的优势在于其基于HDFS上的数据系统模式而设计完成。其能够在各可接受分区内容纳大量数据,但却不适合利用大量分区分别容纳少量数据。毕竟分区的存在意义在于加快特定数据查询速度,而不需要对整体数据集进行操作。分区数量的减少,意味着我们能够实现最低负载并最大程度提升集群资源利用率。
何时使用Pig
Apache Pig的胃口可以用“毫不挑食”来形容,其能够消费各种数据类型,包括结构化、半结构化以及非结构化。与Hive不同,Pig不会使用任何相关metastore,但却能够利用Hive中的Hcatalog。事实上,Pig的设计初衷正是为了立足于大规模数据集执行复杂的可扩展操作,因为其能够随时随地进行自我优化。尽管Pig看起来采用多级脚本结构,但其各项内部操作都会在执行时得到优化,这就显著减少了数据的实际扫描次数。
下面我们仍然以10000个分区为例,考虑其在Pig中的处理效果。在这种情况下,由于不涉及metastore,因此分区概念完全不会限制Pig的执行。要使用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