JAVA _Home未设置在Hadoop中
我是hadoop的初学者,并尝试在我的Ubuntu中安装和运行hadoop作为单节点集群。 这是我的hadoop_env.sh中的JAVA_HOME
# The java implementation to use. export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386/ export HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-"/etc/hadoop"}
但是当我运行它时,会出现以下错误 –
Starting namenodes on [localhost] localhost: Error: JAVA_HOME is not set and could not be found. localhost: Error: JAVA_HOME is not set and could not be found. Starting secondary namenodes [0.0.0.0] 0.0.0.0: Error: JAVA_HOME is not set and could not be found.
如何删除此错误?
我调试了代码并发现即使在环境中设置了JAVA_HOME,该值也会丢失,因为在代码中进行了与其他主机的ssh连接,并且在start-dfs.sh中设置良好的JAVA_HOME变量变得未设置在hadoop-env.sh。
这个问题的解决方案是在hadoop-env.sh中设置JAVA_HOME变量,它应该可以正常工作。
我有同样的错误,并用土壤耆那教的评论解决了它,但为了使它更加清晰:hadoop-env.sh使用了一个表达式,如
export JAVA_HOME=${JAVA_HOME}
如果您对JVM安装的路径进行硬编码,则可以正常工作
export JAVA_HOME=/usr/lib/jvm/java...
环境变量的这个分辨率似乎失败了。 硬编码为我解决了这个问题。
在您的HADOOP_HOME / conf目录下,请更新hadoop-env.sh
文件。 它有导出JAVA_HOME的条目。
在此文件中设置适当的JAVA_HOME应该可以解决您的问题。
你在加载hadoop_env.sh
吗? 你可能会引用hadoop-env.sh
(破折号而不是下划线 – 这是在conf目录下)
顺便说一下,这是一个非常有用的快速安装指南:
http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-single-node-cluster/
只要您使用默认conf目录$HADOOP_HOME/conf
或$HADOOP_HOME/etc/hadoop
上述答案就应该有效。 如果您使用的是其他conf文件夹,则应该执行以下操作。
- 将
hadoop-env.sh
文件从默认的conf目录复制到conf文件夹,比如/home/abc/hadoopConf
。 -
更换线
#export JAVA_HOME=${JAVA_HOME}
以下内容:
export JAVA_HOME=/usr/lib/jvm/java-8-oracle export HADOOP_CONF_DIR=/home/abc/hadoopConf
适当地更改值。 如果您在.bashrc
或.profile
或.bash_profile
配置了与hadoop相关的任何其他环境变量,请考虑在上面的行旁边添加它们。
我正在使用hadoop 2.8.0。 即使我导出了JAVA_HOME(我把它放在.bashrc中),我仍然在尝试运行start-dfs.sh时遇到了这个错误。
user@host:/opt/hadoop-2.8.0 $ echo $JAVA_HOME user@host:/opt/hadoop-2.8.0 $ $JAVA_HOME/bin/java -version java version "1.8.0_65" ... user@host:/opt/hadoop-2.8.0 $ sbin/start-dfs.sh ... Starting namenodes on [] localhost: Error: JAVA_HOME is not set and could not be found. localhost: Error: JAVA_HOME is not set and could not be found.
我可以让它运行的唯一方法是将JAVA_HOME = path_to_java添加到etc / hadoop / hadoop-env.sh然后获取它:
:/opt/hadoop-2.8.0 $ grep JAVA_HOME etc/hadoop/hadoop-env.sh #export JAVA_HOME=${JAVA_HOME} export JAVA_HOME=path_to_java user@host:/opt/hadoop-2.8.0 $ source etc/hadoop/hadoop-env.sh
也许(采购hadoop-env.sh)隐含在上面的post中。 只是觉得有人应该大声说出来。 现在它运行了。 我遇到了其他问题(我怀疑,由于我正在使用的服务器上的资源有限),但至少我已经过了这个问题。
首先,您必须在hadoop_env.sh
设置JAVA_HOME。 (您的.bashrc中的本地JAVA_HOME可能会被忽略)
# The java implementation to use. export JAVA_HOME=/usr/lib/jvm/default-java
然后,将HADOOP_CONF_DIR
指向hadoop_env.sh
目录。 在〜/ .bashrc中,添加以下行:
HADOOP_CONF_DIR="/usr/local/hadoop/etc/hadoop" export HADOOP_CONF_DIR
其中/usr/local/hadoop/etc/hadoop
是包含hadoop_env.sh
的目录
它不知道程序和文件之间的空间:“程序文件”。 因此,我将jdk的文件夹复制到C:或不包含文件夹名称空间的文件夹,并分配:export JAVA_HOME = Name_Path_Copied。 我看到它运行正常
- 即使Hadoop正在运行,Hadoop也没有在作业跟踪器中显示我的工作
- 从Java写入HDFS,“只能复制到0个节点而不是minReplication”
- 如何在Hadoop中使用CompressionCodec
- 如何在Hadoop-.20 api中指定KeyValueTextInputFormat分隔符?
- 在HADOOP地图中使用generics可以减少问题
- 我在Hadoop中收到此错误,找不到可执行文件null \ bin \ winutils.exe
- 使用Hadoop Streaming时通过脚本运行Java应用程序:java.lang.NoClassDefFoundError
- 从Java应用程序中执行Pig
- 如何构建/运行这个简单的Mahout程序而不会出现exception?