我试图在amazon弹性mapreduce中运行hadoop作业。我的数据和jar位于awss3中。当我设置作业流时,我将jar参数作为
s3n://my-hadoop/input s3n://my-hadoop/output
下面是我的hadoop主要功能
public static void main(String[] args) throws Exception
{
Configuration conf = new Configuration();
Job job = new Job(conf, "MyMR");
job.setJarByClass(MyMR.class);
job.setMapperClass(MyMapper.class);
job.setReducerClass(CountryReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
job.setInputFormatClass(TextInputFormat.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
但是,我的jobflow在stderr中失败了
Exception in thread "main" java.lang.ClassNotFoundException: s3n://my-hadoop/input
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at org.apache.hadoop.util.RunJar.main(RunJar.java:180)
那么如何在aws emr中指定输入和输出路径呢?
2条答案
按热度按时间pgvzfuti1#
我遇到了与您相同的问题,这是因为您在提交自定义jar文件时需要3个aruguments(而不是2个)。第一个是主类名,第二个是输入文件的inputpath,第三个是输出文件夹的outputpath。我想你可能解决了这个问题。
1cklez4t2#
因此,基本上这是一个典型的错误,即在尝试创建可执行jar时没有定义主类。当您不让jar知道主类时,第一个参数被认为是主类,因此这里出现错误。
因此,确保在创建可执行jar时,在清单中指定main类。
或
分别使用args[1]和args[2]作为输入和输出,并执行如下hadoop步骤: