2

我正在和一个小组一起工作,这个小应用程序需要大量输入(一天的日志文件),并在几个(现在4个,未来可能是10个)映射 - 减少步骤(Hadoop &使用Java)。优化Hadoop应用程序可伸缩性的工具?

现在我已经完成了此应用程序的部分POC,并在4台旧桌面(我的Hadoop测试群集)上运行了它。我注意到的是,如果你进行分区“错误”,水平缩放特性就会被破坏得无法识别。我发现比较单个节点(比如说20分钟)和所有4个节点上的测试运行只会导致50%的加速(大约10分钟),我预计加速的75%(或至少大于70%)(大约5或6分钟)。

水平制作map-reduce比例的一般原则是确保分区尽可能独立。我发现在我的情况下,我做了每个步骤的分区“错误”,因为我只是使用了默认的Hash分区器;这会使记录在下一个映射 - 缩小步骤中跳转到另一个分区。我希望(还没有尝试过),如果我能说服尽可能多的记录保持在同一个分区(即构建一个自定义分区),我可以加快速度并使其规模好得多。

在上述情况下,我手工找到了这个解决方案。我通过在我的车上努力思考这个问题来推断出了什么问题。

现在我的问题都告诉你了: - 有哪些工具可以检测到这样的问题? - 是否有任何指导方针/清单要遵循? - 如何测量诸如“跳过分区的记录数”之类的事情?

任何建议(工具,教程,书,...)非常感谢。

回答

0

确保您没有遇到小文件问题。 Hadoop针对吞吐量而不是延迟进行了优化,因此它会将加入到一个大型序列文件中的许多日志文件比存储在hdfs中的许多单独文件处理得更快。以这种方式使用序列文件消除了为独立映射管理所需的额外时间,减少了任务并改善了数据局部性。但是,是的,您的地图输出合理地分配给减速器非常重要,以确保少数减速器不会因超负荷工作而过载。

0

看看Netbeans/Eclipse的Karmashpere(以前称为hadoop studio)插件:http://karmasphere.com/Download/download.html。有免费版本可以帮助检测和测试运行hadoop作业。
我已经测试了一下,看起来很有希望。

相关问题