Support Questions
Find answers, ask questions, and share your expertise
Announcements
Alert: Welcome to the Unified Cloudera Community. Former HCC members be sure to read and learn how to activate your account here.

why zookeeper client does not provide CLI

Highlighted

why zookeeper client does not provide CLI

hi all

any suggestion why we cant get the prompt ?

/usr/hdp/2.6.0.3-8/kafka/bin/zookeeper-shell.sh   localhost:2181
Connecting to localhost:2181
Welcome to ZooKeeper!
JLine support is disabled
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
Michael-Bronson
6 REPLIES 6
Highlighted

Re: why zookeeper client does not provide CLI

Super Mentor

@Michael Bronson

I tried like this and it worked:

#  /usr/hdp/current/kafka-broker/bin/zookeeper-shell.sh  localhost:2181 get /
Connecting to localhost:2181

WATCHER::
WatchedEvent state:SyncConnected type:None path:null
cZxid = 0x0
ctime = Thu Jan 01 00:00:00 UTC 1970
mZxid = 0x0
mtime = Thu Jan 01 00:00:00 UTC 1970
pZxid = 0x80009e5f1
cversion = 37
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 19

.

Highlighted

Re: why zookeeper client does not provide CLI

Super Mentor

@Michael Bronson

I see the error in your command:

WatchedEvent state:SyncConnected type:None path:null

.

This is because you have not defined the "cmd" (like get , set) and "args" (like Path)

Highlighted

Re: why zookeeper client does not provide CLI

dear Jay

actually I was asking about how to get the zookeeper session as the following,

/usr/hdp/2.6.0.3-8/zookeeper/bin/zkCli.sh -server master02:2181

remark zookeeper client installed on the master machine

and that give me the session

WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: master02:2181(CONNECTED) 0]


Michael-Bronson
Highlighted

Re: why zookeeper client does not provide CLI

Explorer

Try this command "zookeeper-client"



[hdfs@servername ~]$ zookeeper-client
Connecting to localhost:2181
log4j:WARN No appenders could be found for logger (org.apache.zookeeper.ZooKeeper).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Welcome to ZooKeeper!
JLine support is enabled

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0]

 

Highlighted

Re: why zookeeper client does not provide CLI

Hi @mike_bronson7 

 

Please try to type ls / after running the shell. 

 

Best,
Lyubomir

Re: why zookeeper client does not provide CLI

Explorer

SHORT

Cloudera has broken zookeeper 3.4.5-cdh5.4.0 in several places. Service is working but CLI is dead. No workaround other than rollback.

LONG

Assign a bounty on this ;-). I have stepped on this mine too and was angry enough to find the reason:

Zookeeper checks JLine during ZooKeeperMain.run(). There is a try-catch block that loads a number of classes. Any exception during class loading fails the whole block and JLine support is reported to be disabled.

But here is why this happens with CDH 5.4.0:

  1. Current opensource Zookeeper-3.4.6 works against jline-0.9.94. Has no such issue.

  2. In CDH 5.4 Cloudera has applied the following patch:

roman@node4:$ 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 uses jline-2.11.jar for ZooKeeper and it has no jline.ConsoleReader class (from 2.11 it is jline.console.ConsoleReader).

  2. Jline 0.9.94 in turn has no jline.console.completer.Completer.

So there is incompatibility with any existing JLine. Any Cloudera CDH 5.4 user can run zookeeper-client on his/her cluster and find it does not work.

Open-source zookeeper-3.4.6 depends on jline-0.9.94 which has no such patches. Don't know why Cloudera engineers have done such a mine.

I see no clean way to fix it with 3.4.5-cdh5.4.0. I stayed with 3.4.5-cdh5.3.3 dependency where I need CLI and have production clusters.

  1. It seemed to me both jline-0.9.94.jar and jline.2.11.jar in classpath for zookeeper will fix the problem. But just have found Cloudera made another 'fix' in ZK for CDH 5.4.0, they have renamed org.apache.zookeeper.JLineZNodeCompletor class to org.apache.zookeeper.JLineZNodeCompleter.

But here is the code from ZooKeeperMain.java

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

And of course, it means practically it is not possible to start ZK CLI in CDH 5.4.0 proper way. Awful work.

Don't have an account?
Coming from Hortonworks? Activate your account here