2

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

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

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

我希望(还没有尝试过)如果我能说服尽可能多的记录留在同一个分区中(即构建一个自定义分区器),我可以加快速度并使扩展性更好。

在上述情况下,我手动找到了这个解决方案。在我开车上班的时候,我通过认真思考这个问题来推断出了什么问题。

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

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

4

2 回答 2

0

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

于 2010-08-04T22:23:00.277 回答
0

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

于 2010-07-08T02:33:32.207 回答