我正在做一个每天都会运行的管道。它包括联接两个表,分别为x和y(分别约为18 MB和1.5 GB大小),并将联接的输出加载到最终表中。
以下是有关环境的事实,
对于表x:
对于表y:
现在的问题是:
Hive和Spark的性能相同(花费的时间相同)
我尝试了不同的资源组合来完成 Spark 工作。
例如。:
所有这三种组合都具有相同的性能。我不确定我在这里缺少什么。
我还尝试广播小表“x”,以避免加入时出现随机播放,但性能没有太大改善。
一个主要的观察结果是:
70%的执行时间用于读取大表y,我想这是由于每个分区的文件数量更多。
我不确定 hive 如何提供相同的性能。
请提示。
最佳答案
我假设您正在比较Hive在MR与Spark之间。如果不是这种情况,请告诉我。因为Hive(在tez或spark上)与Spark Sql不会有所不同
在性能方面。
我认为主要问题是小文件太多。
I / O本身消耗大量CPU和时间,因此您无法体验Spark的处理能力。
我的建议是在读取 Parquet 文件后立即合并 Spark 数据帧。请合并“x”数据框为单个分区和“y”
数据帧分为6-7个分区。
完成上述操作后,请执行join(broadcastHashJoin)。
关于apache-spark - Spark性能问题与Hive,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56901056/