11

我刚刚提出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 管理器配置页面。

4

2 回答 2

10

免责声明:请注意答案来自 2015 年。它可能不再相关,但可能具有历史意义,并对类似的“现代”案例有所了解。

短的

Cloudera 已zookeeper 3.4.5-cdh5.4.0在多个地方发生故障。服务正在运行,但 CLI 已死。除了回滚之外没有其他解决方法。

为此分配赏金;-)。我也踩到过这个地雷,气到找到原因:

ZookeeperJLineZooKeeperMain.run(). 有加载类数量的 try-catch 块。类加载期间的任何异常都会导致整个块失败,并且报告 JLine 支持被禁用。

但这就是为什么会发生这种情况CDH 5.4.0

  1. 当前的开放源代码Zookeeper-3.4.6适用于jline-0.9.94. 没有这样的问题。

  2. CDH 5.4Cloudera 中应用了以下补丁:

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
< 类 consoleC = Class.forName("jline.ConsoleReader");
< 类完成者 C =
---
> 类 consoleC = Class.forName("jline.ConsoleReader");
> 类完成者C =
316,317c316,317
< 方法 addCompletor = consoleC.getMethod("addCompletor",
< Class.forName("jline.Completor"));
---
> 方法 addCompletor = consoleC.getMethod("addCompleter",
> Class.forName("jline.console.completer.Completer"));

  1. CDH 5.4jline-2.11.jar用于 ZooKeeper,它没有jline.ConsoleReader类(从2.11它是jline.console.ConsoleReader)。

  2. 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 并拥有生产集群的地方​​一直依赖。

  1. 在我看来,zookeeper 的类路径jline-0.9.94.jar和类路径都可以解决这个问题。jline.2.11.jar但是刚刚发现 Cloudera 在 ZK 中为 CDH 5.4.0 做了另一个“修复”,他们将org.apache.zookeeper.JLineZNodeCompletorclass 重命名为org.apache.zookeeper.JLineZNodeCompleter.

但这是来自的代码ZooKeeperMain.java

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

当然,这意味着实际上不可能以正确的方式在 CDH 5.4.0 中启动 ZK CLI。糟糕的工作。:-(

于 2015-05-12T18:06:50.733 回答
0

您可以转到 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

这个对我有用 :)

于 2018-11-25T19:12:17.340 回答