두 개의 노드 (마스터/슬레이브 및 슬레이브)로 구성된 hadoop 클러스터에서 샘플 Map/Reduce 작업을 빌드 중입니다. 다음은 내 사양은 다음과 같습니다Hadoop MapReduce 작업 입력 파일 ClassNotFound
$HADOOP_HOME = /usr/local/hadoop
My M/R classfiles path = $HADOOP_HOME/MyMapRed_classes
My Mapper classfile = $HADOOP_HOME/MyMapRed_classes/MyMapper
My Reducer classfile = $HADOOP_HOME/MyMapRed_classes/MyReducer
My Jar path = $HADOOP_HOME/MyMapred/MyMapRed.jar
My HDFS Input Path = /user/hadoop/MyMapRed/inputfile
My HDFS Output Path = /user/hadoop/MyMapRed_output
<myusername>@localhost:/usr/local/hadoop$ bin/hadoop jar $HADOOP_HOME/MyMapRed/MyMapRed.jar -input /user/hadoop/MyMapRed/inputfile -output /user/hadoop/MyMapRed_output/ -mapper $HADOOP_HOME/MyMapRed_classes/MyMapper -reducer $HADOOP_HOME/MyMapRed_classes/MyReducer
을 다음과 같이 나는 M/R 작업을 실행하고 있습니다 그러나 메시지
아래로 분명 입력 파일을 찾을 수없는 것 같다Exception in thread "main" java.lang.ClassNotFoundException: -input
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at org.apache.hadoop.util.RunJar.main(RunJar.java:149)
다음은 현재 사용중인 MyMapRed 클래스입니다. 입력으로 쌍 목록이 있습니다. 감속기는 그룹당 평균 Val을 제공해야합니다.
import java.io.IOException;
import java.util.Iterator;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.DoubleWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.FileInputFormat;
import org.apache.hadoop.mapred.FileOutputFormat;
import org.apache.hadoop.mapred.MapReduceBase;
import org.apache.hadoop.mapred.Mapper;
import org.apache.hadoop.mapred.OutputCollector;
import org.apache.hadoop.mapred.Reducer;
import org.apache.hadoop.mapred.Reporter;
import org.apache.hadoop.mapred.JobClient;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.TextInputFormat;
import org.apache.hadoop.mapred.TextOutputFormat;
public class MyMapRed {
public static class MyMapper extends MapReduceBase
implements Mapper<Text, Text, Text, DoubleWritable> {
private final static Text Group = new Text();
private final static DoubleWritable Val = new DoubleWritable();
public void map(Text key, Text value, OutputCollector<Text, DoubleWritable> output, Reporter reporter)
throws IOException {
String line = value.toString();
String[] KeyAndVal = line.split("\t",2);
Group.set(KeyAndVal[0]);
Val.set(Double.valueOf(KeyAndVal[1]));
output.collect(Group, Val);
}
}
public static class MyReducer extends MapReduceBase
implements Reducer<Text, DoubleWritable, Text, DoubleWritable> {
public void reduce(Text key, Iterator<DoubleWritable> values,
OutputCollector<Text, DoubleWritable> output, Reporter reporter)
throws IOException {
DoubleWritable val = new DoubleWritable();
double valSum = 0.0;
int valCnt = 0;
while (values.hasNext()) {
val = values.next();
valSum += val.get();
valCnt++;
}
if (valCnt>0)
valSum = valSum/valCnt;
output.collect(key, new DoubleWritable(valSum));
}
}
public static void main(String[] args) {
JobClient client = new JobClient();
JobConf conf = new JobConf(MyMapRed.class);
conf.setJobName("MyMapRed");
conf.setOutputKeyClass(Text.class);
conf.setOutputValueClass(DoubleWritable.class);
conf.setMapperClass(MyMapper.class);
conf.setReducerClass(MyReducer.class);
conf.setInputFormat(TextInputFormat.class);
conf.setOutputFormat(TextOutputFormat.class);
FileInputFormat.addInputPath(conf, new Path("input"));
FileOutputFormat.setOutputPath(conf, new Path("output"));
client.setConf(conf);
try {
JobClient.runJob(conf);
} catch (Exception e) {
e.printStackTrace();
}
}
}
아무도 내가 제기 한 ClassNotFoundException에 대해 누락 된 부분을 제안 할 수 있습니까?
은 당신의 맵퍼 및 감속기는 자바 코드로 작성되어 Java로 작성된 경우 필요하지 않습니다 스트리밍을 사용하려고 시도하는 것 같아? 그렇다면 왜 스트리밍을 사용하려고합니까? –
예, Java를 사용하고 있습니다. 현재 이클립스 3.5.2 (Galileo)를 사용하고 있으며 이클립스에서 하둡에서 MR 작업을 실행할 방법이 없습니다. 나는 hadoop-common-project (SVN link : http://svn.apache.org/repos/asf/hadoop/common/trunk/hadoop-common-project/)를 빌드하기 위해 Maven을 통합하려고 시도했다. MR 직장에서 이클립스지만 내가 어제 다른 스레드 링크 http://stackoverflow.com/questions/11164370/maven-archetypegenerate-failure-caused-by-org-apache-maven-plugin-mojofailureex에 게시 오류가 발생했습니다. 확인하려면 스트리밍을 사용하여 M/R이 실제로 작동하는지 확인하십시오. – somnathchakrabarti