性能:猪与蜂巢

Posted

技术标签:

【中文标题】性能:猪与蜂巢【英文标题】:Performance: Pig vs Hive 【发布时间】:2013-07-02 09:28:43 【问题描述】:

我发现 Pig 和 Hive 之间存在一些(显着的)性能差异(在实时运行时间和 CPU 时间方面),并且正在寻找解决这些差异的方法。我使用了这两种语言的解释功能(即 Hive: EXPLAIN 关键字,Pig: pig -e 'explain -script explain.pig')来对比和比较生成的语法树、逻辑、物理和 map-reduce 计划。然而,两者似乎都做同样的事情。然而,作业跟踪器显示启动的 map 和 reduce 任务的数量存在差异(因此我确保两者使用相同数量的 map 和 reduce 任务并且性能差异仍然存在)。因此,我的问题是:我可以通过哪些其他方式分析正在发生的事情(可能在较低级别/字节码级别)?

编辑:我正在通过 TPC 运行 TPC-H 基准测试(可用 https://issues.apache.org/jira/browse/PIG-2397 和 https://issues.apache.org/jira/browse/HIVE-600 )。然而,更简单的脚本也显示出相当大的性能差异。例如:

SELECT (dataset.age * dataset.gpa + 3) AS F1,
  (dataset.age/dataset.gpa - 1.5) AS F2 
  FROM  dataset
  WHERE dataset.gpa > 0;

我仍然需要全面评估 TPC-H 基准(稍后会更新),但是更简单的脚本的结果在本文档中有详细说明:https://www.dropbox.com/s/16u3kx852nu6waw/output.pdf

(jpg:http://i.imgur.com/1j1rCWS.jpg)

【问题讨论】:

你能展示你用来测试的脚本和SQL吗? Hive中表数据集中的分区设置如何? 对不起,你是什么意思?我不太明白(我对 Hadoop 很陌生)/Hive 您能否发布您所看到的性能差异以及您正在处理的数据量的指标? 【参考方案1】:

我之前读过一些 Pig 和 Hive 的源代码。我可以分享一些意见。

由于我关注的是 Join 实现,所以我可以在这里提供 Pig 和 Hive 的 Join 实现的一些细节。 Hive 的 Join 实现效率低于 Pig。我不知道为什么 Hive 需要在 Join 实现中创建这么多对象(这样的操作非常慢,应该避免)。我认为这就是 Hive 的加入速度比 Pig 慢的原因。有兴趣的可以自行查看CommonJoinOperator代码。所以我猜 Pig 通常效率更高,因为它的代码质量高。

【讨论】:

谢谢!我对此很好奇——这似乎很奇怪。我本来希望两者都能产生相似的性能。你会推荐我查看代码库的哪些其他部分? 那么您想了解更多的实施细节吗?猪和蜂巢? 是的。特别是关于性能差异。我查看了文档(我猜这是起点)。但也许你有什么有用的资源/链接/文章推荐? 我一直在查看 Pig 代码库 - 我应该查看哪个包以进行相应的连接操作? 您好,我在gist.github.com/zsxwing/5924191 中粘贴了一些重要的课程。小提示:使用“explain”查找操作关键字,在源码中搜索找到对应的类。

以上是关于性能:猪与蜂巢的主要内容,如果未能解决你的问题,请参考以下文章

哪个蜂巢表提供更好的性能?

构建高性能微服务架构的实践

在 Hive 中使用 UDF 连接两个大表 - 性能太慢

Hive:在连接之前在子表中使用 where 子句是不是会提高性能?

蜂巢HIVECHAIN2018战略升级蜂巢商学院大会饕餮盛宴

蜂巢错误:在蜂巢查询中指定字符串