Google cloud dataflow ApacheBeam—编写高效数据处理管道的关键概念是什么?

Google cloud dataflow ApacheBeam—编写高效数据处理管道的关键概念是什么?,google-cloud-dataflow,apache-beam,Google Cloud Dataflow,Apache Beam,我已经使用Beam一段时间了,我想知道编写高效和优化的Beam管道的关键概念是什么 我有一点Spark的背景,我知道我们可能更喜欢使用reduceByKey而不是groupByKey来避免混乱和优化网络流量 梁的情况也一样吗 我非常感谢一些提示或材料/最佳实践。一些需要考虑的事项: 图形设计注意事项: 文件管理者优先;将过滤器操作放置在DAG中尽可能高的位置 早联合;如果可以选择何时合并,请尽早这样做 如果可能,在大滑动窗口之前使用较小的固定窗口,以减少大滑动窗口的影响。固定窗口1米|联合收割机

我已经使用Beam一段时间了,我想知道编写高效和优化的Beam管道的关键概念是什么

我有一点Spark的背景,我知道我们可能更喜欢使用reduceByKey而不是groupByKey来避免混乱和优化网络流量

梁的情况也一样吗


我非常感谢一些提示或材料/最佳实践。

一些需要考虑的事项:

图形设计注意事项: 文件管理者优先;将过滤器操作放置在DAG中尽可能高的位置

早联合;如果可以选择何时合并,请尽早这样做

如果可能,在大滑动窗口之前使用较小的固定窗口,以减少大滑动窗口的影响。固定窗口1米|联合收割机|滑动窗口6小时

大多数跑步者都支持图形融合,这在99%的情况下都是正确的。但是在大规模扇出变换的情况下,应该中断融合

开发者 选择提供良好性能的编码器,例如在Java中使用Proto或Avro编码器,而不是默认的Java序列化。 高级提示:编码/解码是很大的开销来源。因此,如果你有一个大的blob,但只需要它的一部分结构,你可以选择性地解码这一部分。 登录中 避免在每个元素级别使用Log.info,这很少有价值,而且是许多性能相关问题产生的根本原因。 数据倾斜 了解数据集和热键的含义。用作可为空的键的字段通常是罪魁祸首。。。如果需要,可以使用并行性提示 对于一般的钥匙

键太少:坏-难以切分的工作负载和每个键的顺序将影响性能 键太多:可能太糟糕了-开销开始慢慢增加。 高级提示键:

有时,您可以将一个键与元素{key,window}的窗口组合起来,以帮助您更好地分配工作 这不是一项要求,但如果您有能力并希望进入这一优化水平;目标为~O10K到O100K密钥。如果密钥空间大得多,可以考虑在内部使用散列分离键。如果键携带日期/时间信息,这一点尤其有用。在这种情况下,您可以免费重复使用过去不再活动的处理密钥。 源、汇和外部系统 使用选项标志可以轻松读取压缩文件,但是如果没有偏移量TextIO,则无法分发此任务。如果要读取非常大的文件,在启动管道之前解压缩文件可以提供很好的性能提升。还可以看看使用压缩Avro等格式

背压:横梁滑道设计为能够通过平行工作快速咀嚼。他们可以在多台机器上运行多个线程来实现这一目标。这很容易淹没外部系统,尤其是在进行每元素RPC调用时。如果外部系统无法按比例扩展,请使用startBundle/finishBundle创建批处理,以帮助提升每秒的调用次数

光速,仍然是光速避免使用远离工人的水槽和水源

韵律学 利用Beam度量来检测管道。
应考虑的一些项目:

图形设计注意事项: 文件管理者优先;将过滤器操作放置在DAG中尽可能高的位置

早联合;如果可以选择何时合并,请尽早这样做

如果可能,在大滑动窗口之前使用较小的固定窗口,以减少大滑动窗口的影响。固定窗口1米|联合收割机|滑动窗口6小时

大多数跑步者都支持图形融合,这在99%的情况下都是正确的。但是在大规模扇出变换的情况下,应该中断融合

开发者 选择提供良好性能的编码器,例如在Java中使用Proto或Avro编码器,而不是默认的Java序列化。 高级提示:编码/解码是很大的开销来源。因此,如果你有一个大的blob,但只需要它的一部分结构,你可以选择性地解码这一部分。 登录中 避免在每个元素级别使用Log.info,这很少有价值,而且是许多性能相关问题产生的根本原因。 数据倾斜 了解数据集和热键的含义。用作可为空的键的字段通常是罪魁祸首。。。如果需要,可以使用并行性提示 对于一般的钥匙

键太少:坏-难以切分的工作负载和每个键的顺序将影响性能 键太多:可能太糟糕了-开销开始慢慢增加。 高级关键提示:

有时,您可以将一个键与元素{key,window}的窗口组合起来,以帮助您更好地分配工作 这不是一项要求,但如果您有能力并希望进入这一优化水平;目标为~O10K到O10 0K钥匙。如果密钥空间大得多,可以考虑在内部使用散列分离键。如果键携带日期/时间信息,这一点尤其有用。在这种情况下,您可以免费重复使用过去不再活动的处理密钥。 源、汇和外部系统 使用选项标志可以轻松读取压缩文件,但是如果没有偏移量TextIO,则无法分发此任务。如果要读取非常大的文件,在启动管道之前解压缩文件可以提供很好的性能提升。还可以看看使用压缩Avro等格式

背压:横梁滑道设计为能够通过平行工作快速咀嚼。他们可以在多台机器上运行多个线程来实现这一目标。这很容易淹没外部系统,尤其是在进行每元素RPC调用时。如果外部系统无法按比例扩展,请使用startBundle/finishBundle创建批处理,以帮助提升每秒的调用次数

光速,仍然是光速避免使用远离工人的水槽和水源

韵律学 利用Beam度量来检测管道。
非常感谢你!你能补充一点原因吗?去理解为什么它很重要?例如,我们为什么要将过滤器操作置于顶部?非常感谢!你能补充一点原因吗?去理解为什么它很重要?例如,我们为什么要将过滤器操作置于顶部?