11

Zookeeperを起動CDH 5.4してインストールしました。以前、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 は停止しています。ロールバック以外の回避策はありません。

長いです

これに報奨金を割り当ててください;-)。私もこの鉱山を踏んだことがありますが、その理由を見つけるのに十分なほど怒っていました。

Zookeeper はJLineの間にチェックしZooKeeperMain.run()ます。クラスの数をロードする try-catch ブロックがあります。クラスのロード中に例外が発生すると、ブロック全体が失敗し、JLine サポートが無効になっていると報告されます。

しかし、これが次の場合に発生する理由は次のCDH 5.4.0とおりです。

  1. 現在のオープンソースZookeeper-3.4.6は に対して動作しjline-0.9.94ます。そのような問題はありません。

  2. ClouderaではCDH 5.4、次のパッチが適用されています。

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");
< クラス コンプリータ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.4 はjline-2.11.jarZooKeeper に使用され、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.94patchesCloudera

でそれを修正するきれいな方法がわかりません3.4.5-cdh5.4.03.4.5-cdh5.3.3CLI が必要で、実稼働クラスターがある依存関係にとどまりました。

  1. jline-0.9.94.jar私には両方とも、jline.2.11.jar飼育係のクラスパスで問題が解決するように思えました。しかし、Cloudera が CDH 5.4.0 の ZK で別の「修正」を行ったことを発見したところ、org.apache.zookeeper.JLineZNodeCompletorクラスの名前が に変更されました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 に答える