【问题标题】:FAILED Error: java.io.IOException: Initialization of all the collectors failedFAILED 错误:java.io.IOException:所有收集器的初始化失败
【发布时间】:2019-01-31 14:11:09
【问题描述】:

我在运行 MapReduce WordCount 作业时遇到了一些错误。

错误:java.io.IOException:所有收集器的初始化 失败的。最后一个收集器中的错误是:class wordcount.wordmapper at org.apache.hadoop.mapred.MapTask.createSortingCollector(MapTask.java:414) 在 org.apache.hadoop.mapred.MapTask.access$100(MapTask.java:81) 在 org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164) 在 java.security.AccessController.doPrivileged(Native Method) 在 javax.security.auth.Subject.doAs(Subject.java:415) atorg.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1693)at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158) 原因: java.lang.ClassCastException: 类 wordcount.wordmapperat java.lang.Class.asSubclass(Class.java:3165)at org.apache.hadoop.mapred.JobConf.getOutputKeyComparator(JobConf.java:892) 在 org.apache.hadoop.mapred.MapTask$MapOutputBuffer.init(MapTask.java:1005) 在 org.apache.hadoop.mapred.MapTask.createSortingCollector(MapTask.java:402)

【问题讨论】:

  • 分享你的字数代码

标签: hadoop mapreduce hadoop-yarn


【解决方案1】:

我发现我必须实现WritableComparable<> 接口才能使其工作。

import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.WritableComparable;
public class Pair implements WritableComparable<Pair> {

    public Text key1;

    public Text key2;

    public Pair() {
        key1 = new Text();
        key2 = new Text();
    }

    public Pair(String key1, String key2) {
        this.key1 = new Text(key1);
        this.key2 = new Text(key2);
    }

    public void setKey1(Text key1) {
        this.key1 = key1;
    }

    public void setKey2(Text key2) {
        this.key2 = key2;
    }

    public Text getKey1() {
        return key1;
    }

    public Text getKey2() {
        return key2;
    }

    @Override
    public boolean equals(Object b) {
        Pair p = (Pair) b;
        return p.key1.toString().equals(this.key1.toString())
                && p.key2.toString().equals(this.key2.toString());
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result
                + ((key1 == null) ? 0 : key1.toString().hashCode());
        result = prime * result
                + ((key2 == null) ? 0 : key2.toString().hashCode());
        return result;
    }

    @Override
    public String toString() {
        return "(" + key1 + ", " + key2 + ")";
    }

    @Override
    public void readFields(DataInput arg0) throws IOException {
        key1.readFields(arg0);
        key2.readFields(arg0);
    }

    @Override
    public void write(DataOutput arg0) throws IOException {
        key1.write(arg0);
        key2.write(arg0);
    }

    public int compareTo(Pair p1) {
        int k = this.key1.toString().compareTo(p1.key1.toString());

        if (k != 0) {
            return k;
        } else {
            return this.key2.toString().compareTo(p1.key2.toString());
        }
    }

}

【讨论】:

    【解决方案2】:

    我在运行 mapredue 作业时也发生了同样的事情。请导入正确的 Text 类。

    如果您导入了以下导入,您将收到该错误:

    import com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider.Text;
    

    改成这个。

    import org.apache.hadoop.io.Text;
    

    【讨论】:

      【解决方案3】:

      你的类必须有一个默认构造函数,如果你定义了任何参数化构造函数,默认构造函数会自动被删除。您应该明确定义此构造函数。你能显示你的代码 sn-p 吗?

      Class SampleClass
      {
        int a;
        public SampleClass(int param)
        {
          a = param;
        }
      
        public SampleClass()
        {
        }
      }
      

      【讨论】:

        猜你喜欢
        • 2022-10-09
        • 1970-01-01
        • 2018-04-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多