java - instalar - hdfs
Hadoop accede a bibliotecas de terceros desde el sistema de archivos local de un nodo de Hadoop (2)
Tengo un archivo jar en todos mis nodos Hadoop en /home/ubuntu/libs/javacv-0.9.jar
, con algunos otros archivos jar.
Cuando mi aplicación MapReduce se está ejecutando en los nodos de Hadoop , recibo esta excepción
java.io.FileNotFoundException: File does not exist hdfs://192.168.0.18:50000/home/ubuntu/libs/javacv-0.9.jar
¿Cómo puedo resolver esta excepción? ¿Cómo puede mi jar que se ejecuta en Hadoop acceder a bibliotecas de terceros desde el sistema de archivos local del nodo de Hadoop?
Otra opción sería usar addFileToClassPath(new Path("/myapp/mylib.jar"), job);
caché distribuida addFileToClassPath(new Path("/myapp/mylib.jar"), job);
para enviar los archivos Jar que se deben agregar a la ruta de clases de las tareas del asignador y del reductor.
Nota: asegúrese de copiar el archivo jar a HDFS primero.
Incluso podría agregar archivos jar a la ruta de clase mediante el argumento de línea de comandos de -libjars <jar_file>
.
Nota: asegúrese de que su aplicación MapReduce implemente ToolRunner para permitir la opción
-libjars
desde la línea de comandos.
Debe copiar su archivo a HDFS y no al sistema de archivos local.
Para copiar archivos a HDFS, debe usar:
hadop fs -put localfile hdfsPath
Otra opción es cambiar la ruta del archivo a:
file:///home/ubuntu/libs/javacv-0.9.jar
Para agregar archivos jar a classpath, eche un vistazo a DistributedCache :
DistributedCache.addFileToClassPath(new Path("file:///home/ubuntu/libs/javacv-0.9.jar"), job);
Es posible que deba iterar sobre todos los archivos jar en ese directorio.