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

您没有创建 apache-hadoop-tutorial 中指定的 HDFS 输入和输出目录。

如果要使用本地目录file:///user/sritamd/TestData- 添加 FS 前缀。

于 2012-10-06T23:34:40.293 回答
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 回答
0

我认为您需要将输入和输出目录设置为conf而不是job喜欢:

FileInputFormat.setInputPaths(conf, new Path(args[0]));

FileOutputFormat.setOutputPath(conf, new Path(args[1]));
于 2013-09-19T00:08:01.477 回答
0

尝试这个

 Configuration configuration = new Configuration();
 Job job = new Job(configuration, "MyConfig");

然后

  FileInputFormat.setInputPaths(job, new Path(args[0]));
  FileOutputFormat.setOutputPath(job, new Path(args[1]));
于 2014-02-02T05:12:25.123 回答
0

可能不会创建您的 HDFS 文件系统,您需要首先格式化给定目录,并且该目录可以用作 Hadoop 文件的输入和输出

/usr/local/hadoop/bin/hadoop 名称节点-格式

使用链接:- http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-single-node-cluster/

并按照每一步

于 2014-04-20T11:33:46.990 回答
0

如果您在标准模式(无集群)下运行 hadoop 来测试代码,则不需要在输出路径中添加 fs 前缀。您可以初始化 Job 并设置路径。以下代码应该可以工作(确保您使用的是 Job(来自 org.apache.hadoop.mapreduce.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

我有同样的问题,但修复了它。我使用job.waitForCompletion(true)了在使用 .A 时导致 hbase 上的 spark 崩溃的问题,saveAsNewAPIHadoopFile(...)您不应该等待您的工作,因为它使用的是旧的 Hadoop api 而不是新的 API

于 2017-03-09T17:06:47.530 回答
0
  • 首先确保您的目录不存在。如果存在删除它。
  • 第二次在 Eclipse 中运行您的代码,如果它运行正常并给出ArrayOutofBounds警告。

否则,请检查您插入的库,确保插入所有 CLIENT 库或检查您的类是否在包中。

如果以上所有条件都满足您的工作将执行。

于 2017-09-23T16:22:03.843 回答