Spark性能问题与Hive

时间:2019-07-05 10:13:56

标签: apache-spark hadoop hive hdfs

我正在处理每天都会运行的管道。它包括联接两个表,分别为x和y(分别约为18 MB和1.5 GB大小),并将联接的输出加载到最终表中。

以下是有关环境的事实

对于表x:

  • 数据大小:18 MB
  • 分区中的文件数:〜191
  • 文件类型:镶木地板

对于表y:

  • 数据大小:1.5 GB
  • 一个分区中的文件数:〜3200
  • 文件类型:镶木地板

现在的问题是:

Hive和Spark的性能相同(花费的时间相同)

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

例如:

  • 执行者:50个内存:20GB内核:5
  • 执行者:70个内存:20GB内核:5
  • 执行程序:1个内存:20GB内核:5

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

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

一个主要的观察结果是:

70%的执行时间用于读取大表y,我想这是由于每个分区的文件数量更多。

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

请提出建议。

1 个答案:

答案 0 :(得分:0)

我假设您正在比较Hive on MR和Spark。如果不是这种情况,请告诉我。因为Hive(在tez或spark上)与Spark Sql不会有所不同 在性能方面。

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

我的建议是在读取实木复合地板文件后立即合并火花数据帧。请合并“ x”数据框为单个分区和“ y” 数据帧分为6-7个分区。

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