用于优化Hadoop应用程序可伸缩性的工具?

时间:2010-07-04 11:25:31

标签: performance hadoop mapreduce partitioning horizontal-scaling

我正在与我的团队一起工作,这个小型应用程序需要大量输入(一天的日志文件)并在几个(现在是4个,将来可能是10个)map-reduce步骤之后生成有用的输出(Hadoop & Java)。

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

水平制作地图缩小比例的一般原则是确保分区尽可能独立。我发现在我的情况下,我将每个步骤的分区“错误”,因为我只使用了默认的Hash分区器;这使得记录在下一个map-reduce步骤中跳转到不同的分区。

我希望(还没有尝试过)我可以加快速度,如果我可以说服尽可能多的记录留在同一个分区(即构建自定义分区程序),那么扩展会更好。< / p>

在上述情况下,我手动找到了这个解决方案。我在车上工作的时候,通过深思熟虑,推断出出了什么问题。

现在我向大家提问:   - 有哪些工具可用于检测此类问题?   - 是否有任何指南/清单可供遵循?   - 我如何测量诸如“跳过分区的记录数”之类的东西?

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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