Mapreduce:我应该避免在mapper/reducer中创建对象吗?



在我的公司,开发人员竭尽全力不在映射器/reducer中创建对象。例如,处理基本的avro记录(使用位置),处理字节数组和流而不是对象等。

这听起来像是过度优化。基于Java的服务器也需要高性能,但人们不会这样编程。

那么什么是正确的呢?

我认为你不能说对或错,但也许是过度了。您(大概)牺牲了可读性和可维护性来获得一些性能收益。请记住,如果您让您的reducer快1秒,并且您的作业使用100个节点来减少,那么它不会快100秒完成,只有1秒,假设在开始时密钥和可用资源的分配相等。

就我个人而言,我声明类变量并在构造函数中初始化它们(参见技巧#6)。然后我设置它们,而不是在映射器或reducer中创建新的对象。这样你只会被击中一次。您只需要确保在map或reduce方法开始时清除对象,以确保您不会从以前的调用中结转。

相关内容

  • 没有找到相关文章

最新更新