以文本文件和oracle表作为源代码的hive、pig或PythonMapReduce哪一个能提供最好的性能?

zqdjd7g9  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(325)

我有下面的要求,不知道该选择哪一个高性能。我不是java开发者。我喜欢Hive,Pig和Python。
我使用的是hdp2.1和tez引擎。数据源是文本文件(80 gb)和oracle表(15 gb)。两者都是结构化数据。我听说hive将适合结构数据,pythonmap-reduce流概念也将比hive&pig具有更高的性能。请澄清。
我使用Hive,原因是:
需要基于一个列连接这两个源。
由于数据量很大,所以使用orc格式的表来存储连接结果
文本文件名将用于生成一个输出列,该输出列已使用虚拟列概念输入文件名字段执行。
在join之后,需要对每一行执行一些算术运算,并通过python udf执行这些运算
现在,使用hive和python udf的4节点集群,从数据复制到hdfs到最终结果的完整执行时间需要2.30小时。
我的问题是:
1) 我听说java mapreduce总是更快。pythonmap-reduce流概念也是这样吗?
2) 我可以在python中实现上述所有功能吗?比如join,检索文本文件名,压缩数据流,比如orc,因为体积很大?
3) Pig会比 hive 好吗?如果是,我们可以在pig中获取输入文本文件名来生成输出列吗?
提前谢谢。

5uzkadbs

5uzkadbs1#

pythonmapreduce或者任何使用hadoop流接口的东西都很可能会比较慢。这是由于通过stdin和stdout传递数据的开销以及流式api使用者(在您的例子中是python)的实现造成的。python-udf在Hive里,pig做同样的事情。
您可能不想在python端将数据流压缩到orc中。您将不得不使用python的orc库,我不确定它们是否可用。如果让python返回序列化的对象,hadoop减少了压缩和存储为orc(python作为计算的udf)的步骤,那就更容易了
对。pig和python有一个非常好的编程接口,在这个接口中,您可以编写python脚本来动态生成pig逻辑并并行提交它。查找python中的拉丁语。它足够健壮,可以定义pythonudf,并让pig进行总体抽象和作业优化。pig做了一个惰性的评估,因此在多个连接或多个转换的情况下,它可以在优化整个管道方面表现出相当好的性能。
你说的是HDP2.1。你看过spark吗?如果性能对您来说很重要,并且考虑到数据集的大小(看起来并不庞大),那么总体管道执行速度将比hadoop的原生mr引擎快很多倍

相关问题