当我安装Java 7时,cassandra 2抱怨Java 7

jco*_*lum 2 java cassandra

$ cassandra 
Cassandra 2.0 and later require Java 7 or later.
Run Code Online (Sandbox Code Playgroud)

好的,在init脚本的那一部分发生了什么?

java_ver_output=`"${JAVA:-java}" -version 2>&1`

jvmver=`echo "$java_ver_output" | awk -F'"' 'NR==1 {print $2}'`
JVM_VERSION=${jvmver%_*}
JVM_PATCH_VERSION=${jvmver#*_}


if [ "$JVM_VERSION" \< "1.7" ] ; then
    echo "Cassandra 2.0 and later require Java 7 or later."
    exit 1;
fi
Run Code Online (Sandbox Code Playgroud)

嗯,如果我在命令行获得版本:

$ java_ver_output=`"${JAVA:-java}" -version 2>&1`

$ echo $java_ver_output
java version "1.7.0_55" Java(TM) SE Runtime Environment (build 1.7.0_55-b13) Java HotSpot(TM) 64-Bit Server VM (build 24.55-b03, mixed mode)

$ JVM_VERSION=${jvmver%_*}

$ echo $JVM_VERSION
1.7.0
Run Code Online (Sandbox Code Playgroud)

如果我跑which java:

$ which java
/usr/bin/java
Run Code Online (Sandbox Code Playgroud)

如果我在脚本中放入该行:

/usr/bin/java
Run Code Online (Sandbox Code Playgroud)

这里令人沮丧的部分是我在过去运行,但自从我弹回服务器后,我就无法启动cassandra.

所以我在这里很困惑,Cassandra对我正在运行的Java版本感到困惑?我如何让cassandra运行?是1.7.0_55不是Java 7(我不明白Java的命名约定)?

Hit*_*eeb 7

每个文档:http://wiki.helioviewer.org/wiki/Apache_Cassandra_Installation

设置JAVA_HOME

确保设置了JAVA_HOME:echo $ JAVA_HOME

所以一定JAVA_HOME要指向/path/to/jdk7

  • http://svn.apache.org/repos/asf/cassandra/trunk/conf/cassandra-env.sh - 我不知道为什么这很重要,脚本不使用JAVA_HOME - 那些文档是3岁 (2认同)

use*_*904 7

尝试启动Cassandra时,我收到了同样的错误消息.但是我注意到我在启动Cassandra作为root时才遇到错误.当我开始使用Cassandra作为我的本地用户时,它工作正常.

原来只为我的本地用户配置了java:

$ java -version
java version "1.7.0_60"
Java(TM) SE Runtime Environment (build 1.7.0_60-b19)
Java HotSpot(TM) 64-Bit Server VM (build 24.60-b09, mixed mode)
$ sudo java -version
sudo: java: command not found
Run Code Online (Sandbox Code Playgroud)

这解决了这个问题:

告诉系统您已安装JRE(将usr/local/java/jre1.7.0_60/bin/java更新为当前路径):

$ sudo update-alternatives --install "/usr/bin/java" "java" "/usr/local/java/jre1.7.0_60/bin/java" 1
Run Code Online (Sandbox Code Playgroud)

将新JRE设置为默认值:

$ sudo update-alternatives --set java /usr/local/java/jre1.7.0_60/bin/java
Run Code Online (Sandbox Code Playgroud)

现在为root安装了java,并且可以以root身份启动Cassandra而不会显示错误消息.