1

簡単な mapR プログラムのドライバー コードを以下に示します。

   import org.apache.hadoop.fs.Path;
   import org.apache.hadoop.io.IntWritable;
   import org.apache.hadoop.io.Text;
   import org.apache.hadoop.mapred.JobClient;
   import org.apache.hadoop.mapred.JobConf;
   import org.apache.hadoop.mapreduce.Job;
   import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
   import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

  @SuppressWarnings("deprecation")
  public class CsvParserDriver {
      @SuppressWarnings("deprecation")
      public static void main(String[] args) throws Exception
      {
          if(args.length != 2)
          {
              System.out.println("usage: [input] [output]");
              System.exit(-1);
          }

          JobConf conf = new JobConf(CsvParserDriver.class);
          Job job = new Job(conf);
          conf.setJobName("CsvParserDriver");

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

          conf.setMapperClass(CsvParserMapper.class);
          conf.setMapOutputKeyClass(IntWritable.class);
          conf.setMapOutputValueClass(Text.class);

          conf.setReducerClass(CsvParserReducer.class);
          conf.setOutputKeyClass(Text.class);
          conf.setOutputValueClass(Text.class);

          conf.set("splitNode","NUM_AE");

          JobClient.runJob(conf);
      }
  }

以下のコマンドを使用してコードを実行しています

hadoop jar CsvParser.jar CsvParserDriver /user/sritamd/TestData /user/sritamd/output

(上記のコマンドでそれぞれの jar とディレクトリがすべて作成されます)

次のエラーが表示されます

Exception in thread "main" org.apache.hadoop.mapred.InvalidJobConfException: Output directory not set in JobConf.
4

8 に答える 8

1

これは、古い API と新しい API が原因である可能性があります。

これが、構成を行うための新しい Job API です。

Step1: 新しい API ライブラリをインポートする

import org.apache.hadoop.mapreduce.Job

Step2: 新しい API ジョブで構成を行います。

val job = Job.getInstance(conf)
job.getConfiguration.set(TableOutputFormat.OUTPUT_TABLE, tableName)
job.setOutputFormatClass(classOf[TableOutputFormat[Put]])

これがあなたを助けることを願っています。

于 2014-05-22T15:54:03.993 に答える
1

apache-hadoop-tutorial で指定されているように、HDFS の入力ディレクトリと出力ディレクトリを作成しませんでした。

ローカル ディレクトリを使用する場合はfile:///user/sritamd/TestData、FS プレフィックスを追加します。

于 2012-10-06T23:34:40.293 に答える
0

コードをテストするために標準モード (クラスターなし) で Hadoop を実行している場合、出力パスに fs プレフィックスを付ける必要はありません。ジョブを初期化し、パスを設定できます。次のコードが機能するはずです (org.apache.hadoop.mapreduce.Job からの Job または org.apache.hadoop.mapred.JobConf からの JobConf を使用していることを確認してください)。

        Job job = new Job();
        job.setJobName("Job Name");
        job.setJarByClass(MapReduceJob.class);

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

        job.setMapperClass(MaxTemperatureMapper.class);
        job.setReducerClass(MaxTemperatureReducer.class);

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

        System.exit(job.waitForCompletion(true)? 0:1);
于 2016-12-29T10:58:12.953 に答える
0

HDFS ファイルシステムが作成されていない可能性があります。最初に特定のディレクトリをフォーマットする必要があります。そのディレクトリは、Hadoop のファイルの入力および出力として使用できます。

/usr/local/hadoop/bin/hadoop namenode -format

リンクを使用:- http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-single-node-cluster/

そして各ステップに従ってください

于 2014-04-20T11:33:46.990 に答える