J'ai un programme java simple appelé putmerge que j'essaie d'exécuter. J'y suis allé depuis 6 heures, j'ai fait des recherches sur de nombreux sites sur le web mais je n'ai pas trouvé de solution. Fondamentalement, j'essaie de construire le pot avec toutes les bibliothèques de classe avec la commande suivante:Programme Java personnalisé Hadoop
javac -classpath *:lib/* -d playground/classes playground/src/PutMerge.java
Et puis je construis le pot avec la commande suivante.
jar -cvf playground/putmerge.jar -C playground/classes/ .
Et puis je tente de l'exécuter avec la commande suivante:
bin/hadoop jar playground/putmerge.jar org.scd.putmerge "..inputPath.." "..outPath"
..
Exception in thread "main" java.lang.ClassNotFoundException: com.scd.putmerge
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:270)
at org.apache.hadoop.util.RunJar.main(RunJar.java:153)
J'ai essayé chaque permutation/combinaison pour exécuter ce pot simple, mais je toujours obtenir une sorte d'exception comme indiqué ci-dessus.
Mon code source:
package org.scd.putmerge;
import java.io.IOException;
import java.util.Scanner;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
/**
*
* @author Anup V. Saumithri
*
*/
public class PutMerge
{
public static void main(String[] args) throws IOException
{
Configuration conf = new Configuration();
FileSystem hdfs = FileSystem.get(conf);
FileSystem local = FileSystem.getLocal(conf);
Path inputDir = new Path(args[0]);
Path hdfsFile = new Path(args[1]);
try
{
FileStatus[] inputFiles = local.listStatus(inputDir);
FSDataOutputStream out = hdfs.create(hdfsFile);
for(int i=0; i<inputFiles.length; i++)
{
System.out.println(inputFiles[i].getPath().getName());
FSDataInputStream in = local.open(inputFiles[i].getPath());
byte buffer[] = new byte[256];
int bytesRead = 0;
while((bytesRead = in.read(buffer)) > 0)
{
out.write(buffer, 0, bytesRead);
}
in.close();
}
out.close();
}
catch(IOException ex)
{
ex.printStackTrace();
}
}
}
Brilliant! Cela a résolu mon problème. Merci beaucoup. Pour les enregistrements, le problème était avec ma spécification de paquetage dans la commande bin/hadoop jar. Je l'ai changé à org.scd.putmerge.PutMerge comme vous l'avez mentionné ci-dessus ...... et il a commencé à travailler .... – Ace