No such method exception Hadoop
Kiedy prowadzę Hadoop .plik jar z wiersza polecenia, rzuca wyjątek mówiąc nie takiej metody StockKey metoda.
StockKey to moja własna Klasa zdefiniowana dla mojego własnego typu klucza.
Oto wyjątek:
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)
6 answers
Musisz podać pusty konstruktor domyślny w swojej klasie kluczy. Hadoop używa reflection i nie może odgadnąć żadnych parametrów do paszy.
Więc po prostu dodaj domyślny konstruktor:
public StockKey(){}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-12 07:35:04
Jest jeszcze jedna rzecz do sprawdzenia podczas uzyskiwania błędów takich jak ten dla klas, które są writables, mappers, Reducer, itp.
Jeśli klasa jest klasą wewnętrzną , upewnij się, że jest zadeklarowana static
(tzn. nie potrzebuje instancji klasy zamkniętej). W przeciwnym razie, Hadoop nie może utworzyć instancji wewnętrznej klasy i da ten sam błąd - że konstruktor zero-arg jest potrzebny.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-13 10:16:03
Również dla Scali , naprawiłem problem z dodaniem domyślnego konstruktora jak poniżej,
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
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:21
Upewnij się, że masz domyślny konstruktor, ale musiałem również dodać słowo kluczowe static
do mojej deklaracji klasy. Czyli
public class SecondarySort {
public static void main(String[] args) {...}
public static class StockKey extends ... {}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-18 14:26:30
Żadna odpowiedź mi nie pomogła.
W moim przypadku stało się to, gdy przez pomyłkę lub pośpiech zmniejszyłem widoczność konstruktora.
Np. rodzic konstruktor jest publiczny, a dziedziczona klasa jest domyślna lub chroniona !
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-21 23:16:19
Miał do czynienia z tym samym problemem. Naprawiono przez następujące wskaźniki z @ Thomas i @ Chris.
Wygląda na to, że oba te rozwiązania są potrzebne do rozwiązania problemu:
Odpowiedź od @ Thomas jest wymagana, ponieważ Hadoop używa reflection i przy budowaniu dużych projektów.
Odpowiedź od @ Chris jest wymagana podczas używania klas wewnętrznych i wywoływania maperów / reduktorów z main().
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-20 20:39:33