Bash 使用Hadoop:localhost:Error:JAVA\u HOME未设置

Bash 使用Hadoop:localhost:Error:JAVA\u HOME未设置,bash,hadoop,ubuntu-12.04,java-home,Bash,Hadoop,Ubuntu 12.04,Java Home,我正在使用Ubuntu12.04LTS 我正在阅读hadoop快速入门手册,以创建一个伪分布式操作。这看起来简单明了(容易!) 但是,当我尝试运行start all.sh时,我得到: localhost: Error: JAVA_HOME is not set. 我已经阅读了有关stackoverflow的所有其他建议,并已执行以下操作,以确保设置了JAVA_HOME: 在/etc/hadoop/conf/hadoop env.sh中,我设置了 JAVA_HOME=/usr/lib/jvm/j

我正在使用Ubuntu12.04LTS

我正在阅读hadoop快速入门手册,以创建一个伪分布式操作。这看起来简单明了(容易!)

但是,当我尝试运行
start all.sh
时,我得到:

localhost: Error: JAVA_HOME is not set.
我已经阅读了有关stackoverflow的所有其他建议,并已执行以下操作,以确保设置了
JAVA_HOME

/etc/hadoop/conf/hadoop env.sh
中,我设置了

JAVA_HOME=/usr/lib/jvm/java-6-oracle
export JAVA_HOME
JAVA_HOME=/usr/lib/jvm/java-6-oracle
export JAVA_HOME
PATH=$PATH:$JAVA_HOME/bin
export PATH
/etc/bash.bashrc
中,我设置了

JAVA_HOME=/usr/lib/jvm/java-6-oracle
export JAVA_HOME
JAVA_HOME=/usr/lib/jvm/java-6-oracle
export JAVA_HOME
PATH=$PATH:$JAVA_HOME/bin
export PATH
哪个java
返回:

/usr/bin/java
/usr/lib/jvm/java-6-oracle
java–版本
有效

echo$JAVA\u HOME
返回:

/usr/bin/java
/usr/lib/jvm/java-6-oracle
我甚至尝试成为root用户,并在终端中显式编写:

$ JAVA_HOME=/usr/lib/jvm/java-6-oracle
$ export JAVA_HOME
$ start-all.sh
如果你能告诉我如何解决这个错误,我将不胜感激。
我在想我的
JAVA\u HOME
不知怎么被覆盖了。如果是这样的话,你能给我解释一下如何使我的导出成为全局的吗?

调试的方法是在start-all.sh中添加一个“echo$JAVA\u HOME”。您是以不同的用户名运行hadoop环境,还是以自己的身份运行?如果是前者,很可能没有为该用户设置JAVA_HOME环境变量


另一个潜在的问题是您错误地指定了JAVA_HOME,并且您提供的值没有指向JDK/JRE。请注意,“哪种java”和“java-version”都可以工作,即使java\u HOME设置不正确。

我使用的是hadoop 1.1,面临同样的问题

通过将
/etc/hadoop/hadoop env.sh
中的
JAVA\u HOME
变量更改为:

export JAVA_HOME=/usr/lib/jvm/<jdk folder>
export JAVA_HOME=/usr/lib/jvm/

解决此问题的方法是导出conf/hadoop-env.sh文件中的JAVA_HOME变量

不管您是否已经在~/.bashrc中导出了该变量,它仍然会显示错误。

因此,编辑conf/hadoop env.sh并取消对“export JAVA_HOME”行的注释,并为其添加适当的文件系统路径,即指向JAVA JDK的路径

#要使用的Java实现。必需。
export JAVA_HOME=“/path/to/JAVA/JDK/”


摘自etc/hadoop/hadoop-env.sh

唯一需要的环境变量是JAVA_HOME。其他的都是 可选。运行分布式配置时,最好 在此文件中设置JAVA_HOME,以便在 远程节点


