2

对于处理大量数据的火花有多好,有多大炒作。Spark不良查询性能:如何提高Spark上的查询性能?

所以,我们想调查spark的查询性能。

  • 机器配置:

4工作节点,r3.2xlarge实例

  • 数据

我们的输入数据被存储在S3 12个分裂gzip的文件。

  • 我们所做的

我们使用SQL星火对于上述输入数据集创建的表。

然后我们缓存了表格。我们从Spark UI发现Spark没有将所有数据加载到内存中,而是将一些数据加载到内存中,并将一些数据加载到磁盘中。 更新:我们还测试了实木复合地板文件。在这种情况下,所有数据都被加载到内存中。然后我们执行如下的相同查询。性能还不够好。

  • 查询性能

假设表名是Fact_data。我们在该缓存表上执行以下查询:

select date_key,从Fact_data中的总和(值)where date_key在201401和201412之间按da​​te_key排序1 查询需要1268.93秒才能完成。与Redshift(dc1.large cluster)中的执行时间相比,这只需要9.23秒。 我还测试了一些其他的疑问如计数,加盟等Spark是给我的表现真的很差对于每个查询

  • 问题

    1. 你可以建议任何有可能提高性能的查询?可能是我缺少一些优化技术。任何建议将不胜感激。

    2. 如何强制Spark加载内存中的所有数据?目前它将一些数据存储在内存中,一些存储在磁盘中。

    3. 使用Dataframe和SQL表有什么性能差异吗?我想不是。因为在引擎盖下他们使用相同的优化器。

+0

没有你获取任意点来提高查询性能。我也面临同样的问题 – Naresh

+0

我们已经应用了Spark文档中提出的所有优化,例如,内存缓存,分区,簇加入等。性能得到了提升,但它无法击败像vertica或redshift这样的MPP数据库的性能。 – Luniam

+0

你能否进一步澄清你的数据结构?这是全部在一个'文件'(又名表),还是在12个表?你是否加入了不同的文件,或试图在查询中自行加入?你能详细说明你已经序列化的数据结构和你正在运行的查询吗? –

回答

0
  1. 我建议你使用木地板为您的文件格式,而不是gzip压缩的文件。

  2. 您可以尝试提高--num执行人,--executor内存和--executor-内核如果你使用的纱线

  3. 和您的实例类型是r3.2xlarge,请确保您集装箱尺寸yarn.nodemanager.resource.memory-MB比你--executor内存较大的(也许55G左右),你还需要设置yarn.nodemanager.resource.cpu-vcores到15