我每天都有100G的文本文件,我希望创建一个可以从Spark访问的高效"数据库"。我所说的"数据库"是指对数据执行快速查询(大约一年前)的能力,并且每天增量添加数据,最好没有读锁定。
假设我想使用Spark SQL和parquet,实现此目的的最佳方法是什么?
- 放弃并发读取/写入,并将新数据附加到现有的 Parquet 文件。
- 为每天的数据创建一个新的 parquet 文件,并利用 Spark 可以加载多个 parquet 文件的事实来允许我加载例如一整年。这有效地给了我"并发性"。
- 别的?
随意建议其他选项,但让我们假设我现在正在使用镶木地板,因为从我所读到的内容来看,这将对许多其他人有所帮助。
我的 0 级设计
- 使用按日期/时间分区(如果查询基于日期/时间以避免扫描所有数据)
- 在需要时使用追加保存模式
- 运行 SparkSQL 分布式 SQL 引擎,以便
- 启用从多个客户端/应用程序/用户查询数据
- 在所有客户端/应用程序/用户中仅缓存一次数据
- 如果可以的话,只使用 HDFS 来存储所有镶木地板文件
我的系统中有非常相似的要求。我会说如果加载全年的数据 - 对于 100g 一天,这将是 36T 数据,如果你每天需要加载 36TB,那无论如何都不可能很快。最好将处理的每日数据保存在某个地方(例如计数,总和,不同的结果),并使用它来返回全年。