这意味着更好,建议将JAVA_设置在此处。。即使现有定义读取JAVA_HOME变量。也许它没有从之前设置的值中获取JAVA_HOME的值。。。标准apache手册没有说明这一点:(:(

检查您的备选方案是否指向正确的版本,您可能实际指向不同的版本,并试图在另一个已安装的版本上更改hadoop-env.sh

-备选方案——安装/etc/hadoop/conf[generic_name][your correct path]priority{进一步检查备选方案手册页}

要手动设置备选方案


备选方案——设置[generic name][your current path]。

conf/hadoop env.sh

export JAVA_HOME=/etc/local/java/<jdk folder>
export JAVA_HOME=/etc/local/JAVA/

注意:不要使用
导出JAVA_HOME=${JAVA_HOME}

此错误来自第180行

if [[ -z $JAVA_HOME ]]; then
   echo "Error: JAVA_HOME is not set and could not be found." 1>&2
   exit 1
fi
libexec/hadoop config.sh

在该脚本中尝试echo
$JAVA_HOME
。如果它无法识别

使用以下内容查找您的
JAVA\u主页

$(readlink-f/usr/bin/javac|sed“s:/bin/javac::”)

并更换线路

export JAVA_HOME=${JAVA_HOME}

在使用JAVA_HOME的
/etc/hadoop/hadoop env.sh
中,您可以从上面的命令获得。

hadoop 1.1中,我也遇到过类似的问题 我没有注意到
JAVA_HOME
中有注释:
hadoop/conf/hadoop env.sh

export JAVA_HOME=/etc/local/java/<jdk folder>
是的

/#JAVA_HOME=/usr/lib/jvm/java-6-oracle
必须把它改成

JAVA_HOME=/usr/lib/jvm/java-6-oracle

不管debian或任何linux版本,只要知道
~/.bash\u profile
属于特定用户,并且不是系统范围的。 在伪分布式环境中,hadoop在
localhost
上工作,因此.bash\u配置文件中的
$JAVA\u HOME
不再有用


只需在
~/.bashrc
中导出JAVA_HOME,并在系统范围内使用它。

在ubuntu LTS 16.04上遇到了相同的问题。运行
bash-vx./bin/hadoop
可以测试JAVA是否是目录。因此我将JAVA_HOME更改为文件夹,它就工作了

++ [[ ! -d /usr/bin/java ]]
++ hadoop_error 'ERROR: JAVA_HOME /usr/bin/java does not exist.'
++ echo 'ERROR: JAVA_HOME /usr/bin/java does not exist.'
ERROR: JAVA_HOME /usr/bin/java does not exist.
所以我把
/etc/hadoop/hadoop env.sh
中的JAVA_HOME改为

export JAVA_HOME=/usr/lib/jvm/java-8-oracle/jre/

hadoop启动很好。这也在本文中提到。

我把它放在文件
~/.bashrc
的第一行,然后它工作得很好


export JAVA_HOME=/usr/lib/jvm/default JAVA

当您更改bashrc时,您需要重置terminalThanks。当时我以Root用户身份运行它(以避免权限问题)它覆盖了我的JAVA_主页。我最终创建了一个新用户并赋予了它正确的权限。Bash.Bashrc使用了新的用户名。现在一切都很好[如new to Solution:)]我还必须显式地设置它,而不是${JAVA_HOME}@NikitaG。我也是这样做的。即使我回显${JAVA_HOME}始终打印正确的值,只显式设置它。在hadoop-2.7.3中,
hadoop env.sh
文件位于
hadoop-2.7.3/etc/hadoop
目录中,而不是
conf
目录是的,情况就是这样。它也适用于hadoop-2.6.0。谢谢!适用于hadoop-2.7.3适用于hadoop-3.0在3038年也适用于hadoop 2.10.1你能详细说明你的答案吗?再加上一点关于你提供的解决方案的描述?我也面临同样的问题,