如何防止Spark SQL + Power BI OOM

时间:2017-04-12 10:40:56

标签: apache-spark hive apache-spark-sql

现在,我正在测试Spark SQL,就像Microsoft Power BI的查询引擎一样。 我有什么:

  1. 一张巨大的Cassandra表,其中包含我需要分析的数据。
  2. 拥有8个内核和16Gb内存的Amazon服务器。
  3. 此服务器上的Spark Thrift服务器。 Spark的版本 - 1.6.1
  4. 映射到巨大的Cassandra表的Hive表。
  5. create table data using org.apache.spark.sql.cassandra options (cluster 'Cluster', keyspace 'myspace', table 'data');

    在我尝试将Power BI连接到Spark之前一切正常。问题是Power BI正试图从巨大的Cassandra表中获取所有数据。显然,Spark Thrift Server因OOM错误而崩溃。在这种情况下,我无法将内存添加到Spark Thrift Server,因为带有原始数据的Cassandra表非常庞大。另外,我不能依赖BI侧的自定义初始查询,因为每次用户忘记设置此查询服务器都会崩溃。 我看到的最好的方法是在某种

    中自动包装来自BI的所有查询
    SELECT * FROM (... BI select ...) LIMIT 1000000
    

    对于当前的用例是可以的。 那么,它可以在服务器端吗?我怎么能这样做? 如果没有,我怎么能阻止Spark Thrift Server崩溃?在获得OOM之前是否有可能丢弃或取消大量查询? 感谢。

1 个答案:

答案 0 :(得分:1)

好的,我发现了一个解决我问题的神奇配置选项:

spark.sql.thriftServer.incrementalCollect =真

设置此选项后,Spark会将耗费量大的查询提取的数据拆分为块