【问题标题】:Which will give the best performance Hive or Pig or Python Mapreduce with text file and oracle table as source?以文本文件和 oracle 表为源的 Hive 或 Pig 或 Python Mapreduce 哪个性能最好?
【发布时间】:2015-04-10 03:30:58
【问题描述】:

我有以下要求,但对选择哪一个以获得高性能感到困惑。我不是Java开发人员。我对 Hive、Pig 和 Python 感到满意。

我正在使用带有 tez 引擎的 HDP2.1。数据源是文本文件(80 GB)和 Oracle 表(15 GB)。两者都是结构化数据。我听说 Hive 将适用于结构数据,Python map reduce 流概念也将具有比 hive 和 Pig 更高的性能。请澄清。

我正在使用 Hive,原因是:

  • 需要基于一列连接这两个来源。
  • 由于数据量巨大,使用ORC格式的表来存储join结果
  • 文本文件名将用于生成一个输出列,并已使用虚拟列概念 input__file__name 字段执行。
  • 加入后需要对每一行进行一些算术运算,并通过 python UDF 进行

现在,使用 Hive 和 Python UDF 的 4 节点集群,从数据复制到 HDFS 到最终结果的完整执行时间需要 2.30 小时。

我的问题是:

1) 我听说 Java Mapreduce 总是更快。 Python Map reduce 流概念是否也是如此?

2) 我可以在Python中实现以上所有功能,例如join,检索文本文件名,ORC压缩数据流,因为体积很大?

3) Pig 加入会比 Hive 更好吗?如果是,我们可以在 Pig 中获取输入文本文件名以生成输出列吗?

提前致谢。

【问题讨论】:

    标签: python hadoop mapreduce hive apache-pig


    【解决方案1】:
    1. Python Map Reduce 或任何使用 Hadoop 流接口的东西很可能会更慢。这是由于通过 stdin 和 stdout 传递数据的开销以及流 API 使用者的实现(在您的情况下为 python)。 Hive 和 Pig 中的 Python UDF 做同样的事情。

    2. 您可能不想在 Python 端将数据流压缩到 ORC 中。您将使用 Python 的 ORC 库,我不确定它们是否可用。如果您让 Python 返回您的序列化对象并且 Hadoop 减少步骤以压缩和存储为 ORC(Python 作为计算的 UDF)会更容易

    3. 是的。 Pig 和 Python 有一些不错的编程接口,您可以在其中编写 python 脚本来动态生成 Pig Logic 并并行提交。查找在 Python 中嵌入 Pig Latin。它足够健壮,可以定义 Python UDFS 并让 Pig 进行整体抽象和作业优化。 Pig 会进行惰性评估,因此在多个连接或多个转换的情况下,它可以在优化整个管道时表现出相当好的性能。

    你说的是 HDP 2.1。你看过 Spark 吗?如果性能对您很重要,并且查看看起来并不大的数据集大小,您会期望整体管道执行速度比 Hadoop 的本机 MR 引擎快很多倍

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多