设计Spark + Parquet"数据库"

时间:2016-01-18 00:41:31

标签: apache-spark apache-spark-sql parquet

我每天都有100G文本文件,我希望创建一个高效的数据库"从Spark可以访问。通过"数据库"我的意思是能够对数据执行快速查询(返回大约一年),并且每天递增地添加数据,最好没有读锁定。

假设我想使用Spark SQL和镶木地板,那么实现这一目标的最佳方法是什么?

  • 放弃并发读/写并将新数据附加到现有的镶木地板文件中。
  • 为每天的数据创建一个新的镶木地板文件,并使用Spark可以加载多个镶木地板文件以允许我加载例如整整一年。这实际上给了我"并发"。
  • 别的什么?

随意提出其他选择,但我们假设我现在正在使用镶木地板,因为从我所读到的内容中,这将对其他许多人有所帮助。

2 个答案:

答案 0 :(得分:2)

我的0级设计

  • 按日期/时间使用 partitioning (如果您的查询基于日期/时间,以避免扫描所有数据)
  • 在必要时使用Append SaveMode
  • 运行SparkSQL distributed SQL engine
    1. 启用查询来自多个客户端/应用程序/用户的数据
    2. 仅在所有客户端/应用程序/用户中缓存一次数据
  • 如果您可以存储所有Parquet文件,则只使用HDFS

答案 1 :(得分:0)

我的系统要求非常相似。我想说如果加载全年的数据 - 一天100克将是36T数据,如果你需要每天加载36TB,那么无论如何都不会很快。更好地保存处理过的每日数据(例如计数,总和,不同的结果),并使用它来回溯一整年。