[HADOOP] 그러한 메소드가 없다는 예외 Hadoop <init>
HADOOP그러한 메소드가 없다는 예외 Hadoop
명령 프롬프트에서 Hadoop .jar 파일을 실행할 때 StockKey 메서드와 같은 메서드가 없다는 예외를 throw합니다.
StockKey는 내 자신의 유형의 키에 대해 정의 된 내 사용자 정의 클래스입니다.
다음은 예외입니다.
12/07/12 00:18:47 INFO mapred.JobClient: Task Id :
attempt_201207082224_0007_m_000000_1, Status : FAILED
java.lang.RuntimeException: java.lang.NoSuchMethodException: SecondarySort$StockKey.
<init>()
at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:115)
at org.apache.hadoop.io.WritableComparator.newKey(WritableComparator.java:109)
at org.apache.hadoop.io.WritableComparator.<init>(WritableComparator.java:95)
at org.apache.hadoop.io.WritableComparator.get(WritableComparator.java:51)
at org.apache.hadoop.mapred.JobConf.getOutputKeyComparator(JobConf.java:795)
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.<init>(MapTask.java:817)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:383)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:325)
at org.apache.hadoop.mapred.Child$4.run(Child.java:270)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at
org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1127)
at org.apache.hadoop.mapred.Child.main(Child.java:264)
해결법
-
==============================
1.키 클래스에 빈 기본 생성자를 제공해야합니다. 하둡은 리플렉션을 사용하고 있으며 피드에 사용할 매개 변수를 추측 할 수 없습니다.
키 클래스에 빈 기본 생성자를 제공해야합니다. 하둡은 리플렉션을 사용하고 있으며 피드에 사용할 매개 변수를 추측 할 수 없습니다.
따라서 기본 생성자를 추가하십시오.
public StockKey(){}
-
==============================
2.writable, mappers, reducers 등의 클래스에서 이와 같은 오류가 발생할 때 검사해야 할 또 다른 사항이 있습니다.
writable, mappers, reducers 등의 클래스에서 이와 같은 오류가 발생할 때 검사해야 할 또 다른 사항이 있습니다.
클래스가 내부 클래스 인 경우 정적으로 선언되어야합니다 (즉, 내부 클래스의 인스턴스가 필요하지 않음). 그렇지 않으면 Hadoop은 내부 클래스를 인스턴스화 할 수없고 동일한 오류가 발생합니다. 즉, 0 인수 생성자가 필요합니다.
-
==============================
3.스칼라의 경우에도 아래와 같이 기본 생성자를 추가하여 문제를 해결했습니다.
스칼라의 경우에도 아래와 같이 기본 생성자를 추가하여 문제를 해결했습니다.
class IntPair (first : IntWritable, second : IntWritable) extends WritableComparable[IntPair] { def this() = this(first = new IntWritable(), second = new IntWritable()) def getFirst () : IntWritable = { first } def getSecond () : IntWritable = { second } }
-
==============================
4.기본 생성자가 있는지 확인하지만 static 키워드를 클래스 선언에 추가해야합니다. 그건,
기본 생성자가 있는지 확인하지만 static 키워드를 클래스 선언에 추가해야합니다. 그건,
public class SecondarySort { public static void main(String[] args) {...} public static class StockKey extends ... {} }
-
==============================
5.어떤 대답도 나를 도왔습니다.
어떤 대답도 나를 도왔습니다.
제 경우에는 실수로 생성자의 가시성을 줄이거 나 서둘러 생성자의 가시성을 줄였습니다.
예 : 부모 생성자는 public이고 상속받은 클래스의 기본값은 protected이거나 protected입니다!
-
==============================
6.이 같은 문제에 직면했다. @Thomas 및 @Chris의 포인터를 따라 수정했습니다.
이 같은 문제에 직면했다. @Thomas 및 @Chris의 포인터를 따라 수정했습니다.
문제를 해결하려면 다음 두 가지 솔루션이 필요합니다.
from https://stackoverflow.com/questions/11446635/no-such-method-exception-hadoop-init by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] hadoop의 -libjars 문제 (0) | 2019.05.30 |
---|---|
[HADOOP] 멀티 문자 구분 기호로 하이브 테이블 만들기 (0) | 2019.05.30 |
[HADOOP] hadoop : 0 감속기와 신원 감속기의 차이점은 무엇입니까? (0) | 2019.05.30 |
[HADOOP] Hadoop의 투기 적 태스크 실행 (0) | 2019.05.30 |
[HADOOP] Hadoop 입력 분할 크기 대 블록 크기 (0) | 2019.05.30 |