2016-04-24 53 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

這應該是一個評論,而不是答案。 –