保存结构化流和OLAP查询的spark sql结果的最佳故障保护策略

时间:2017-06-16 23:40:32

标签: apache-spark apache-spark-sql spark-streaming spark-dataframe

我希望以这种方式存储针对流数据运行的连续查询的结果,以便将结果保存到分布式节点中以确保故障转移和可伸缩性。

Spark SQL专家可以了解一下 - (1)我应该选择哪个存储选项,以便OLAP查询更快 - (2)即使一个节点关闭,如何确保可用于查询的数据 - (3)内部Spark SQL如何存储结果集?

由于 Kaniska

1 个答案:

答案 0 :(得分:1)

这取决于你能承受的延迟。

  • 一种方法是使用Persist() API将结果保存到HDFS / Cassandra中。如果您的数据很小,那么每个RDD的cache()应该会给您带来好结果。

  • 存储您的spark执行器所在的位置。例如:

    • 也可以使用基于内存的存储(如tachyon)来保存您的信息流(即信息流的每个RDD)并对其进行查询。
    • 如果延迟不是问题,那么持续存在(MEMORY_OR_DISK_2)应该可以满足您的需求。请注意,在这种情况下,您的表现会受到影响。这也将数据存储在两个执行器中。
  • 在其他情况下,如果您的客户更喜欢OLTP(如数据库),他们只需要查询不断更新的结果,您就可以使用常规数据库,如postgresmysql。这是许多方法中的首选方法,因为查询时间是一致且可预测的。如果结果不是更新但是分区(比如按时间),那么Greenplum类似的系统也是一种选择。