¿cuál es la diferencia entre llamar a un trabajo de mapreduce desde main()
y desde ToolRunner.run()
? Cuando decimos que la clase principal dice, MapReduce extends Configured implements Tool
, ¿cuáles son los privilegios adicionales que obtenemos que no tenemos si simplemente hiciéramos una simple ejecución del trabajo desde el método principal? Gracias.Diferencia al llamar al trabajo
Respuesta
No hay privilegios adicionales, pero sus opciones de línea de comando Get corren a través de la GenericOptionsParser, lo que permitirá extraer ciertas propiedades de configuración y configurar un objeto de configuración de él:
http://hadoop.apache.org/common/docs/r0.20.2/api/org/apache/hadoop/util/GenericOptionsParser.html
Básicamente bien que analizar algunos opciones de unidad (utilizando el índice del argumento en la lista), puede configurar explícitamente las propiedades de configuración desde la línea de comandos:
hadoop jar myJar.jar com.Main prop1value prop2value
public static void main(String args[]) {
Configuration conf = new Configuration();
conf.set("prop1", args[0]);
conf.set("prop2", args[1]);
conf.get("prop1"); // will resolve to "prop1Value"
conf.get("prop2"); // will resolve to "prop2Value"
}
vuelve mucho mor e condensa con ToolRunner:
hadoop jar myJar.jar com.Main -Dprop1=prop1value -Dprop2=prop2value
public int run(String args[]) {
Configuration conf = getConf();
conf.get("prop1"); // will resolve to "prop1Value"
conf.get("prop2"); // will resolve to "prop2Value"
}
Una última palabra de advertencia: cuando se utiliza el método de configuración getconf(), crear su objeto de trabajo en primer lugar, a continuación, tire su configuración fuera - el constructor de empleo hace una copia del objeto Configruation aprobada en, por lo que si hace cambios a la referencia en el pasado, que el trabajo no verá esos cambios:
public int run(String args[]) {
Configuration conf = getConf();
conf.set("prop3", "blah");
Job job = new Job(conf); // job will have a deep copy of conf
conf.set("prop4", "dummy"); // here we're amending the original conf
job.getConfiguration().get("prop4"); // will resolve to null
}
mediante el uso de ToolRunner .run(), cualquier aplicación puede manejar hadoop standard command line options apoyo de Hadoop. ToolRunner usa GenericOptionsParser internamente. En resumen, las opciones específicas de hadoop que se proporcionan con la línea de comandos se analizan y se establecen en el objeto Configuration de la aplicación. Si simplemente usa main(), esto no sucederá automáticamente.
por ejemplo. Si usted dice:
% hadoop MyHadoopApp -D mapred.reduce.tasks=3
Entonces ToolRunner.run(new MyHadoopApp(), args)
establecerá automáticamente el parámetro de valor mapred.reduce.tasks
a 3 en el objeto Configuration
.
No tenemos privilegios adicionales que podamos obtener. Normalmente, las personas no usan simplemente main() en trabajos de hadoop. Usar ToolRunner .run() es una práctica estándar.
@ TejasP- Thanx much !! :) Sí, tenía en mente una idea tan vaga, pero ahora está clara ... –
- 1. Diferencia en Fa # y Clojure al llamar a funciones redefinidas
- 2. FileNotFoundException al llamar al servicio web
- 3. NullReferenceException al llamar NavigationContext
- 4. Llamar al 911 en Android
- 5. cómo llamar al constructor padre?
- 6. Excepción al intentar llamar (SIP)
- 7. Llamar explícitamente al constructor estático
- 8. diferencia al usar ROWNUM
- 9. llamar al constructor de otro constructor
- 10. milisegundos rompecabezas al llamar strptime en I
- 11. HttpContext vacío al llamar al servicio web WCF
- 12. ¿Cuándo NO llamar al método super() al anular?
- 13. JavaScript "no es una función" error al llamar al método
- 14. PHP5.3: error de "Llamar al método indefinido" al llamar a invocar desde la variable de clase
- 15. ¿Cómo after_save trabajo al guardar un objeto
- 16. System.AccessViolationException al llamar a C++ dll
- 17. Excepción al llamar a MessageDigest.getInstance ("SHA256")
- 18. GLKTextureLoader falla al llamar desde la actualización
- 19. ¿Llamar al código de Scala desde Java?
- 20. de boxeo en estructuras al llamar ToString()
- 21. Id no ser ajustado al llamar EntityManager.merge()
- 22. Comando para llamar al método desde viewmodel
- 23. No autorizado al llamar a Google GCM
- 24. ¿Cuándo llamar al lanzamiento en NSURLConnection delegate?
- 25. .NET error al llamar a System.Net.WebClient.UploadFileAsync
- 26. ERROR_BAD_LENGTH al llamar Process32First en Windows 7
- 27. NoSuchMethodError al llamar código java de Scala
- 28. didRegisterForRemoteNotificationsWithDeviceToken: no invoca al llamar a registerForRemoteNotificationTypes :?
- 29. Cómo llamar al destructor en C# XNA
- 30. Demo de AVAudioPlayer al llamar play
Bueno, esa fue una buena explicación con el código. No noté algunos puntos antes, como crear primero el objeto Job y luego obtener la configuración, pero ahora tiene sentido ... –