Windows7中在VMware下安装Ubuntu并部署Hadoop1.2.1分布式环境问题汇总与解决方法
在本文开始,感谢 cumtheima ( 博客地址:http://gaoxianwei.iteye.com/blog/2026942 ) ,我的 Hadoop1.2.1 分布式环境的配置是完全参考他的这篇博客。
由于本人刚开始接触 Hadoop,所以在配置的过程中出现很多问题,cumtheima 百忙中给了不少解答和帮助,在这里表示感谢。
同时,本文还参考了这篇文章:http://www.cnblogs.com/lanxuezaipiao/p/3525554.html ,主要参考该文中Hadoop的一些配置信息以及问题解答。
Hadoop1.2.1分布式环境的搭建链接:http://www.cnblogs.com/brig/p/3619244.html ,下面就我在配置过程中出现的问题及解决方法进行汇总:
一、permission denied 和 no such file or directory错误
在hadoop-1.2.1安装成功之后,执行命令:start-all.sh启动hadoop进程时报有两个错误:一个是permission denied;另一个是no such file or directory。
如图:(因截图原因,这里显示的是no such file or directory,permission denied 错误出现在前面未能截下来)

解决方法:
1.no such file or directory首先看一下,是否有这个文件,如果没有这属于一个低级错误。经查看,在 /opt/hadoop-1.2.1/ 目录下有相应的文件或目录,则排除 no such file or directory 的错误信息。继续往下看。
2.大多数因为权限问题:文件所有权
经过分析在分布式环境配置中,把hadoop-1.2.1的文件放到 /opt 目录下,造成安装时的用户对该文件或目录没有所有权,通俗点说就是:没有读写执行的权限。所以要将该文件或目录的所有权修改为当前用户,修改命令为:
sudo chown -r 当前用户名[:当前用户组] 目标文件或目录
针对当前分布式环境配置的修改命令为:sudo chown -r hadoop:hadoop /opt/hadoop-1.2.1/ ;注:三台 ubuntu 机器都要进行相应权限修改。
3.如果上面不行可以尝试格式化:hadoop namenode -format
格式化之前先删除tmp下面的所有文件,以及name,data文件夹。注:三台 ubuntu 机器都要进行删除。
二、Warning: $HADOOP_HOME is deprecated. 警告问题
每次执行 hadoop version 或 start-all.sh 等命令,总会出现 Warning: $HADOOP_HOME is deprecated.的警告。经过网上查询:是因为Hadoop本身对HADOOP_HOME做了判断,具体在bin/hadoop和bin/hadoop-config.sh里。
在hadoop-config.sh里有如下的配置:
1 if [ "$HADOOP_HOME_WARN_SUPPRESS" = "" ] && [ "$HADOOP_HOME" != "" ]; then 2 echo "Warning: \$HADOOP_HOME is deprecated." 1>&2 3 echo 1>&2 4 fi
解决方法:
1.注释掉hadoop-config.sh里的上面给出的这段if fi 配置(不推荐)
2.在配置文件 /etc/profile 中增加一个环境变量:
export HADOOP_HOME_WARN_SUPPRESS=1
注:修改完后需要执行 source /etc/profile 或 . /etc/profile 命令使配置文件生效。
参考网址1:http://blog.csdn.net/jsj568261496/article/details/10175209
参考网址2:http://chenzhou123520.iteye.com/blog/1826002
三、Does not contain a valid host:port authority: hdfs://ubuntu_12.04_01:9000 ,造成 Namenode 和 JobTracker 进程无法启动
问题重现:以上两个问题解决之后,先执行 hadoop 格式化命令:hadoop namenode -format ;然后执行 start-all.sh 启动进程,接着 jps 查看进程信息;发现Namenode 和 JobTracker 进程一直无法启动,通过查看在 hadoop 安装目录中的日志文件 logs (这里只查看 namenode 和 jobtracker 的 log 文件),
报错信息为:
Does not contain a valid host:port authority: hdfs://ubuntu_12.04_01:9000 -- namenode log
Does not contain a valid host:port authority: ubuntu_12.04_01:9001 -- jobtracker log
这个问题困扰了我差不过一个星期的时间,在网上找的都是说:hadoop 目录下 conf/core-site.xml 文件中的 <name>fs.default.name</name> ,以及 conf/mapred-site.xml 文件中的 <name>mapred.job.tracker</name> 都没有配置好。经过反复对比,我的配置是完全正确的。
在这篇文章中 :http://f.dataguru.cn/thread-185139-1-1.html 说,在 /etc/hosts 配置中,主机名不能有下划线,对比发现我的主机名命名中有下划线。于是进行后面解决方法中的一连串修改,将下划线去掉之后依然报同样的错误:(说明:我将原来的主机名 ubuntu_12.04_01修改为 ubuntu-12.04-01,即将下划线改为连接符)
Does not contain a valid host:port authority: hdfs://ubuntu-12.04-01:9000 -- namenode log
Does not contain a valid host:port authority: ubuntu-12.04-01:9001 -- jobtracker log
最后请教 cumtheima ,他建议把点号也去掉, 把主机名修改为:ubuntu-1204-01 ,反正各种方法都试试,结果把点号去掉之后,jps 查看进程都可以启动了。
这里要说明一下:在 http://www.cnblogs.com/lanxuezaipiao/p/3525554.html 这篇文章中,主机名也包含有点号,但是她配置的 hadoop 环境中 namenode 和 jobtracker 是可以正常启动的。而我这个只要加点号就无法启动,至于什么原因,我也不知道,期待看到的大牛能解答哈。谢谢。
解决方法:
在主机名中不要包含下划线 "_" 或者点 "." ;
1、修改 /etc/hosts 中的主机名,不能带下划线,根据报错我修改为:ubuntu-1204-01 ,即将下划线改为连接符 "-",包含的点号 "." 去掉;
2、重新进行 SSH 的配置和连接,因为主机名修改了,如果不重新配置的话则三台机器 hadoop 连接不上;
3、重新配置三台 ubuntu 机器中的 core-site.xml 、hdfs-site.xml 、mapred-site.xml 、masters 和 slaves 文件,进行相应的主机名修改。
修改之后,重启三台机器,然后再次进行 start-all.sh 命令启动进程,通过 jps 查看进程信息发现 namenode 和 jobtracker 已经正常启动,问题终于解决。。。

浙公网安备 33010602011771号