0

我目前正在阅读这篇文章和 apache 梁文档https://medium.com/@mohamed.t.esmat/apache-beam-bites-10b8ded90d4c

我读过的每一篇文章都是关于 N 个文件的。在我们的用例中,我们每次都会收到一个新文件的 pubsub 事件来启动工作。我不需要按文件缩放,因为我可以使用 cloudrun。我需要根据文件中的行数进行缩放。IE。一个 100 行文件和一个 100,000,000 行文件,我希望看到大约在同一时间处理。

如果我按照上面的文章,我给它一个文件而不是很多,在幕后,apache Beam 将如何扩展。它如何知道将 1 个节点用于 100 行,而 1,000,000 行文件可能使用 1000 个节点。毕竟,它不知道文件中有多少行开始。

数据流不随文件中的行数缩放吗?我在想也许节点 1 会读取 0-99 行,节点 2 会读取/丢弃 0-99,然后读取 100-199。

有谁知道幕后发生了什么,所以我最终不会浪费数小时的测试时间来试图弄清楚它是否相对于文件中的行数进行缩放?

编辑:相关问题但不是同一个问题 -如何使用 Beam 读取大型 CSV?

我认为数据流可能会受到读取整个文件的一个节点的限制,我可以在普通计算机上执行此操作,但我真的想知道它是否会比这更好。

另一种说法是在幕后,这条线实际上在做什么

PCollection<String> leftInput = TextIO.read().from(“left.csv”)

可能是 1 个节点读取然后发送到一堆其他节点,但是当 csv 为大数据大小时,如果只有 1 个 csv 读取器,则存在明显的瓶颈。

关于我的想法的更多背景。我确实看到了一个“HadoopFileSystem”连接器(尽管我们与 GCP Storage 交谈)。我的猜测是 HadoopFileSystem 的操作基于 HDFS 具有代表文件的“分区文件”这一事实,因此它已经是 N 个文件。我们使用谷歌云存储,所以它只是一个 csv 文件而不是 N 个文件。虽然 HDFS 连接器可以启动与分区相同数量的节点,但 TextIO 只能看到一个 csv 文件,仅此而已。

4

1 回答 1

0

谢天谢地,我的同事发现这个只有一行

http://moi.vonos.net/cloud/beam-read-header/

但是它确实表明我认为如何确保具有分区的代码并且不同的工作读取文件的不同部分。我想这会解决它!

如果有人有一个很好的 csv 分区示例,那会很震撼,但我们可以尝试创建自己的。目前,有人读入了整个文件。

于 2021-04-19T03:55:37.347 回答