問題タブ [apache-zookeeper]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
apache-zookeeper - ZookeeperCLIの失敗-IOExceptionパケット範囲外です
zookeeperの実行3.3.3。次のように、CLIを介して一覧表示しようとしているznodeがあります。
ls / myznode / subznode
これは、行710のorg.apache.ClientCnxn$SendThread.readLengthのIOExceptionでクラッシュします。
誰もがこれを見た?誰かがおそらく悪いデータがznodeにあると示唆しました。かどうか、どのようにすればよいかわかりませんが、何かが含まれているため、削除することもできません。
java - ApacheZooKeeperを使用したデッドロック検出の実装
私は小さなソフトウェア会社で働いており、使用する分散ロックマネージャーの研究を任されています。JavaとC++の両方とインターフェースする必要があります。
私はZooKeeperを数週間使用しており、ドキュメントに従って共有ロック(読み取りおよび書き込みロック)を実装しました。ここで、デッドロック検出を実装する必要があります。各クライアントがロックのグラフを維持できれば、それは迅速かつ簡単になります。ただし、ZooKeeperのノードに発生するすべての変更を確実に確認できるわけではないため、正確なグラフを維持することは不可能です。これは、デッドロックをチェックするたびに、多くのロックをダウンロードする必要があることを意味しますが、これは実用的ではないようです。
もう1つの解決策は、現在取り組んでいるZooKeeperサーバー内にデッドロック検出を実装することです。各クライアントは、セッションIDにちなんで名付けられた「/ waiting」内にノードを作成し、そのデータは待機中のロックになります。各ロックには一時的な所有者がいるため、デッドロックを検出するのに十分な情報があります。
私が抱えている問題は、ZooKeeperサーバーには、ZooKeeperクライアントが持っている同期保証がないことです。さらに、ZooKeeperサーバーは、クライアントのように適切に文書化されていません。これは、通常、ZooKeeperサーバーに触れることを想定していないためです。
だから私の質問はこれです:Apache ZooKeeperでデッドロック検出を実装するにはどうすればよいですか?ここでは、分散ロックマネージャーとしてZooKeeperを推奨している人がたくさんいますが、デッドロック検出をサポートできない場合は、この目的で使用しないでください。
編集:
私には実用的な解決策があります。その正確性を保証することはできませんが、すべてのテストに合格しています。
checkForDeadlock
デッドロック検出アルゴリズムの心臓部である私の方法を共有しています。知っておく必要のある追加情報は次のとおりです。
- 一度に1つのクライアントのみがデッドロック検出を実行する必要があります。
- 最初に、クライアントはリソースのロックを取得しようとします。リソースがすでにロックされていて、クライアントがリソースが使用可能になるまで待機したい場合、クライアントは次にデッドロックをチェックします。リソースを待機してもデッドロックが発生しない場合は、次に、このクライアントがそのリソースを待機していることを識別する特別なディレクトリにznodeを作成します。その行は次のようになります。
waitNode = zooKeeper.create(waitingPath + "/" + sessionID, resource.getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
- このクライアントが待機ノードを作成するまで、他のクライアントはデッドロックのチェックを開始しないでください。
- 2つのクライアントがほぼ同時にロックを取得しようとしたが、両方を許可するとデッドロックが発生する場合、最初のクライアントがロックを取得して2番目のクライアントが拒否される代わりに、最初のクライアントが拒否されて2番目のクライアントがロックを取得する可能性があります。これは問題にはならないはずです。
checkForDeadlock
DeadlockException
デッドロックを検出すると、をスローします。それ以外の場合は、正常に戻ります。- ロックは厳密に順番に付与されます。リソースに許可された読み取りロックと待機中の書き込みロックがあり、別のクライアントが読み取りロックを取得したい場合、書き込みロックが許可されてから解放されるまで待機する必要があります。
bySequenceNumber
ZooKeeperがシーケンシャルznodeの最後に追加するシーケンスによってznodeをソートするコンパレータです。
コード:
java - ZookeeperPERSISTENT_SEQUENTIALが2ずつ増加します
ZooKeeperで単純なcreate()メソッド呼び出しを行うと、通常の1つではなく2つ増加しているようです。これは実際には、増分量を参照せずにシーケンスが「単調に増加する」ことを指定するだけのJavaDocと一致していますが、なぜこれが発生し始めたのかわかりません。
「key-v-0000000056」、「key-v-0000000058」の順になってしまいます... 57はどこに行きましたか?
noclassdeffounderror - カフカ NoClassDefFoundError カフカ/カフカ
Kafka ダウンロード ページから Apache Kafka をダウンロードしました。に抽出しました/opt/apache/installed/kafka-0.7.0-incubating-src
。
クイックスタート ページには、zookeeper を起動してから、次のコマンドを実行して Kafka を起動する必要があると記載されています。
>bin/kafka-server-start.sh config/server.properties
別の Zookeeper サーバーを使用しているため、config/server.properties
その Zookeeper インスタンスを指すように編集しました。
クイックスタート ページの指示に従って Kafka を実行すると、次のエラーが表示されます。
telnet を使用して、Kafka が実行されているマシンから Zookeeper インスタンスにアクセスできることを確認しました。全て大丈夫。
なぜこのエラーが発生するのですか?
ruby - Ubuntu 12.04 - GCC 4.6.3 で「変数 'ポート' が設定されていますが、使用されていません」という理由で Zookeeper gem のインストールが失敗するのはなぜですか?
Ubuntu 12.04 の新規インストールで Zookeeper が失敗します。
src/zookeeper.c: 関数 'getaddrs': src/zookeeper.c:455:13: エラー: 変数 'port' が設定されていますが、使用されていません [-Werror=unused-but-set-variable]
cloud - 複数のノードでの短期間のAkkaデプロイメント
ノードの内部クラスターまたは企業クラウド内にデプロイすることを目的として、単純なマスターとマルチワーカートポロジを使用してAkkaで分散型リサーチアプリケーションを作成しています。(Akka 2.1が利用可能になったら、クラスタリングサポートの使用を検討します)
私の質問: コードを(Akkaマイクロカーネルを含むフォルダーの形式で)各ノードにデプロイし、起動し、実行させてから、必要に応じて破棄して繰り返す最も簡単で最良の方法は何ですか?
- マイクロカーネルディレクトリと実行可能ファイルは、すべてのワーカーノードで同一であり、わずか数MBです。Configには、接続するマスターのIPが含まれています。
- 手動でマスターを起動するつもりです。
- これはビジネスクリティカルなアプリケーションではなく、個人的な調査の問題であるため、復元力は問題ではありません。
- 重要なデータはワーカーにローカルに保存されません。
- アプリケーションが完成した後、ノードを破棄せずに(たとえば、コードベースを改良して)別のアプリケーションを再デプロイしたい場合があります。
更新: Condorノードがマシン全体モードで実行されているジョブをサポートしていることがわかりました。これは、マイクロカーネルをジョブとして実行することをサポートする必要があり、完了時にワーカーが適切に終了することを確認する必要があります。
更新2: Zookeeperがこれに適している可能性があると誰かが言及しました。経験のある方からのご意見をいただければ幸いです。
java - Hadoop スタックに ZooKeeper が必要なのはなぜですか?
Hadoop/ZooKeeper は初めてです。ZooKeeper を Hadoop で使用する目的がわかりません。ZooKeeper は Hadoop でデータを書き込みますか? そうでない場合、なぜ Hadoop で ZooKeeper を使用するのでしょうか?
java - ハイブでテーブル例外を作成しますか?
Hiveをインストールしましたが、テーブルを作成するコマンドを書くと、「CREATE TABLE foo(id int, msg STRING);」となります。「クリーンアップ アクションが失敗しました: メタデータのエラー: javax.jdo.JDOFatalDataStoreException: データベース 'metastore_db' の作成に失敗しました。詳細については、次の例外を参照してください。NestedThrowables:java.sql.SQLException: データベース 'metastore_db' の作成に失敗しました。詳細については、次の例外を参照してください。FAILED: 実行エラー、org.apache.hadoop.hive.ql.exec.DDLTask からコード 1 を返します". この例外が発生する理由は、構成の問題か、それ以外です。
mapreduce - Zookeeper jar が HBase MR ジョブで見つかりません
HBase テーブルで MR ジョブを生成しようとする Web UI があります。ただし、このエラーが発生し続けます:
hbase 0.90.4 で実行しています。HBase は独自の飼育係を管理します。/opt/hadoop/mapreduce/system/job_201205251929_0007/libjars/zookeeper-3.3.2.jar
そして、 HDFSにあることを確認しました。ローカルFSで探していますか?
bash - HBase - bash を使用して HBase マスター アドレスを取得するにはどうすればよいですか?
クラスターの自動化されたステータス ルーチンを少し書こうとしています。基本的に、私はすべてのノードを照会し、さまざまなメトリックをチェックする小さなシェル スクリプトを作成しています (Ganglia が提供するようなものです..しかし、私はそれを使用できません...長い話)。これは、HBase 以外の場合に行われました。他のすべてのサーバー (NN、JT、ZK など) については、構成ファイルを調べてホスト名を知ることができます。ただし、HBase マスターはどこにもリストされていません。「/hbase/master」znode にあります。
私の質問..どうすればそのホスト名をbashから取得できますか? 「zkCli.sh -server myzoo << get /hbase/master」などを試してみましたが、これまでのところ、空になっています。
要するに、すべてのメイン サーバーにアクセスできる 1 つのシェル スクリプトが必要です。私が問題を抱えているのはHBaseだけです。
前もって感謝します。