zookeeper客户端未向cli提供“jline支持已禁用”消息

p3rjfoxz  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(652)

我刚提到 CDH 5.4 安装了Zookeeper。我以前多次成功地使用zkcli。这一次,命令行启动在使用

Welcome to ZooKeeper!
JLine support is disabled
2015-05-04 18:18:33,936 [myid:] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@975] - 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):ClientCnxn$SendThread@852] - 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):ClientCnxn$SendThread@1235] - Session establishment complete on server localhost/127.0.0.1:2181, sessionid = 0x34d12349d0a15cf, negotiated timeout = 30000

WATCHER::

WatchedEvent state:SyncConnected type:None path:null

我知道通常的打印输出是启用了jline支持
这就是它卡住的原因吗?我看不出有什么方法可以改变这个cloudera管理器配置页面。

vnzz0bqm

vnzz0bqm1#

您可以转到usr/lib/hbase/bin/hbase并传递以下代码:


# Add libs to CLASSPATH

    for f in $HBASE_HOME/lib/*.jar; do
      CLASSPATH=${CLASSPATH}:$f;
    if [ "$COMMAND" = "zkcli" ] ; then
      CLASSPATH=`echo $CLASSPATH | sed 's/jruby-cloudera-1\.0\.0\.jar//g'`
      CLASS="org.apache.hadoop.hbase.zookeeper.ZooKeeperMainServer" ;
    Fi
    done

它对我有用:)

kcugc4gi

kcugc4gi2#

短的
cloudera坏了 zookeeper 3.4.5-cdh5.4.0 在好几个地方。服务正在运行,但cli已关闭。除了回滚,没有其他解决方法。
长的
给这个分配赏金;-)。我也踩到了这个地雷,很生气地找到了原因:
Zookeeper检查 JLine 期间 ZooKeeperMain.run() . 有一个try-catch块,它加载许多类。类加载过程中的任何异常都会导致整个块失败,并报告jline支持被禁用。
但这就是为什么会发生这种情况 CDH 5.4.0 :
当前开源 Zookeeper-3.4.6 反对 jline-0.9.94 . 没有这样的问题。
CDH 5.4 cloudera已应用以下修补程序:

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

cdh 5.4用途 jline-2.11.jar 对Zookeeper来说 jline.ConsoleReader 类别(从 2.11 它是 jline.console.ConsoleReader ). Jline 0.9.94 反过来也没有 jline.console.completer.Completer .
因此与任何现有的jline都不兼容。任何 Cloudera CDH 5.4 用户可以运行 zookeeper-client 在他/她的群集上,发现它不起作用。
开源 zookeeper-3.4.6 取决于 jline-0.9.94 没有这样的 patches . 不知道为什么 Cloudera 工程师们做过这样的地雷。
我看没有一个干净的方法来解决它 3.4.5-cdh5.4.0 . 我和她在一起 3.4.5-cdh5.3.3 依赖关系,我需要cli和生产集群。
在我看来 jline-0.9.94.jar 以及 jline.2.11.jar zookeeper的类路径将修复该问题。但是刚刚发现cloudera在zk中为cdh5.4.0做了另一个“修复”,他们已经重新命名了 org.apache.zookeeper.JLineZNodeCompletor 类到 org.apache.zookeeper.JLineZNodeCompleter .
但这是来自 ZooKeeperMain.java ```
Class<?> completorC = Class.forName("org.apache.zookeeper.JLineZNodeCompletor");

当然,这实际上意味着在cdh5.4.0中以正确的方式启动zkcli是不可能的。糟糕的工作-(

相关问题