Esto probablemente muestre mi falta de comprensión de Java, pero me pregunto por qué en la mayoría de los programas de MapReduce las clases de mapper y de reductor se declaran como estáticas.¿Por qué declarar las clases Mapper y Reducer como estáticas?
Respuesta
Al declarar las clases mapper y reducer como clases internas a otra clase, deben declararse estáticas de manera que no dependan de la clase principal.
Hadoop utiliza la reflexión para crear una instancia de la clase para cada mapa o reducir la tarea que se ejecuta. La nueva instancia creada espera un constructor de cero argumentos (de lo contrario, ¿cómo sabría qué pasar).
Al declarar el asignador interno o reducir la clase sin la palabra clave estática, la compilación java en realidad crea un constructor que espera que una instancia de la clase principal se pase en la construcción.
Usted debe ser capaz de ver esto ejecutando el comando javap contra la generaron archivo de clase
Además, la palabra clave estática no es válido cuando se utiliza en una declaración de la clase padre (que es por eso que nunca se ve en la parte superior nivel, pero solo en las clases secundarias)
puedo pensar en dos razones:
- Al realizar los métodos de cartografía reducir ningún estado se necesita que tiene que ser conservado en el objeto. Por lo tanto, toda la información necesaria se pasa al método, no es necesario almacenar datos adicionales en el objeto. Si el tiempo de vida del objeto no excederá una llamada a un método, ¿por qué debería luchar entonces con creación de instancias?
- No tiene sentido tener más de un objeto, razones similares por las cuales implementaría el Singleton Pattern.
Esto no es correcto: en map-reduce, se crean varias instancias concretas de la clase Mapper; y de hecho pueden mantener el estado. Supongo que el significado de "estático" es diferente en Java vs. DO#. –
- 1. ¿Por qué declarar las clases estáticas como selladas y abstractas en C#?
- 2. ¿Por qué Android prefiere las clases estáticas
- 3. ¿Por qué las clases estáticas solo pueden tener miembros estáticos?
- 4. ¿Por qué se usan clases estáticas?
- 5. ¿Por qué las clases internas no pueden declarar miembros estáticos?
- 6. ¿Debería evitar las clases estáticas?
- 7. Activador y clases estáticas
- 8. excepciones como clases públicas frente a las clases internas estáticas públicas
- 9. ¿Por qué las uniones anónimas globales deben declararse como estáticas?
- 10. ¿Dónde debo declarar las variables estáticas?
- 11. Una pregunta sobre C# y las clases y funciones estáticas
- 12. ¿Por qué las clases estáticas no pueden tener métodos y variables no estáticos?
- 13. ¿Por qué declarar una interfaz como abstracta?
- 14. Propiedades estáticas en clases estáticas
- 15. Clases estáticas en Delphi (Win32)
- 16. ¿Dónde almacena CLR las clases estáticas?
- 17. Extendiendo clases estáticas PHP
- 18. Java: clases anidadas no estáticas y instance.super()
- 19. @autowired en clases estáticas
- 20. Las clases internas estáticas necesitan importación para las anotaciones
- 21. ASP.NET Clases estáticas y sesiones asp.net
- 22. ¿Por qué las estructuras estáticas no están permitidas en C#?
- 23. cómo acceder al valor del contador de Mapper en un Reducer?
- 24. clases estáticas en C#
- 25. ¿Por qué coffeescript genera clases como esta?
- 26. ¿Usos para clases genéricas estáticas?
- 27. clases singleton/estáticas para servicios
- 28. ¿Por qué las clases internas hacen accesibles los métodos privados?
- 29. Clases estáticas en Python
- 30. Capa de servicio de aplicación como clases estáticas
Gracias. En realidad, tu explicación sobre la reflexión resolvió algún otro problema que tuve. – kee
@Chris White Eres genio. –