在debian7虚拟机上安装hadoop2.6,期间遇到一些问题在此记录一下。
安装参考:
Hadoop安装教程_单机/伪分布式配置_Hadoop2.6.0/Ubuntu14.04
1、安装后出现
...
master: Error: JAVA_HOME is not set and could not be found.
...
需要看下对应日志的详细错误信息,在安装hadoop目录下(我的设置 HADOOP_PREFIX=/usr/local/hadoop) $HADOOP_PREFIX/logs/hadoop-hadoop-node-debian.log,根据信息可知道hadoop在运行环境中找不到 JAVA_HOME 变量,找不到jdk的位置
输入 env 发现我们已经设置了,但是hadoop发现不了,解决方法修改hadoop的环境设置文件,使用jdk的绝对路径:
在 $HADOOP_PREFIX/etc/hadoop/hadoop-env.sh 中,可以发现
export JAVA_HOME=${JAVA_HOME}
将${JAVA_HOME} 改成jdk绝对路径(我的jdk路径为 /usr/lib/jvm/jdk1.8.0_111),即
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_111
修改后重启hadoop,问题解决
2、启动 start-dfs.sh 失败
启动dfs时(sh ./sbin/start-dfs.sh)出现报错
...
Syntax error: word unexpected (expecting “)”)”
...
根据其信息找到对应的脚步文件发现并没有问题,最后发现是bash的问题,sh 等同于 bash --posix,直接启动或使用bash启动就正常了:
./sbin/start-dfs.sh
或
bash ./sbin/start-dfs.sh
参考:https://blog.csdn.net/qq_16018407/article/details/78899796
3、启动start-dfs.sh后,使用jps发现 namesecondary进程不在,其对应报错:
...
... FATAL org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode: Failed to start secondary namenode
java.net.BindException: Port in use: 0.0.0.0:50090
...
发现端口已存在被占用,应该是前面启动失败时导致的问题解决方法就是找到对应的进程id然后kill掉:
sudo lsof -i:50090 -P //找到对应的进程id
sudo kill -9 PID //kill掉对应的进程
再重启 start-dfs.sh即可(先执行stop-dfs.sh),问题解决
参考:
Hadoop 安装配置错误总结
更新至 2018-6-5