BREVE
Cloudera ha rotto zookeeper 3.4.5-cdh5.4.0
in più punti. Il servizio funziona ma CLI è morto. Nessuna soluzione alternativa oltre al rollback.
LUNGO
Assegnare una taglia su questo ;-). Ho fatto un passo su questa miniera e sono stato abbastanza arrabbiato da trovare il motivo:
Zooke controlla JLine
durante ZooKeeperMain.run()
. C'è un blocco try-catch che carica un numero di classi. Qualsiasi eccezione durante il caricamento della classe ha esito negativo su tutto il blocco e il supporto JLine è segnalato come disabilitato.
Ma qui è il motivo per cui questo accade con CDH 5.4.0
:
opensource attuale Zookeeper-3.4.6
opere contro jline-0.9.94
. Non ha questo problema.
In CDH 5.4
Cloudera ha applicato la patch seguente:
[email protected]:$ diff zookeeper-3.4.5-cdh5.3.3/src/java/main/org/apache/zookeeper/ZooKeeperMain.java zookeeper-3.4.5-cdh5.4.0/src/java/main/org/apache/zookeeper/ZooKeeperMain.java
305,306c305,306
< Class consoleC = Class.forName("jline.ConsoleReader");
< Class completorC =
---
> Class consoleC = Class.forName("jline.ConsoleReader");
> Class completorC =
316,317c316,317
< Method addCompletor = consoleC.getMethod("addCompletor",
< Class.forName("jline.Completor"));
---
> Method addCompletor = consoleC.getMethod("addCompleter",
> Class.forName("jline.console.completer.Completer"));
CDH 5.4 utilizza jline-2.11.jar
per ZooKeeper e non ha alcun jline.ConsoleReader
classe (da 2.11
esso è jline.console.ConsoleReader
).
Jline 0.9.94
a sua volta non ha jline.console.completer.Completer
.
Quindi c'è incompatibilità con qualsiasi JLine esistente. Qualsiasi utente Cloudera CDH 5.4
può eseguire zookeeper-client
sul proprio cluster e trovare che non funzioni.
Open source zookeeper-3.4.6
dipende da jline-0.9.94
che non dispone di tale patches
. Non so perché gli ingegneri di Cloudera
hanno fatto una tale miniera.
Non vedo alcun modo pulito per risolverlo con 3.4.5-cdh5.4.0
. Sono rimasto con la dipendenza 3.4.5-cdh5.3.3
in cui ho bisogno della CLI e ho cluster di produzione.
- Mi è sembrato che sia
jline-0.9.94.jar
sia jline.2.11.jar
in classpath per zookeeper risolverà il problema. Ma ho appena trovato che Cloudera ha fatto un'altra "correzione" in ZK per CDH 5.4.0, hanno cambiato il nome della classe org.apache.zookeeper.JLineZNodeCompletor
in org.apache.zookeeper.JLineZNodeCompleter
.
Ma qui è il codice da ZooKeeperMain.java
Class<?> completorC = Class.forName("org.apache.zookeeper.JLineZNodeCompletor");
E naturalmente meaan in pratica non è possibile iniziare ZK CLI in CDH 5.4.0 modo corretto. Lavoro terribile :-(
fonte
2015-05-12 18:06:50
Ho segnalato questo errore due mesi fa: https://issues.cloudera.org/browse/DISTRO-758. Purtroppo, Cloudera non ha ancora risposto – JeroenHoek