【问题标题】:Tools for optimizing scalability of an Hadoop application?用于优化 Hadoop 应用程序可扩展性的工具?
【发布时间】:2010-07-04 11:25:30
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

    标签: performance hadoop mapreduce partitioning horizontal-scaling


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-26
        • 1970-01-01
        • 2011-05-29
        • 2015-05-25
        • 2011-03-28
        • 1970-01-01
        • 2011-06-12
        • 2014-09-13
        相关资源
        最近更新 更多