【问题标题】:cassandra 2 complaining about Java 7 when I have Java 7 installed当我安装了 Java 7 时,cassandra 2 抱怨 Java 7
【发布时间】:2014-07-29 22:19:44
【问题描述】:
$ cassandra 
Cassandra 2.0 and later require Java 7 or later.

好的,初始化脚本的那部分发生了什么?

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

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

$ 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

如果我运行which java

$ which java
/usr/bin/java

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

/usr/bin/java

这里令人沮丧的部分是我过去曾运行过此程序,但自从我退回服务器后,我无法启动 cassandra。

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

【问题讨论】:

  • 修改脚本以打印出$JVM_VERSION,这样你就可以看到它实际得到了什么。
  • @HunterMcMillen 好建议,我得到了 1.6.0,但是当我在命令行运行这些命令时我没有得到。 WTF。
  • 尝试在脚本外部和内部运行which java,以查看引用了哪些可执行文件。
  • @HunterMcMillen 我更新了这个问题。我看不出有什么不同。
  • @SotiriosDelimanolis “完整打印”?你一定是在开玩笑。

标签: java cassandra


【解决方案1】:

根据文档:http://wiki.helioviewer.org/wiki/Apache_Cassandra_Installation

设置 JAVA_HOME

确保设置了 JAVA_HOME:echo $JAVA_HOME

所以请确保JAVA_HOME 指向/path/to/jdk7

【讨论】:

  • svn.apache.org/repos/asf/cassandra/trunk/conf/cassandra-env.sh -- 我不知道为什么这很重要,脚本不使用 JAVA_HOME -- 而这些文档已经有 3 年历史了
  • @jcollum:我相信你在错误的脚本(cassandra-env.sh)中寻找JAVA_HOME,它确实在“cassandra启动脚本”(svn.apache.org/repos/asf/cassandra/trunk/bin/cassandra)中使用。作为实验,只需将JAVA_HOME 设置到你的 JDK 目录(例如:我在 Mac OS 上是/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home,我将它作为环境变量)并查看 cassandra 是否正确启动。我使用的是 1.2.X 版本,所以目前无法测试。 HTH。
  • 如果您查看脚本,如果它没有找到 JAVA_HOME,它将默认为“java”位它仍然无法正常工作
  • 您确定路径中的java 命令来自JDK7,还是其他版本?只是为了确保我会指定 JAVA_HOME 指向 JDK7 目录...您还可以使用以下命令检查您正在使用的版本(如果您安装了多个版本):update-alternatives --config java
【解决方案2】:

我在尝试启动 Cassandra 时收到了相同的错误消息。但是我注意到我只是在以 root 身份启动 Cassandra 时才收到错误消息。当我以本地用户身份启动 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

这解决了问题:

告诉系统你已经安装了 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

将新的 JRE 设置为默认值:

$ sudo update-alternatives --set java /usr/local/java/jre1.7.0_60/bin/java

现在为 root 安装了 java,并且 Cassandra 可以作为 root 启动而没有错误消息。

【讨论】:

  • 对不起,我不知道这是否真的有效——结果证明 Cassandra 不适用于我的应用程序,所以几天后我放弃了它。但这是一个有用的答案,所以它得到了答案标记。
【解决方案3】:

我在 Linux 上安装 DSE 4.6 时遇到了类似的问题。当您将 JAVA_HOME(作为 root)设置为安装 JRE 1.7.x 的目录时,问题得到解决。

【讨论】:

    【解决方案4】:

    为了解决这个问题,我将 $JAVA_HOME 环境变量更改为我找到它的路径:

    System Preferences -> Java -> java (tab in Java Control Panel) -> View -> Path
    

    我有两个版本的java,默认的一个是旧版本的java。

    【讨论】:

      【解决方案5】:

      现在 Java 7 更新 101 已经发布,似乎有一个更新的问题。我安装了这个破坏 Cassandra 的版本:

      yum install java-1.7.0-oracle-1.7.0.101-1jpp.1.el7.x86_64
      

      安装以前的版本(更新 99)解决了这个问题:

      yum install java-1.7.0-oracle-1.7.0.99-1jpp.1.el7.x86_64
      

      我猜在 cassandra 启动脚本的某个地方,一个正则表达式是为更新版本中的 2 个字符而不是 3 个字符编写的。

      【讨论】:

        【解决方案6】:

        请参阅此CASSANDRA-11716 问题。那里发布的解决方案对我有用。

        【讨论】:

          【解决方案7】:

          这是由 Cassandra 中的错误引起的:https://issues.apache.org/jira/browse/CASSANDRA-11661

          【讨论】:

            【解决方案8】:

            上面没有对我有用。我试图用主管运行 cassandra,但遇到了 java 错误。所以我发现我必须在 cassandra.in.sh 中设置 java 路径。我只需要设置 JAVA_HOME=/usr/local/jdk1.8.0_171 并保存它,这对我有用。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2017-10-22
              • 2014-12-07
              • 2013-04-22
              • 2012-11-20
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多