zookeeper安装容易出现的一些问题

1. 启动log

一般在mac或者linux下我们启动zookeeper使用./ zkServer.sh start,但是启动失败却没有log,所以建议首次启动使用./zkServer.sh start-foreground,可查看详细的启动信息。

2. 查看进程

因为zookeeper默认端口为2181,查看是否有启动成功,可使用命令lsof -i:2181查看端口

3. 【java.lang.UnsupportedClassVersionError】版本不一致出错

假如启动报错如下

Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/zookeeper/server/quorum/QuorumPeerMain : Unsupported major.minor version 52.0
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
	at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
	at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)

看报错信息,Unsupported major.minor version 52.0,是因为使用的jar包版本不对。这个52.0是什么呢?
JDK不同的版本,编译出的class文件是不同的。通过查看分析class文件前几个字节,可以找到对应的关系,详细的参考官方,细微的版本之间可能有差异:

 J2SE 8 = 51 (0x34 hex),
 J2SE 7 = 51 (0x33 hex),
 J2SE 6.0 = 50 (0x32 hex),
 J2SE 5.0 = 49 (0x31 hex),
 JDK 1.4 = 48 (0x30 hex),
 JDK 1.3 = 47 (0x2F hex),
 JDK 1.2 = 46 (0x2E hex),
 JDK 1.1 = 45 (0x2D hex).

说明jdk环境需要1.8,此时查看我的是1.7,所以报这错,只需提高jdk环境即可。

4.更改zookeeper启动的java环境

假如我的默认环境是jdk1.7,但是zookeeper要求1.8,但是我不想更改默认的java环境,这时候需要更改如下的文件。
bin/
以mac os为例,打开zkEvn.sh,发现关于java环境的有如下

if [[ -n "$JAVA_HOME" ]] && [[ -x "$JAVA_HOME/bin/java" ]];  then
    JAVA="$JAVA_HOME/bin/java"
elif type -p java; then
    JAVA=java
else
    echo "Error: JAVA_HOME is not set and java could not be found in PATH." 1>&2
    exit 1
fi

#add the zoocfg dir to classpath
CLASSPATH="$ZOOCFGDIR:$CLASSPATH"

for i in "$ZOOBINDIR"/../zookeeper-server/src/main/resources/lib/*.jar
do
    CLASSPATH="$i:$CLASSPATH"
done

这时候,我们可以打开我们的etc/.bash_profile文件,查看对应的配置目录,接下来强制更改为我们自己的

JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home
if [[ -n "$JAVA_HOME" ]] && [[ -x "$JAVA_HOME/bin/java" ]];  then
    JAVA="$JAVA_HOME/bin/java"
elif type -p java; then
    JAVA=java
else
    echo "Error: JAVA_HOME is not set and java could not be found in PATH." 1>&2
    exit 1
fi

CLASSPATH=.:$JAVA_HOME
CLASSPATH=.:$JAVA_HOME/lib:$CLASSPATH
#add the zoocfg dir to classpath

CLASSPATH="$ZOOCFGDIR:$CLASSPATH"

for i in "$ZOOBINDIR"/../zookeeper-server/src/main/resources/lib/*.jar
do
    CLASSPATH="$i:$CLASSPATH"
done
发布了26 篇原创文章 · 获赞 3 · 访问量 356

猜你喜欢

转载自blog.csdn.net/jiaodaguan/article/details/103785408