在 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 准备垫片。
我将列表 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 准备垫片。