我正在和一个小组一起工作,这个小应用程序需要大量输入(一天的日志文件),并在几个(现在4个,未来可能是10个)映射 - 减少步骤(Hadoop &使用Java)。优化Hadoop应用程序可伸缩性的工具?
现在我已经完成了此应用程序的部分POC,并在4台旧桌面(我的Hadoop测试群集)上运行了它。我注意到的是,如果你进行分区“错误”,水平缩放特性就会被破坏得无法识别。我发现比较单个节点(比如说20分钟)和所有4个节点上的测试运行只会导致50%的加速(大约10分钟),我预计加速的75%(或至少大于70%)(大约5或6分钟)。
水平制作map-reduce比例的一般原则是确保分区尽可能独立。我发现在我的情况下,我做了每个步骤的分区“错误”,因为我只是使用了默认的Hash分区器;这会使记录在下一个映射 - 缩小步骤中跳转到另一个分区。我希望(还没有尝试过),如果我能说服尽可能多的记录保持在同一个分区(即构建一个自定义分区),我可以加快速度并使其规模好得多。
在上述情况下,我手工找到了这个解决方案。我通过在我的车上努力思考这个问题来推断出了什么问题。
现在我的问题都告诉你了: - 有哪些工具可以检测到这样的问题? - 是否有任何指导方针/清单要遵循? - 如何测量诸如“跳过分区的记录数”之类的事情?
任何建议(工具,教程,书,...)非常感谢。