나는 실행하려고하는 putmerge라는 간단한 자바 프로그램을 가지고있다. 나는 6hrs를 위해 그것에이고, 웹에 많은 장소를 연구하고 그러나 해결책을 찾아 낼 수 없었다. 기본적으로 다음 명령을 사용하여 모든 클래스 라이브러리가있는 jar를 빌드하려고합니다.Hadoop Custom Java Program
javac -classpath *:lib/* -d playground/classes playground/src/PutMerge.java
그런 다음 jar 파일을 다음 명령으로 빌드합니다.
jar -cvf playground/putmerge.jar -C playground/classes/ .
그리고 나는 다음과 같은 명령을 실행하려고 :
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)
, 나는 항상 위에 표시된 것처럼 예외를 얻으십시오.
내 소스 코드 :
는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();
}
}
}
브릴리언트! 그게 내 문제를 해결해 줬어. 엄청 고마워. 레코드의 경우 bin/hadoop jar 명령 내 패키지 사양에 문제가 있습니다. 위에서 언급 한 것처럼 org.scd.putmerge.PutMerge로 바꿨습니다. – Ace