当前位置: 首页 > 知识库问答 >
问题:

在HDP 2.0上运行hadoop map reduce java程序时出错

丁勇
2023-03-14

我在java中运行mapreduce程序,它编译成功,但在运行时我使用的是EC2上的Hortonworks HDP2.0。

    package edu.osu.cse.ysmart.TestQuery;
    import java.io.IOException;
    import java.util.*;
    import java.text.*;
    import org.apache.hadoop.fs.Path;
    import org.apache.hadoop.conf.*;
    import org.apache.hadoop.io.*;
    import org.apache.hadoop.util.Tool;
    import org.apache.hadoop.util.ToolRunner;
    import org.apache.hadoop.mapreduce.Job;
    import org.apache.hadoop.mapreduce.Mapper;
    import org.apache.hadoop.mapreduce.Reducer;
    import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
    import org.apache.hadoop.mapreduce.lib.input.FileSplit;
    import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
    import org.apache.hadoop.mapreduce.lib.output.MultipleOutputs;
    import org.apache.hadoop.mapreduce.lib.partition.*;


    public class TestQuery1 extends Configured implements Tool{

            public static class Map extends Mapper<Object, Text,NullWritable,Text>{

                    public void map(Object key, Text value, Context context) throws IOException,InterruptedException{

                            String line = value.toString();
                            String[] line_buf = new String[3];
                            int prev=0,i=0,n=0;
                            for(i=0,n=0,prev=0;i<line.length();i++){

                                    if (line.charAt(i) == '|'){
                                            line_buf[n] = line.substring(prev,i);
                                            n = n+1;
                                            prev = i+1;
                                    }
                                    if(n == 3)
                                            break;
                            }

                            if(n<3)
                                    line_buf[n] = line.substring(prev,i);
                            if(line_buf[2].compareTo("Abid Khan") == 0){

                                    NullWritable key_op = NullWritable.get();
                                    context.write(key_op , new Text(line_buf[1]+ "|" ));
                            }
                    }

            }

            public int run(String[] args) throws Exception{

                    Configuration conf = new Configuration();
                    Job job = new Job(conf,"TestQuery1");
                    job.setJarByClass(TestQuery1.class);
                    job.setMapOutputKeyClass(NullWritable.class);
                    job.setMapOutputValueClass(Text.class);
                    job.setOutputKeyClass(NullWritable.class);
                    job.setOutputValueClass(Text.class);
                    job.setMapperClass(Map.class);
                    FileInputFormat.addInputPath(job, new Path(args[0]));
                    FileOutputFormat.setOutputPath(job, new Path(args[1]));
                    return (job.waitForCompletion(true) ? 0 : 1);
            }

            public static void main(String[] args) throws Exception {

                            int res = ToolRunner.run(new Configuration(), new TestQuery1(), args);
                            System.exit(res);
            }

    }

好心的帮助

共有1个答案

赫连正初
2023-03-14

从异常跟踪中可以看出,您试图在空对象上调用一个方法

attempt_1388768204803_0006_m_000000_0, Status : FAILED Error: java.lang.NullPointerException at edu.osu.cse.ysmart.TestQuery.TestQuery1$Map.map(TestQuery1.java:42) at 

从源代码来看,以下比较失败:

if(line_buf[2].compareTo("Abid Khan") == 0)

未填充line_buf[2],因此出现空指针异常。您可以在if条件之前打印line_buf[2]的值,以查看是否有值。这将帮助您调试问题。

 类似资料:
  • > 我开发了一个javaFx应用程序,并在Mac的com.zenjava maven插件的帮助下创建了该应用程序的中间包。 bundle是用JDK:1.7.0_40.jdk创建的

  • 嘿,伙计们,我正在跟踪http://www.tutorialspoint.com/hadoop/hadoop_mapreduce.htm。使用这个运行程序后 我收到以下错误: 2004年9月16日20:32:14警告用户。NativeCodeLoader:无法为您的平台加载本机hadoop库。。。在适用的情况下使用内置java类 2004年9月16日20:32:15信息配置。弃用:会话。id已弃用

  • 嘿,伙计们,我试图ru我的模拟器,但当我运行它,它给我这个错误: “安装下列Android SDK包失败,因为某些许可证尚未被接受。构建-工具;30.0.2 Android SDK构建-工具30.0.2若要构建此项目,请接受SDK许可协议并使用Android Studio SDK管理器安装缺少的组件。或者,若要将许可协议从一个工作站转移到另一个工作站,请参见http://d.Android.com

  • 在Android mobile上运行应用程序时出现此错误 正在调试模式下在DRA LX2上启动lib\main.dart...正在运行分级任务“Assemble Debug”...√build build\app\outputs\flutter-apk\app-debug.apk。正在安装build\app\outputs\flutter-apk\app.apk...错误:ADB退出,退出代码为1

  • 错误:container_linux.go:247:启动容器进程导致“exec:\”-w\“:在$path中找不到可执行文件”c:\program files\docker toolbox\docker.exe:来自守护进程的错误响应:oci运行时错误:container_linux.go:247:启动容器进程导致“exec:\”-w\“:在$path中找不到可执行文件”。

  • 开始调试时,出现以下错误: 正在启动lib\main。调试模式下ONEPLUS A5000上的dart。。。lib\main。dart:1E/AndroidRuntime(11211):以书面形式命名,pkgName:com。刚出现的包裹azabazar E/AndroidRuntime(11211):致命异常:主E/AndroidRuntime(11211):进程:com。刚出现的包裹阿扎巴扎,