在我的公司,开发人员竭尽全力不在mappers / redurs中创建对象。例如,使用基本的avro记录(使用位置),使用字节数组和流而不是对象等。
这听起来像是在优化过程中。基于Java的服务器也需要具有高性能,但人们不会这样编程。
那么什么是对的?
答案 0 :(得分:1)
我认为你不能说是对还是错,但也许是矫枉过正。您(可能)会牺牲可读性和可维护性来获得一些性能提升。请记住,如果你让你的减速器运行速度提高1秒并且你的工作使用100个节点减少,它就不会快100秒完成,只有1假设在开始时分配了相同的密钥和可用资源。
我个人声明了类变量并在我的构造函数(see tip #6)中初始化它们。然后我设置它们而不是在mapper或reducer中创建新对象。这样你只会受到一次打击。您只需确保清除地图开头的对象或reduce方法,以确保您没有上次调用的遗留。