我正在与我的一个团队合作开发一个小型应用程序,该应用程序需要大量输入(一天的日志文件)并在几个(现在 4 个,将来可能是 10 个)map-reduce 步骤(Hadoop 和 Java)之后产生有用的输出.
现在我已经完成了这个应用程序的部分 POC 并在 4 个旧桌面(我的 Hadoop 测试集群)上运行它。我注意到的是,如果您“错误”地进行分区,水平缩放特征就会被破坏得面目全非。我发现比较单个节点(比如 20 分钟)和所有 4 个节点上的测试运行只会导致 50% 的加速(大约 10 分钟),而我预计加速是 75%(或至少 >70%)(大约 5或 6 分钟)。
使map-reduce水平缩放的一般原则是确保分区尽可能独立。我发现在我的情况下,我对每个步骤进行了“错误”的分区,因为我只是使用了默认的 Hash 分区器;这使得记录在下一个 map-reduce 步骤中跳转到不同的分区。
我希望(还没有尝试过)如果我能说服尽可能多的记录留在同一个分区中(即构建一个自定义分区器),我可以加快速度并使扩展性更好。
在上述情况下,我手动找到了这个解决方案。在我开车上班的时候,我通过认真思考这个问题来推断出了什么问题。
现在我要问大家: - 有哪些工具可用于检测此类问题?- 是否有任何要遵循的指导方针/清单?- 我如何去测量诸如“跳过分区的记录数”之类的东西?
非常感谢任何建议(工具、教程、书籍……)。