首页 > 解决方案 > Spark 性能问题与 Hive

问题描述

我正在开发一条每天都会运行的管道。它包括连接 2 个表,例如 x 和 y(分别约为 18 MB 和 1.5 GB 大小)并将连接的输出加载到最终表。

以下是有关环境的事实,

对于表 x:

对于表 y:

现在的问题是:

Hive 和 Spark 的性能相同(所用时间相同)

我为火花工作尝试了不同的资源组合。

例如:

所有三种组合都提供相同的性能。我不确定我在这里缺少什么。

我还尝试广播小表'x'以避免加入时随机播放,但性能没有太大改善。

一个关键的观察结果是:

读取大表 'y' 消耗了 70% 的执行时间,我猜这是因为每个分区的文件数量更多。

我不确定 hive 如何提供相同的性能。

请建议。

标签: apache-sparkhadoophivehdfs

解决方案


我假设您正在比较 MR 和 Spark 上的 Hive。如果不是这样,请告诉我。因为 Hive(在 tez 或 spark)与 Spark Sql 在性能方面不会有太大差异。

我认为主要问题是小文件太多。I/O 本身消耗了大量的 CPU 和时间,因此您无法体验 Spark 的处理能力。

我的建议是在阅读 parquet 文件后立即合并 spark 数据帧。请将“x”数据帧合并为单个分区,将“y”数据帧合并为 6-7 个分区。

完成上述操作后,请执行join(broadcastHashJoin)。


推荐阅读