问题标签 [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 - Zookeeper CLI 失败 - IOException 数据包超出范围
运行动物园管理员 3.3.3。我有一个 znode,我只是想通过 CLI 列出,如下所示:
ls /myznode/subznode
这会在第 710 行的 org.apache.ClientCnxn$SendThread.readLength 中因 IOException 而崩溃。
有人见过这个吗??有人建议可能坏数据在 znode 中。不确定是否或如何...但我也无法删除它,因为它里面有东西。
java - 使用 Apache ZooKeeper 实现死锁检测
我在一家小型软件公司工作,我的任务是研究一个分布式锁管理器供我们使用。它必须与 Java 和 C++ 接口。
我已经与 ZooKeeper 合作了几个星期,并根据文档实现了共享锁(读写锁)。我现在需要实现死锁检测。如果每个客户端都可以维护一个锁图,那将是快速和容易的。但是,您无法可靠地看到 ZooKeeper 中节点发生的每一次更改,因此无法维护准确的图表。这意味着每次检查死锁时,我都需要下载许多锁,这似乎不切实际。
另一个解决方案是在 ZooKeeper 服务器中实现死锁检测,我现在正在研究它。每个客户端都将在“/waiting”中创建一个以其会话 ID 命名的节点,其数据将是其等待的锁。由于每个锁都有一个临时所有者,因此我将有足够的信息来检测死锁。
我遇到的问题是 ZooKeeper 服务器没有 ZooKeeper 客户端具有的同步保证。另外,ZooKeeper 服务器不像客户端那样有很好的文档记录,因为您通常不应该接触它。
所以我的问题是:应该如何使用 Apache ZooKeeper 实现死锁检测?我在这里看到很多人推荐 ZooKeeper 作为分布式锁管理器,但是如果它不能支持死锁检测,那么没有人应该将它用于此目的。
编辑:
我有一个可行的解决方案。我不能保证它的正确性,但它已经通过了我所有的测试。
我正在分享我的checkForDeadlock
方法,这是死锁检测算法的核心。以下是您需要了解的其他信息:
- 一次只能运行一个客户端进行死锁检测。
- 首先,客户端尝试获取资源的锁。如果资源已经被锁定并且客户端想要等到它变得可用,那么客户端接下来会检查死锁。如果等待资源不会导致死锁,那么它接下来会在一个特殊目录中创建一个 znode,该目录标识该客户端正在等待该资源。该行如下所示:
waitNode = zooKeeper.create(waitingPath + "/" + sessionID, resource.getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
- 在此客户端创建等待节点之前,其他客户端不应开始检查死锁。
- 如果两个客户端几乎同时尝试获取锁,但同时授予两个客户端会导致死锁,那么有可能不是第一个客户端获得锁而第二个客户端被拒绝,而是第一个客户端被拒绝并且第二个客户可以获得锁。这应该不是问题。
checkForDeadlock
DeadlockException
如果发现死锁,则抛出 a 。否则,它会正常返回。- 锁是严格按顺序授予的。如果一个资源有一个已授予的读锁和一个等待的写锁,而另一个客户端想要获得一个读锁,它必须等到写锁被授予之后再释放。
bySequenceNumber
是一个比较器,它按照 ZooKeeper 附加到顺序 znode 末尾的序列对 znode 进行排序。
代码:
java - Zookeeper PERSISTENT_SEQUENTIAL 递增 2
在 ZooKeeper 中执行一个简单的 create() 方法调用似乎是增加了 2 而不是正常的。虽然这实际上与JavaDoc保持一致,它只指定序列“单调递增”而不参考增量,但我不确定为什么会开始发生这种情况。
我最终得到“key-v-0000000056”,然后是“key-v-0000000058”……57去哪儿了?
noclassdeffounderror - kafka NoClassDefFoundError kafka/Kafka
我已经从 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:错误:变量“端口”设置但未使用 [-Werror=unused-but-set-variable]
cloud - 在多个节点上的短期 Akka 部署
我正在用 Akka 编写一个分布式研究应用程序,使用一个简单的主节点和多个工作节点拓扑,目的是部署到内部节点集群或企业云中。(当 Akka 2.1 可用时,我会考虑使用集群支持)
我的问题: 将我的代码(以包含 Akka 微内核的文件夹的形式)部署到每个节点上,启动它,让它做它的事情,然后拆除并根据需要重复的最简单/最好的方法是什么?
- 每个工作节点的微内核目录和可执行文件都是相同的,并且只有几 MB。Config 包含他们将连接到的 master 的 IP。
- 我打算手动启动master。
- 弹性不是问题,因为这不是关键业务应用程序,而是私人研究问题。
- 没有重要的数据存储在本地给工人。
- 应用程序完成后,我可能想重新部署一个不同的应用程序而不拆除节点(例如,改进了代码库)。
更新:发现 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',有关详细信息,请参阅下一个异常。失败:执行错误,从 org.apache.hadoop.hive.ql.exec.DDLTask 中返回代码 1”。为什么会发生此异常,可能是配置问题或其他原因。
mapreduce - 在 HBase MR 作业中找不到 zookeeper jar
我有一个尝试在 HBase 表上生成 MR 作业的 Web UI。我不断收到此错误:
我正在使用 hbase 0.90.4 运行。HBase 管理自己的 zookeeper。而且,我确认/opt/hadoop/mapreduce/system/job_201205251929_0007/libjars/zookeeper-3.3.2.jar
我的 HDFS 中有。它在本地 FS 中查找吗?
bash - HBase - 如何使用 bash 获取 HBase 主地址?
我正在尝试为我的集群编写一个小的自动化状态例程。基本上,我正在编写一个小 shell 脚本,它将查询所有节点,检查各种指标(有点像 Ganglia 会给我的......但我不能使用那个......长篇大论)。这完成了,除了 HBase。对于所有其他服务器(NN、JT、ZK 等),我可以查看配置文件并知道主机名。然而,HBase 主服务器并没有在任何地方列出。它位于“/hbase/master”znode 中。
我的问题..我怎样才能从 bash 中获取该主机名?我一直在尝试类似'zkCli.sh -server myzoo << get /hbase/master'之类的东西,但到目前为止,我还是一无所获。
底线是,我想要一个可以访问我所有主要服务器的 shell 脚本。HBase 是我唯一遇到的问题。
提前致谢。