Dostaję ten wyjątek podczas pisania obiektu do HDFS:NoSuchMethodError pisanie Avro obiekt do HDFS użyciu Builder
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.avro.Schema$Parser.parse(Ljava/lang/String;[Ljava/lang/String;)Lorg/apache/avro/Schema;
at com.blah.SomeType.<clinit>(SomeType.java:10)
Linia jest odniesienie w wygenerowanego kodu jest taka:
public class SomeType extends org.apache.avro.specific.SpecificRecordBase implements org.apache.avro.specific.SpecificRecord {
public static final org.apache.avro.Schema SCHEMA$ = new org.apache.avro.Schema.Parser().parse ..........
a rozmowa w moim kodu jest taka:
val someTypeBuilder = SomeType.newBuilder()
.setSomeField("some value")
// set a whole load of other fields
wywołanie newBuilder()
w kodzie testowym nie powoduje problemy w ogóle.
Słoik jest uruchamiany w węźle HDFS przy użyciu polecenia hadoop jar
.
Jakieś pomysły, co może być nie tak?
Ok to może być to. Mój węzeł HDFS używa Avro 1.7.4 podczas uruchamiania słoika. Czy istnieje prosty sposób na aktualizację wspólnych słoików w węzłach HDFS? Czy jest to nowa instalacja Hadoop? –
@jimmy_terra Edytowałem swój post z sugerowanym sposobem aktualizacji Avro. Nie możemy jednak zagwarantować, że będzie działać na Twojej aplikacji. – heenenee
Proponuję obniżenie poziomu kompilacji (Gradle/Maven/cokolwiek), aby dopasować wersję do środowiska, w którym się wykonuje (przynajmniej do momentu uaktualnienia klastra). Prawidłowy sposób aktualizacji klastra zależy od konfiguracji i dostawcy (jeśli dotyczy). – Keegan