在 200-1000 台服务器之间进行流式传输并快速创建一个文件的想法
Ideas to take a stream amongst 200-1000 servers and create one single file quickly
我们在 Google Cloud Platform 中,因此技术将大获全胜。我们有一个巨大的文件进来,数据流在输入上缩放以很好地分解文件。然而,在那之后,它流经许多系统,microservice1 到数据连接器,将相关数据抓取到 ML,最后到最终的微服务。
由于最后阶段可能有大约 200-1000 台服务器,具体取决于负载,我们如何处理所有传入的请求(是的,我们为每个请求附加了一个文件 ID,包括 customerRequestId,以防文件丢失多次)。我们只需要在输出时将具有相同 customerRequestId 的每一行写入同一个文件。
执行此操作的最佳方法是什么?生成的文件几乎总是 csv 文件。
我可以探索任何想法或好的选择吗?我想知道数据流是否擅长并行摄取和读取海量大文件,是否擅长在节点集群(而不是会成为我们瓶颈的单个节点)上接收各种输入。
编辑:我似乎记得 hdfs 有跨节点分区的文件,我认为可以以某种方式同时由许多节点写入(a
每个分区的节点)。有谁知道 google 云存储文件是否也是这种方式?有没有一种方法可以让 200 个节点写入 google 云存储中同一文件的 200 个分区,使其全部为 1 个文件?
编辑 2:
我看到有一个流式 pub/sub 到 bigquery 选项,可以作为此列表中的一个阶段完成:https://cloud.google.com/dataflow/docs/guides/templates/provided-streaming
但是在此列表中,没有对 csv(我们的客户想要的)的批量 bigquery。我确实在这里看到了一个 bigquery to parquet 选项:https://cloud.google.com/dataflow/docs/guides/templates/provided-batch
不过我更愿意直接转到 csv。有办法吗?
谢谢,
院长
您的案例复杂且难以(且昂贵)重现。我的第一个想法是使用 BigQuery。使用 Dataflow 将所有数据汇入同一个 table。
然后,创建一个临时文件table,其中仅包含要像那样导出到 CSV 的数据
CREATE TABLE `myproject.mydataset.mytemptable`
OPTIONS(
expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR)
) AS
SELECT ....
然后到export the temporary table to CSV。如果 table 小于 1Gb,则只会生成一个 CSV。
如果您需要协调这些步骤,可以使用Workflows
我们在 Google Cloud Platform 中,因此技术将大获全胜。我们有一个巨大的文件进来,数据流在输入上缩放以很好地分解文件。然而,在那之后,它流经许多系统,microservice1 到数据连接器,将相关数据抓取到 ML,最后到最终的微服务。
由于最后阶段可能有大约 200-1000 台服务器,具体取决于负载,我们如何处理所有传入的请求(是的,我们为每个请求附加了一个文件 ID,包括 customerRequestId,以防文件丢失多次)。我们只需要在输出时将具有相同 customerRequestId 的每一行写入同一个文件。
执行此操作的最佳方法是什么?生成的文件几乎总是 csv 文件。
我可以探索任何想法或好的选择吗?我想知道数据流是否擅长并行摄取和读取海量大文件,是否擅长在节点集群(而不是会成为我们瓶颈的单个节点)上接收各种输入。
编辑:我似乎记得 hdfs 有跨节点分区的文件,我认为可以以某种方式同时由许多节点写入(a 每个分区的节点)。有谁知道 google 云存储文件是否也是这种方式?有没有一种方法可以让 200 个节点写入 google 云存储中同一文件的 200 个分区,使其全部为 1 个文件?
编辑 2:
我看到有一个流式 pub/sub 到 bigquery 选项,可以作为此列表中的一个阶段完成:https://cloud.google.com/dataflow/docs/guides/templates/provided-streaming
但是在此列表中,没有对 csv(我们的客户想要的)的批量 bigquery。我确实在这里看到了一个 bigquery to parquet 选项:https://cloud.google.com/dataflow/docs/guides/templates/provided-batch
不过我更愿意直接转到 csv。有办法吗?
谢谢, 院长
您的案例复杂且难以(且昂贵)重现。我的第一个想法是使用 BigQuery。使用 Dataflow 将所有数据汇入同一个 table。
然后,创建一个临时文件table,其中仅包含要像那样导出到 CSV 的数据
CREATE TABLE `myproject.mydataset.mytemptable`
OPTIONS(
expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR)
) AS
SELECT ....
然后到export the temporary table to CSV。如果 table 小于 1Gb,则只会生成一个 CSV。
如果您需要协调这些步骤,可以使用Workflows