在 Spark 中从 HDFS 或 S3 读取边缘数据库文件

Read edge DB files from HDFS or S3 in Spark

我将列表 Db 文件存储到本地文件夹中,当我在本地模式下 运行 spark 作业时,我可以提供本地路径来读取这些本地文件。但是客户端或集群模式路径上的 运行 不可访问。似乎他们需要保存在 HDFS 或直接从 S3 访问。 我正在做以下事情:

java.io.File directory = new File(dbPath)

在 dbPath 中存在所有数据库文件列表。有什么简单的方法可以从 HDFS 或 S3 访问这些文件夹,因为我是 运行 AWS 上的这个 Spark 作业。

据我所知,目前没有执行此操作的标准方法。但是,通过仔细检查转储的生成方式,您似乎可以 reverse-engineer 一个 dump-reading 协议。

根据 edgedb-cli/dump.rs,您似乎可以使用二进制流 reader 打开文件并忽略给定转储文件的前 15 个字节。

    output.write_all(
        b"\xFF\xD8\x00\x00\xD8EDGEDB\x00DUMP\x00\
          \x00\x00\x00\x00\x00\x00\x00\x01"
        ).await?;

但是似乎剩余的转储通过以下方式写入了可变的异步未来结果:

            header_buf.truncate(0);
            header_buf.push(b'H');
            header_buf.extend(
                &sha1::Sha1::from(&packet.data).digest().bytes()[..]);
            header_buf.extend(
                &(packet.data.len() as u32).to_be_bytes()[..]);
            output.write_all(&header_buf).await?;
            output.write_all(&packet.data).await?;

使用 SHA1 编码。 不幸的是,此时我们还一无所知,因为我们不知道 header_buf 的字节序列实际上在说什么。您需要调查未消化的内容与 asyncpg 和 Postgres 使用的任何协议相比如何,以验证您的转储类似于什么。

或者,您可以使用一些 pre-existing 数据加载器为 restore.rs 准备垫片。