gpt4 book ai didi

Hadoop:AWS EMR 作业中的输入和输出路径

转载 作者:可可西里 更新时间:2023-11-01 14:19:40 26 4
gpt4 key购买 nike

我正在尝试在 Amazon Elastic Mapreduce 中运行 Hadoop 作业。我的数据和 jar 位于 aws s3 中。当我设置工作流程时,我将 JAR 参数作为

s3n://my-hadoop/input s3n://my-hadoop/output

下面是我的hadoop main函数

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

但是我的工作流程失败并在 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 中指定我的输入和输出路径?

最佳答案

所以基本上这是在尝试创建可执行 jar 时 not-defining-the-main-class 的典型错误。当你不让 jar 知道主类时,第一个参数被认为是主类,因此这里的错误。

因此请确保在创建可执行 jar 时,在 list 中指定主类。

分别将 args[1] 和 args[2] 用于输入和输出,并执行如下所示的 hadoop 步骤:

ruby elastic-mapreduce -j $jobflow --jar s3:/my-jar-location/myjar.jar --arg com.somecompany.MyMainClass --arg s3:/input --arg s3:/output

关于Hadoop:AWS EMR 作业中的输入和输出路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14866945/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com