GCP Dataflow 中的 RAM 磁盘 - 有可能吗?
Posted
技术标签:
【中文标题】GCP Dataflow 中的 RAM 磁盘 - 有可能吗?【英文标题】:RAM disks in GCP Dataflow - is it possible? 【发布时间】:2021-01-14 20:43:33 【问题描述】:Google Compute Engine 支持 RAM 磁盘 - 请参阅 here。 我开发了一个项目,该项目将重用处理本地文件的现有代码。 为了可扩展性,我将使用 Dataflow。 这些文件在 GCS 中,我会将其发送给 Dataflow 工作人员进行操作。 我正在考虑通过在工作人员上使用 RAM 磁盘来创造更好的性能,将文件从 GCS 直接复制到 RAM 磁盘,并在那里进行操作。 我找不到任何这种能力的例子。
这是一个有效的解决方案,还是我应该避免这种“技巧”?
【问题讨论】:
【参考方案1】:由于 ramdisk 是在操作系统级别上设置的,因此无法使用 ramdisk 作为工作人员的磁盘类型。 workers 唯一可用的磁盘是标准永久性磁盘 (pd-standard) 和 SSD 永久性磁盘 (pd-ssd)。其中,SSD肯定更快。您可以尝试添加更多工作器或使用更快的 CPU 来更快地处理数据。
为了比较,我尝试运行使用标准和 ssd 的作业,结果发现使用 SSD 比标准磁盘快 13%。但请注意,我刚刚从dataflow docs 测试了快速入门。
使用 SSD(经过 3m 54s 时间):
使用标准磁盘(4m 29s 经过时间):
【讨论】:
【参考方案2】:虽然creating a setup.py
with custom commands 在技术上可以实现您想要做的事情,但它不会帮助您提高性能。 Beam 已经尽可能多地使用工作人员的 RAM 以有效执行。如果您正在从 GCS 读取文件并对其进行操作,则该文件已经被加载到 RAM 中。 通过为 ramdisk 指定一大块 RAM,您可能会使 Beam 运行得更慢,而不是更快。
如果您只是想让事情发生得更快,请尝试使用 SSD,增加工作人员的数量,或尝试使用 c2
机器系列。
【讨论】:
“该文件已经被加载到 RAM 中”是什么意思?我试图通过 Dataflow 实现的代码处理本地文件,因此我会将文件从 GCS 复制到本地存储。 Dataflow 是否“自动”使用一种 RAM 驱动器? 您不应该手动将文件复制到磁盘,请使用内置的beam.io.Read()
(如果您需要读取二进制文件,则直接使用GcsIO()
)从GCS读取文件。它具有各种优化,可以并行文件读取并将文件缓冲到 RAM 中,您不需要自己实现。
类似,如果您手动安装和使用google-cloud-storage
python 模块,请不要这样做。从 GCS 读取文件所需的一切都内置在 Beam 中。以上是关于GCP Dataflow 中的 RAM 磁盘 - 有可能吗?的主要内容,如果未能解决你的问题,请参考以下文章
使用 GCP Cloud DataFlow 读取 BigTable 并转换为通用记录
GCP Dataflow + Apache Beam - 缓存问题
请求的身份验证范围不足 - GCP 上的 Dataflow/Apache Beam