WordCount 的输出存储在多个文件中。但是,开发人员无法控制文件在集群中的位置(IP、路径)。在 MapReduce API 中,开发人员可以编写 reduce 程序来解决这个问题。如何在 ApacheBeam 中使用 DirectRunner 或任何其他运行器来处理这个问题?
问问题
147 次
1 回答
0
确实——Apache Beam 中的 WordCount 示例管道使用 写入其输出TextIO.Write
,它(默认情况下)不指定输出分片的数量。
默认情况下,每个运行者独立决定产生多少分片,通常基于其内部优化。但是,用户可以通过.withNumShards()
API 控制它,这将强制使用特定数量的分片。当然,强制一个特定的数字可能需要运行器的更多工作,这可能会或可能不会导致执行速度稍慢。
关于“文件在集群上的位置”——Apache Beam 的理念是应该从用户那里抽象出这种复杂性。事实上,Apache Beam 提高了抽象级别,因此用户无需担心这一点。有效管理这一点是跑步者和/或存储系统的责任。
也许需要澄清一下——我们可以轻松地与低级编程(例如,直接汇编)、非托管编程(例如,C 或 C++)、托管(例如,C# 或 Java)进行并行。随着抽象程度的提高,您不再可以控制数据的局部性(例如,处理器缓存),而是获得了强大的功能、易用性和可移植性。
于 2016-11-16T08:21:55.380 回答