如何获取zookeeper上的信息
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何获取zookeeper上的信息相关的知识,希望对你有一定的参考价值。
zookeeper安装和使用zookeeper的安装基本上可以按照 http://hadoop.apache.org/zookeeper/docs/current/ zookeeperStarted.html 这个页面上的步骤完成安装,这里主要介绍下部署一个集群的步骤,因为这个官方页面似乎讲得并不是非常详细(Running Replicated Zookeeper)。
由于手头机器不足,所以在一台机器上部署了3个server,如果你手头也比较紧,也可以这么做。那么我建了3个文件夹,如下
server1 server2 server3
然后每个文件夹里面解压一个zookeeper的下载包,并且还建了几个文件夹,总体结构如下,最后那个是下载过来压缩包的解压文件
data dataLog logs zookeeper-3.3.2
那么首先进入data目录,创建一个myid的文件,里面写入一个数字,比如我这个是server1,那么就写一个1,server2对应myid文件就写入2,server3对应myid文件就写个3
然后进入zookeeper-3.3.2/conf目录,那么如果是刚下过来,会有3个文件,configuration.xml, log4j.properties,zoo_sample.cfg,这3个文件我们首先要做的就是在这个目录创建一个zoo.cfg的配置文件,当然你可以把zoo_sample.cfg文件改成zoo.cfg,配置的内容如下所示:
tickTime=2000
initLimit=5
syncLimit=2
dataDir=xxxx/zookeeper/server1/data
dataLogDir=xxx/zookeeper/server1/dataLog
clientPort=2181
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
标红的几个配置应该官网讲得很清楚了,只是需要注意的是clientPort这个端口如果你是在1台机器上部署多个server,那么每台机器都要不同的clientPort,比如我server1是2181,server2是2182,server3是2183,dataDir和dataLogDir也需要区分下。
最后几行唯一需要注意的地方就是 server.X 这个数字就是对应 data/myid中的数字。你在3个server的myid文件中分别写入了1,2,3,那么每个server中的zoo.cfg都配server.1,server.2,server.3就OK了。因为在同一台机器上,后面连着的2个端口3个server都不要一样,否则端口冲突,其中第一个端口用来集群成员的信息交换,第二个端口是在leader挂掉时专门用来进行选举leader所用。
进入zookeeper-3.3.2/bin 目录中,./zkServer.sh start启动一个server,这时会报大量错误?其实没什么关系,因为现在集群只起了1台server,zookeeper服务器端起来会根据zoo.cfg的服务器列表发起选举leader的请求,因为连不上其他机器而报错,那么当我们起第二个zookeeper实例后,leader将会被选出,从而一致性服务开始可以使用,这是因为3台机器只要有2台可用就可以选出leader并且对外提供服务(2n+1台机器,可以容n台机器挂掉)。
接下来就可以使用了,我们可以先通过 zookeeper自带的客户端交互程序来简单感受下zookeeper到底做一些什么事情。进入zookeeper-3.3.2/bin(3个server中任意一个)下,./zkCli.sh –server 127.0.0.1:2182,我连的是开着2182端口的机器。
那么,首先我们随便打个命令,因为zookeeper不认识,他会给出命令的help,如下图
ls(查看当前节点数据),
ls2(查看当前节点数据并能看到更新次数等数据) ,
create(创建一个节点) ,
get(得到一个节点,包含数据和更新次数等数据),
set(修改节点)
delete(删除一个节点)
通过上述命令实践,我们可以发现,zookeeper使用了一个类似文件系统的树结构,数据可以挂在某个节点上,可以对这个节点进行删改。另外我们还发现,当改动一个节点的时候,集群中活着的机器都会更新到一致的数据。 参考技术A Zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储,但是 Zookeeper 并不是用来专门存储数据的,它的作用主要是用来维护和监控你存储的数据的状态变化。通过监控这些数据状态的变化,从而可以达到基于数据的集群管理,后面将会详细介绍 Zookeeper 能够解决的一些典型问题,这里先介绍一下,Zookeeper 的操作接口和简单使用示例。
常用接口列表
客户端要连接 Zookeeper 服务器可以通过创建 org.apache.zookeeper. ZooKeeper 的一个实例对象,然后调用这个类提供的接口来和服务器交互。
前面说了 ZooKeeper 主要是用来维护和监控一个目录节点树中存储的数据的状态,所有我们能够操作 ZooKeeper 的也和操作目录节点树大体一样,如创建一个目录节点,给某个目录节点设置数据,获取某个目录节点的所有子目录节点,给某个目录节点设置权限和监控这个目录节点的状态变化。
如何从 Windows 上的 OpenGL 获取有意义的错误信息
【中文标题】如何从 Windows 上的 OpenGL 获取有意义的错误信息【英文标题】:How can I get meaningful error info from OpenGL on Windows 【发布时间】:2009-09-05 15:53:14 【问题描述】:我正在尝试创建一个 GL 上下文,但调用失败,返回一个空指针。根据 MSDN,当 wglCreateContext 失败时,您可以从 GetLastError 获得原因。除了 GetLastError 给了我一个数字,这不是所有的信息。
再次根据 MSDN,您可以使用 FormatMessage 从 GetLastError 代码中获取描述性字符串。但是当我尝试以下操作时,我得到一个空白字符串:
FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, 0, GetLastError(), 0, errorStr, 0, NULL);
我查看了 MSDN 文档,显然它只有一个用于 Windows 系统错误的查找表。所以这毕竟对我没有帮助。有谁知道如何以编程方式找出我的 wglCreateContext 调用失败的原因?
【问题讨论】:
【参考方案1】:我找到了this MSDN page 和this OpenGL page,但它们只有错误代码名称列表,没有它们的数值。
OpenGL 参考中的This page 提到了一个具有此配置文件的函数gluErrorString
:
constGLubyte *gluErrorString(GLenum error)
这在您使用的库中可用吗?这应该在一个名为“glu.h”的文件中定义。对于 Visual Studio 6,它位于:
C:\Program Files\Microsoft Visual Studio\VC98\Include\GL
如果你没有那个版本,它应该在:
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\gl
此文件夹还应包含“gl.h”,其中包含错误代码的定义。
EDIT 如果你得到一个空字符串,这可能意味着它是一个非标准错误代码。获取来自GetLastError()
的值并在“gl.h”中搜索它的十六进制表示。如果找到它,那么定义会告诉你错误是什么。
【讨论】:
试过了,但它也返回一个空字符串。【参考方案2】:我发现了问题。 FormatMessage 工作得很好;我只是有错误的参数。这有效:
FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), 0, errorStr, 255, NULL);
【讨论】:
以上是关于如何获取zookeeper上的信息的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Python 上的保存文件 (N:\userFile) 中获取信息(帐户名)
Kendo 网格 - 如何获取 RowSelected 上的行详细信息?