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

我正在使用带有tez引擎的HDP2.1。数据源是文本文件(80 GB)和Oracle表(15GB)。两者都是结构化数据。我听说Hive将提供结构数据套件和Python映射减少流概念,并且将比hive&Pig具有更高的性能。请澄清。

我正在使用Hive,原因是:

  • 需要基于一列将这两个源结合在一起。
  • 使用ORC格式表存储联接结果,因为数据量很大
  • 文本文件名将用于生成一个输出列,并且已使用虚拟列概念input__file__name字段执行了该操作。
  • 加入后,需要在每一行上执行一些算术运算,并通过python UDF进行操作

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

    我的问题是:

    1)我听说Java Mapreduce总是更快。 Python Map也会减少流媒体概念吗?

    2)我可以在Python中实现上述所有功能,例如连接,文本文件名的检索,压缩数据流(如ORC),因为数量很大吗?

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

    提前致谢。

    最佳答案

  • Python Map Reduce或任何使用Hadoop Streaming接口(interface)的操作都可能较慢。这是由于通过stdin和stdout传递数据的开销以及流API使用者(在您的情况下为python)的实现所造成的。 Hive和Pig中的Python UDF执行相同的操作。
  • 您可能不想在Python端将数据流压缩到ORC中。您将使用Python的ORC库,我不确定它们是否可用。如果让Python返回序列化的对象,而Hadoop减少压缩和存储为ORC(Python作为用于计算的UDF)的步骤,则会更容易
  • 是的。 Pig和Python具有一个不错的程序接口(interface),您可以在其中编写python脚本来动态生成Pig逻辑并并行提交。查找在Python中嵌入Pig Latin。它足够强大,可以定义Python UDFS,并让Pig进行整体抽象和作业优化。 Pig会进行惰性评估,因此在有多个连接或多个转换的情况下,它可以在优化整个管道方面表现出相当不错的性能。

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

    关于python - 哪一个将文本文件和oracle表作为源,可以提供性能最佳的Hive或Pig或Python Mapreduce?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29552853/

    10-09 15:22
    查看更多