You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hadoop MapReduce程序运行失败,报错:FAILED due to: NA 求助

Hadoop MapReduce电影分析程序运行失败排查

我尝试运行以下用于电影分析的Hadoop MapReduce程序:

public static class MovieFilterMapper extends Mapper<LongWritable, Text, Text, IntWritable> {

    private Text movieId = new Text();
    private IntWritable one = new IntWritable(1);

    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        String[] columns = value.toString().split(",");

        if (columns.length >= 8) {
            double popularity = Double.parseDouble(columns[5]);
            double voteAverage = Double.parseDouble(columns[6]);
            double voteCount = Double.parseDouble(columns[7]);

            if (popularity > 500.0 && voteAverage > 8.0 && voteCount > 10000.0) {
                movieId.set(columns[1]); // 假设'id'列存储电影ID
                context.write(movieId, one);
            }
        }
    }
}

public static class MovieCountReducer extends Reducer<Text, IntWritable, Text, IntWritable> {

    @Override
    protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
        int sum = 0;
        for (IntWritable value : values) {
            sum += value.get();
        }
        context.write(key, new IntWritable(sum));
    }
}

public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
    Configuration conf = new Configuration();
    Job job = Job.getInstance(conf, "Movie Analysis");
    job.setJarByClass(MovieAnalysis.class);
    job.setMapperClass(MovieFilterMapper.class);
    job.setReducerClass(MovieCountReducer.class);
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);
    FileInputFormat.addInputPath(job, new Path(args[0]));
    FileOutputFormat.setOutputPath(job, new Path(args[1]));
    System.exit(job.waitForCompletion(true) ? 0 : 1);
}

程序运行失败,错误信息为:Hadoop mapreduce code failed with state FAILED due to: NA,报错截图如下:
Hadoop运行报错截图

可能的故障原因及解决方法

1. 输入数据格式问题

  • 代码假设输入数据用逗号分隔且至少8列,但实际数据可能存在:
    • 部分行列数不足8列,或第5、6、7列是空值/非数字格式,触发Double.parseDouble异常
    • 字段包含逗号(比如带逗号的电影名称),导致split(",")分割逻辑错误
  • 解决方法:
    • 校验输入数据格式,确保所有行满足列数要求,且目标列是有效数字
    • 改用Apache Commons CSV等专业库解析CSV数据,避免手动分割的局限性

2. 作业配置与打包问题

  • 主类MovieAnalysis未正确打包进Jar,或setJarByClass指定的类路径错误
  • Hadoop集群环境变量配置异常,导致作业无法加载依赖类
  • 解决方法:
    • 打包Jar时确保包含MovieAnalysis主类及所有内部类
    • 运行作业时指定正确的Jar路径,检查HADOOP_CLASSPATH等环境变量配置

3. 输出路径已存在

  • Hadoop要求输出目录必须不存在,若args[1]指定的路径已存在,作业会直接失败
  • 解决方法:
    • 运行前手动删除输出目录,或在代码中添加路径判断逻辑:
      Path outputPath = new Path(args[1]);
      FileSystem fs = FileSystem.get(conf);
      if (fs.exists(outputPath)) {
          fs.delete(outputPath, true);
      }
      FileOutputFormat.setOutputPath(job, outputPath);
      

4. 日志缺失导致错误信息模糊

  • 错误提示中的due to: NA说明未获取到具体异常,需查看Hadoop作业日志定位问题
  • 解决方法:
    • 执行yarn logs -applicationId <你的应用ID>查看作业日志
    • 检查NodeManager或ResourceManager的本地日志文件,获取完整异常堆栈

内容的提问来源于stack exchange,提问作者Veen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 15:45:13