2016-07-05 2 views
0

私はDriver、Mapper、Reducerクラスを持っています。 MapperクラスとReducerクラスのSystem.out.printlnステートメントは、Logs of Yarnに表示されます。一部のクラスのSystem.out.println()ステートメントがYarnログに表示されないのはなぜですか?

驚いたことに、ドライバプログラムのprintln文が表示されません。 これはprintlnステートメントを持つドライバプログラムです。

この奇妙な動作がなぜ発生するかについてのご意見はありますか?

import java.io.*; 

import org.apache.hadoop.io.*; 

import org.apache.hadoop.conf.Configuration; 
import org.apache.hadoop.fs.Path; 

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 Weblogs { 

public static void main(String[] args) throws Exception 
{ 
     Configuration conf = new Configuration(); 
     Job job = new Job(); 
     job.setJobName("WebLog Reader"); 

     job.setJarByClass(Weblogs.class); 

     job.setMapperClass(WebLogMapper.class); 
     job.setReducerClass(WebLogReducer.class); 


     job.setOutputKeyClass(Text.class); 
     job.setOutputValueClass(IntWritable.class); 

     job.setMapOutputKeyClass(WebLogWritable.class); 
     job.setMapOutputValueClass(IntWritable.class); 

     FileInputFormat.addInputPath(job, new Path(args[0])); 
     FileOutputFormat.setOutputPath(job, new Path(args[1])); 

     //setting the second argument as a path in a path variable    
     Path outputPath = new Path(args[1]); 

     System.out.println(args[1]); 

     //deleting the output path automatically from hdfs so that we don't have delete it explicitly   
     outputPath.getFileSystem(conf).delete(outputPath); 

     System.exit(job.waitForCompletion(true) ? 0 : 1); 
} 
+0

いずれか1つを入力してください。 printlnステートメントはドライバクラスにのみ表示されます。 –

答えて

0

これはあなたの仕事を提出しているかに依存し、私はあなたが右のビン/ HadoopのジャーyourJar.jarを使用して、それを提出していると思いますか?

あなたのSystem.out.println()はあなたのmainメソッドでしか利用できません。マッパー/レデューサーが別のJVMのhadoopの中で実行され、すべての出力が特殊なログファイル(出力/ファイル)。

ログログ= LogFactory.getLog(YOUR_MAPPER_CLASS.class) ので、いくつかの情報のロギングを実行します。:

log.info(「あなたのメッセージを」)そして、私は使用して、ログ、独自のApache-コモンズを使用することをお勧めします; "ローカル"モードの場合、シェルでこのログを見ることができます。そうしないと、このログはタスクが実行されるマシンのどこかに保存されます。これらのログファイルを見るには、jobtrackerのWeb UIを使用してください。非常に便利です。デフォルトでジョブトラッカーはポート50030上で動作します。

関連する問題