翻译自:http://www.aptibook.com/Articles/Pig-and-hive-advantages-disadvantages-features



这篇文章讨论了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