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