2016-04-24 57 views
0

我试图在Java运行一个简单的MapReduce 我得到这个错误:Hadoop的:不支持的名字:有计划,但相对路径部分错误

Unsupported name: has scheme but relative path-part

如何我可以纠正我代码或我的hadoop使它工作?

让我知道是否需要提供更多信息。

我复制在/文件夹中是这样的:

hadoop fs -copyFromLocal c:\hwork\recipeitems-latest.json /in 

我已经改变了文件夹/的权限

hadoop fs -chmod -R 777 /in 

我基本上做这个命令在提示(是的,我现在使用Windows):

hadoop jar c:\hwork\Recipe.jar Recipe /in /out 

Java代码:

import java.io.IOException; 

import org.apache.hadoop.conf.Configuration; 
import org.apache.hadoop.fs.Path; 
import org.apache.hadoop.io.IntWritable; 
import org.apache.hadoop.io.Text; 
import org.apache.hadoop.mapreduce.Job; 
import org.apache.hadoop.mapreduce.Mapper; 
import org.apache.hadoop.mapreduce.Reducer; 
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; 
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; 
import org.apache.hadoop.util.GenericOptionsParser; 

import com.google.gson.Gson; 
public class Recipe { 

    public static class TokenizerMapper 
      extends Mapper<Object, Text, Text, IntWritable>{ 

     private final static IntWritable one = new IntWritable(1); 
     private Text word = new Text(); 
     Gson gson = new Gson(); 
     public void map(Object key, Text value, Context context 
     ) throws IOException, InterruptedException { 
      /* StringTokenizer itr = new StringTokenizer(value.toString()); 
      while (itr.hasMoreTokens()) { 
       word.set(itr.nextToken()); 
       context.write(word, one); 
      } */ 


      Roo roo=gson.fromJson(value.toString(),Roo.class); 
      if(roo.cookTime!=null) 
      { 
      word.set(roo.cookTime); 
      } 
      else 
      { 
       word.set("none"); 
      } 
      context.write(word, one); 
     } 
    } 

    public static class IntSumReducer 
      extends Reducer<Text,IntWritable,Text,IntWritable> { 
     private IntWritable result = new IntWritable(); 

     public void reduce(Text key, Iterable<IntWritable> values, 
          Context context 
     ) throws IOException, InterruptedException { 
      int sum = 0; 
      for (IntWritable val : values) { 
       sum += val.get(); 
      } 
      result.set(sum); 
      context.write(key, result); 
     } 
    } 

    public static void main(String[] args) throws Exception { 
     Configuration conf = new Configuration(); 
     String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs(); 
     /* for (String string : otherArgs) { 
      System.out.println(string); 
     }*/ 
     if (otherArgs.length != 2) { 
      System.err.println("Usage: recipe <in> <out>"); 
      System.exit(2); 
     } 
     @SuppressWarnings("deprecation") 
     Job job = new Job(conf, "Recipe"); 

     job.setJarByClass(Recipe.class); 
     job.setMapperClass(TokenizerMapper.class); 
     job.setCombinerClass(IntSumReducer.class); 
     job.setReducerClass(IntSumReducer.class); 
     job.setOutputKeyClass(Text.class); 
     job.setOutputValueClass(IntWritable.class); 
     FileInputFormat.addInputPath(job, new Path(otherArgs[0])); 
     FileOutputFormat.setOutputPath(job, new Path(otherArgs[1])); 
     // FileInputFormat.addInputPath(job, new Path("hdfs://127.0.0.1:9000/in")); 
     // FileOutputFormat.setOutputPath(job, new Path("hdfs://127.0.0.1:9000/out")); 
     System.exit(job.waitForCompletion(true) ? 0 : 1); 
     // job.submit(); 
    } 
} 

class Id 
{ 

    public String oid; 
} 


class Ts 
{ 

    public long date ; 
} 

class Roo 
{ 

    public Id _id ; 

    public String name ; 

    public String ingredients ; 

    public String url ; 

    public String image ; 

    public Ts ts ; 

    public String cookTime; 

    public String source ; 

    public String recipeYield ; 
    public String datePublished; 

    public String prepTime ; 

    public String description; 
} 

回答

0

如何袋鼠的值是越来越使用小豆袋鼠初始化= gson.fromJson(value.toString(),Roo.class)。

另外,你可以给你一个输入文件的例子列表,你传递的驱动代码。

+0

这应该是一个评论,而不是答案。 –