当前位置: 首页 > 面试题库 >

Hadoop的java.lang.VerifyError

胡泓
2023-03-14
问题内容

我正在使用Hadoop的Java项目中工作,并且有一个java.lang.VerifyError,我不知道如何解决它。我看到有人遇到相同类型的问题,但没有答案,或者解决方案在我的情况下不起作用。

我的课 :

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
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.output.NullOutputFormat;

public class GetStats {

    public static List<Statistique> stats; // class with one String an one int

    public static class TokenizerMapper extends
            Mapper<Object, Text, Text, IntWritable> {

        private final static IntWritable one = new IntWritable(1);
        private Text word = new Text();

        public void map(Object key, Text value, Context context)
                throws IOException, InterruptedException {
            StringTokenizer itr = new StringTokenizer(value.toString());
            while (itr.hasMoreTokens()) {
                word.set(itr.nextToken());
                context.write(word, one);
            }
        }
    }

    public static class IntSumReducer extends
            Reducer<Text, IntWritable, Text, IntWritable> {
        private IntWritable result = new IntWritable();

        public void reduce(Text key, Iterable<IntWritable> values,
                Context context) throws IOException, InterruptedException {
            int sum = 0;
            for (IntWritable val : values) {
                sum += val.get();
            }
            result.set(sum);
            if (key.toString().contains("HEAD")
                    || key.toString().contains("POST")
                    || key.toString().contains("GET")
                    || key.toString().contains("OPTIONS")
                    || key.toString().contains("CONNECT"))
                GetStats.stats.add(new Statistique(key.toString().replace("\"", ""), sum));
            context.write(key, result);
        }
    }

    public static void main(String[] args) throws Exception {
        System.out.println("Start wc");
        stats = new ArrayList<>();

//      File file = new File("err.txt");
//      FileOutputStream fos = new FileOutputStream(file);
//      PrintStream ps = new PrintStream(fos);
//      System.setErr(ps);

        Configuration conf = new Configuration();
        Job job = Job.getInstance(conf, "word count");
        job.setJarByClass(GetStats.class);
        job.setMapperClass(TokenizerMapper.class);
//      job.setCombinerClass(IntSumReducer.class);
        job.setReducerClass(IntSumReducer.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
        FileInputFormat.addInputPath(job, new Path("input"));
        job.setOutputFormatClass(NullOutputFormat.class);

        job.waitForCompletion(true);

        System.out.println(stats);
        System.out.println("End");
    }
}

和错误:

Exception in thread "main" java.lang.VerifyError: Bad type on operand stack
Exception Details:
  Location:
    org/apache/hadoop/mapred/JobTrackerInstrumentation.create(Lorg/apache/hadoop/mapred/JobTracker;Lorg/apache/hadoop/mapred/JobConf;)Lorg/apache/hadoop/mapred/JobTrackerInstrumentation; @5: invokestatic
  Reason:
    Type 'org/apache/hadoop/metrics2/lib/DefaultMetricsSystem' (current frame, stack[2]) is not assignable to 'org/apache/hadoop/metrics2/MetricsSystem'
  Current Frame:
    bci: @5
    flags: { }
    locals: { 'org/apache/hadoop/mapred/JobTracker', 'org/apache/hadoop/mapred/JobConf' }
    stack: { 'org/apache/hadoop/mapred/JobTracker', 'org/apache/hadoop/mapred/JobConf', 'org/apache/hadoop/metrics2/lib/DefaultMetricsSystem' }
  Bytecode:
    0000000: 2a2b b200 03b8 0004 b0

    at org.apache.hadoop.mapred.LocalJobRunner.<init>(LocalJobRunner.java:573)
    at org.apache.hadoop.mapred.JobClient.init(JobClient.java:494)
    at org.apache.hadoop.mapred.JobClient.<init>(JobClient.java:479)
    at org.apache.hadoop.mapreduce.Job$1.run(Job.java:563)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:415)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
    at org.apache.hadoop.mapreduce.Job.connect(Job.java:561)
    at org.apache.hadoop.mapreduce.Job.submit(Job.java:549)
    at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:580)
    at hadoop.GetStats.main(GetStats.java:79)

你有什么主意吗 ?如果您需要更多帮助我的问题,请问。


问题答案:

我解决了我的问题。

导入的jar很好,但是我之前尝试过的另一个版本(可能是较旧的版本)也位于项目文件夹中。当我调用该类时,似乎使用了较旧版本的jar。另外,那个罐子比我在课堂上想要的那个罐子还要早。我从项目文件夹中删除了较旧的jar,它起作用了。



 类似资料:
  • 顺便说一下,对于给定的类,我如何知道Maven中哪个工件包含它?例如,哪个包含org.apache.hadoop.io.text?

  • Hadoop 是一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有着高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高传输率(high throughpu

  • 问题内容: 我是Hadoop的新手。我正在尝试Wordcount程序。 现在尝试使用多个输出文件。这个链接帮助我做到了。http://hadoop.apache.org/common/docs/r0.19.0/api/org/apache/hadoop/mapred/lib/MultipleOutputs.html 在我的司机课上 而我的降低班级变成了 一切正常,但是我得到了很多文件(对于每个ma

  • 我正在使用Hadoop mapreduce编写代码来获取不同长度的子字符串。示例给出了字符串“ZYXCBA”和长度3。我的代码必须返回所有可能的字符串,长度为3(“ZYX”、“YXC”、“XCB”、“CBA”),长度为4(“ZYXC”、“YXCB”、“XCBA”),最后返回长度为5(“ZYXCB”、“YXCBA”)。 在map阶段,我做了以下工作: key=我想要的子字符串的长度 value=“Z

  • 在我的map函数中,我试图从distributedcache中读取一个文件,将其内容加载到哈希映射中。 MapReduce作业的sys输出日志打印HashMap的内容。这表明它已经找到了文件,已经加载到数据结构中并执行了所需的操作。它遍历列表并打印其内容。从而证明手术是成功的。 感谢帮助。 干杯!

  • 本文向大家介绍Hadoop 1和Hadoop 2之间的区别,包括了Hadoop 1和Hadoop 2之间的区别的使用技巧和注意事项,需要的朋友参考一下 我们知道,为了维护大数据并以不同的方式从此数据获取相应的报告,我们使用了Hadoop,它是Apache Software Foundation基于Java编程语言的开源框架。 现在,Apache引入了名为Hadoop 2的下一个Hadoop版本,因