2015-05-05 15 views
9

Ho appena richiamato CDH 5.4 e ho installato zookeeper. Ho usato zkCli con successo molte volte prima. Questa volta il lancio riga di comando si ferma prima di arrivare al prompt connon fornisce CLI con il messaggio "il supporto jline è disabilitato" messaggio

Welcome to ZooKeeper! 
JLine support is disabled 
2015-05-04 18:18:33,936 [myid:] - INFO [main-SendThread(localhost:2181):[email protected]] - Opening socket connection to server localhost/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error) 
2015-05-04 18:18:33,952 [myid:] - INFO [main-SendThread(localhost:2181):[email protected]] - Socket connection established to localhost/127.0.0.1:2181, initiating session 
2015-05-04 18:18:33,985 [myid:] - INFO [main-SendThread(localhost:2181):[email protected]] - Session establishment complete on server localhost/127.0.0.1:2181, sessionid = 0x34d12349d0a15cf, negotiated timeout = 30000 

WATCHER:: 

WatchedEvent state:SyncConnected type:None path:null 

so che la solita stampa fuori è supporto JLine è abilitato

E 'quello che sta facendo è bloccato? Non vedo alcun modo per cambiare questa pagina di configurazione del gestore Cloudera.

+0

Ho segnalato questo errore due mesi fa: https://issues.cloudera.org/browse/DISTRO-758. Purtroppo, Cloudera non ha ancora risposto – JeroenHoek

risposta

7

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:

  1. opensource attuale Zookeeper-3.4.6 opere contro jline-0.9.94. Non ha questo problema.

  2. 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")); 

  1. CDH 5.4 utilizza jline-2.11.jar per ZooKeeper e non ha alcun jline.ConsoleReader classe (da 2.11 esso è jline.console.ConsoleReader).

  2. 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.

  1. 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 :-(

+2

Un po 'tardi alla festa e non si usa il cloud ma ha riscontrato anche questo funzionamento della shell autonoma dello zookeeper per connettersi a un cluster di zookeeper. Aggiunta del jar jline dalla cartella hadoop libs a zookeeper/libs/e il cli ha funzionato di nuovo. – Oscar

Problemi correlati