2017-05-07 9 views
0

テキストファイルで単純なMapReduceを実行したいが出力しない。これは私のコードです:MapReduceは出力を生成しません

import java.io.IOException; 
import java.util.StringTokenizer; 
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; 

public class WordCount { 

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

private final static IntWritable one = new IntWritable(1); 
private Text word = new Text(); 

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); 
    } 
} 
} 

    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(); 
    Job job = Job.getInstance(conf, "word count"); 
    job.setJarByClass(WordCount.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(args[0])); 
    FileOutputFormat.setOutputPath(job, new Path(args[1])); 
    System.exit(job.waitForCompletion(true) ? 0 : 1); 
    } 
} 

私はjarファイルの実行中にこのエラーが表示さ:

17/05/07 23:10:53 WARN mapred.LocalJobRunner: job_local973452829_0001 
java.lang.Exception:  org.apache.hadoop.mapreduce.task.reduce.Shuffle$ShuffleError: error in shuffle in localfetcher#1 
at org.apache.hadoop.mapred.LocalJobRunner$Job.runTasks(LocalJobRunner.java:462) 
at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:529) 
Caused by: org.apache.hadoop.mapreduce.task.reduce.Shuffle$ShuffleError: error in shuffle in localfetcher#1 
at org.apache.hadoop.mapreduce.task.reduce.Shuffle.run(Shuffle.java:134) 
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:376) 
at org.apache.hadoop.mapred.LocalJobRunner$Job$ReduceTaskRunnable.run(LocalJobRunner.java:319) 
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
at java.lang.Thread.run(Thread.java:748) 
Caused by: java.io.FileNotFoundException: /app/hadoop/tmp%20/mapred/local/localRunner/hduser/jobcache/job_local973452829_0001/attempt_local973452829_0001_m_000000_0/output/file.out.index 
at org.apache.hadoop.fs.RawLocalFileSystem.open(RawLocalFileSystem.java:193) 
at org.apache.hadoop.fs.FileSystem.open(FileSystem.java:764) 
at org.apache.hadoop.io.SecureIOUtils.openFSDataInputStream(SecureIOUtils.java:156) 
at org.apache.hadoop.mapred.SpillRecord.<init>(SpillRecord.java:70) 
at org.apache.hadoop.mapred.SpillRecord.<init>(SpillRecord.java:62) 
at org.apache.hadoop.mapred.SpillRecord.<init>(SpillRecord.java:57) 
at org.apache.hadoop.mapreduce.task.reduce.LocalFetcher.copyMapOutput(LocalFetcher.java:123) 
at org.apache.hadoop.mapreduce.task.reduce.LocalFetcher.doCopy(LocalFetcher.java:101) 
at org.apache.hadoop.mapreduce.task.reduce.LocalFetcher.run(LocalFetcher 

は私のコードでは、問題は何ですか?私は(入力名)(出力名)

これら

Hadoopのジャー(jarファイル名)のようなコマンドHDFSを書くためのHadoop 2.4

答えて

0

これはあなたのエラーの一部です:

Caused by: java.io.FileNotFoundException: /app/hadoop/tmp%20/mapred/local/localRunner/hduser/jobcache/job_local973452829_0001/attempt_local973452829_0001_m_000000_0/output/file.out.index

Hadoopのは一時出力ファイルを格納することができませんので、私は(マッパーから)それはあなたのcore-site.xmlで構成プロパティhadoop.tmp.dirに問題があります推測していますあなたのディスクに。

このプロパティを削除すると、hadoopが中間出力を保存するための独自の一時ディレクトリを作成したり、適切な権限を持つディレクトリに設定したりできます。

0

試みでのUbuntu 14.04の下だか、にする前にチェックしませんでしたあなたの(jarファイル)をエクスポートすると警告が表示されましたか?

関連する問題