【问题标题】:Combine multiple Rocksdb databases合并多个 Rocksdb 数据库
【发布时间】:2019-08-02 06:43:43
【问题描述】:

有一个用例,我必须读取巨大的 Parquet 文件并转换为 Rocksdb 二进制文件,所以我决定使用 spark(因为我团队中的每个人都熟悉它)。

从 Rocksdb 方面我知道它不是分布式的,你不能并行化。

所以我所做的是我为每个任务使用 Spark 并行创建了多个 Rocksdb 实例。

现在我想将它们组合在一起。所以我的问题是,是否可以将 Rocksdb 的多个实例组合在一起以使用一些后处理创建一个大型 Rocksdb 实例?

【问题讨论】:

  • rocksdb 实例有多大?您在下面说“数据非常庞大,我们无法将所有数据收集到驱动程序端”所以您没有回答您的问题“是否可以合并多个Rocksdb实例一起创建一个大的 Rocksdb 实例” 已经?
  • 是的@JacekLaskowski 这是正确的,但它可以驻留在具有大约 1TB SSD 的单台机器上。问题不在于,只是想办法让我的处理并行化。
  • 已经有一段时间没有询问估算值了(现在是多次)。我们真的能知道一个数字吗?还有系统配置,例如 cpu、内存、spark 磁盘以及实际使用 Rocksdb 的节点。

标签: apache-spark rocksdb distributed-database rocksdb-java


【解决方案1】:

为什么不在驱动程序上执行 collectPartitions() 或 toLocalIterator() 并处理每个分区?是的,它不会是并行执行,但你会得到一个合并的数据库。

另外...更新...您可以在每个执行程序上使用 SSTFileWriter 作为 hadoopOutputFileFormat 的变体 ..并且rocksdb 支持读取 sst 文件....这是它的自述文件。

https://rocksdb.org/blog/2017/02/17/bulkoad-ingest-sst-file.html

【讨论】:

  • 是的,可以,但问题是数据非常庞大,我们无法将所有数据收集到驱动端,而且处理时间会很长,因为只有一个机器(驱动程序)负责整个处理。
  • 我们在这里讨论的数据有多大?尝试通过重新分区来平衡分区,然后确保在插入数据库时​​执行收集分区并执行批量更新。
  • 另一种方法是将其托管在远程服务器上,然后执行 http 远程插入。这将需要额外的基础设施开销,但可行。
猜你喜欢
  • 2012-09-09
  • 2014-05-15
  • 2018-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多