2015-05-05 30 views
9

Właśnie podniosłem CDH 5.4 i zainstalowałem zookeepera. Użyłem ZKCli z powodzeniem wiele razy wcześniej. Tym razem uruchomienie linii poleceń zatrzymuje przed wejściem do wiersza zKlient zookeepera nie zapewnia interfejsu CLI z komunikatem "obsługa jline jest wyłączona"

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 

wiem zwykły wydruk jest wsparcie JLine jest włączona

że to, co robi się on zatrzymany? Nie widzę sposobu na zmianę tej strony konfiguracji menedżera Cloudera.

+0

Zgłosiłem ten błąd dwa miesiące temu: https://issues.cloudera.org/browse/DISTRO-758 Niestety Cloudera jeszcze nie odpowiedział – JeroenHoek

Odpowiedz

7

KRÓTKI

Cloudera złamał zookeeper 3.4.5-cdh5.4.0 w kilku miejscach. Usługa działa, ale interfejs CLI nie działa. Żadnego obejścia innego niż wycofanie.

LONG

Przypisywanie bounty na to ;-). Podszedłem również do tej miny i byłem na tyle zły, aby znaleźć przyczynę:

Zookeeper sprawdza podczas ZooKeeperMain.run(). Istnieje blok try-catch, który ładuje liczbę klas. Każdy wyjątek podczas ładowania klasy nie działa w całości, a obsługa JLine jest wyłączona.

Ale o to, dlaczego tak się dzieje z CDH 5.4.0:

  1. Aktualny opensource Zookeeper-3.4.6 działa przeciwko jline-0.9.94. Nie ma takiego problemu.

  2. W CDH 5.4 Cloudera zastosował następujące patch:

 

[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 wykorzystuje jline-2.11.jar do zookeeper i ma jline.ConsoleReader klasy (od 2.11 to to jline.console.ConsoleReader).

  2. Jline 0.9.94 z kolei nie ma jline.console.completer.Completer.

Występuje niezgodność z istniejącym JLine. Każdy użytkownik Cloudera CDH 5.4 może uruchomić zookeeper-client w swoim klastrze i znaleźć go nie działa.

Open source zookeeper-3.4.6 zależy od jline-0.9.94, która nie ma takiego patches. Nie wiem, dlaczego inżynierowie wykonali taką kopalnię.

Nie widzę czystej metody, aby to naprawić z 3.4.5-cdh5.4.0. Byłem z zależnością 3.4.5-cdh5.3.3, gdzie potrzebuję CLI i mam klastry produkcyjne.

  1. Wydawało mi się, że zarówno jline-0.9.94.jar, jak i jline.2.11.jar w ścieżce klas dla zookeepera rozwiążą problem. Ale właśnie odkryli, że Cloudera zrobił kolejną "poprawkę" w ZK dla CDH 5.4.0, zmieniono nazwę na klasa org.apache.zookeeper.JLineZNodeCompletor na org.apache.zookeeper.JLineZNodeCompleter.

Ale oto kod z ZooKeeperMain.java

Class<?> completorC =     Class.forName("org.apache.zookeeper.JLineZNodeCompletor"); 

I oczywiście meaan praktycznie nie jest możliwe, aby rozpocząć ZK CLI w CDH 5.4.0 właściwą drogę. Okropna praca. :-(

+2

Nieco późno na imprezę i nie używając cloudera ale napotkał to również działającą, autonomiczną powłokę zookeepera, która łączy się z kodem zookeepera. Dodał słoik jline z folderu hadoop libs do zookeeper/libs/i cli działało ponownie. – Oscar