1

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

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

在 dbPath 中存在所有 db 文件列表。当我在 AWS 上运行此 Spark 作业时,是否有任何简单的方法可以从 HDFS 或 S3 访问这些文件夹。

4

1 回答 1

1

据我所知,目前没有标准的方法可以做到这一点。但是您似乎可以通过仔细检查转储的生成方式来对转储读取协议进行逆向工程。

根据edgedb-cli/dump.rs,看起来您可以使用二进制流阅读器打开文件并忽略给定转储文件的前 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 使用的任何协议相比的外观,以验证您的转储类似于什么。

或者,您可以使用一些预先存在的数据加载器为restore.rs准备一个 shim 。

于 2020-09-07T20:38:14.753 回答