这两天折腾在eclipse中写Hadoop map-reduce jobs,遇到了很多问题,解决如下:
环境:
hadoop-0.20.203.0
eclipse-java-indigo-SR1-linux-gtk-x86_64
配置过程:
1、准备
装好操作系统,安装jdk(参考)、ssh,centos6.2装上之后一般就带有openssh,在Services里面启用即可。
然后配置ssh无密码登陆,为安装伪分布式hadoop集群做准备,执行命令:
$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa $ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys $ ssh localhostubuntu很顺利,不用输入密码即可登陆。但在contos上配置ssh无密码登陆有点纠结,需要修改/etc/ssh/ssh_config文件和authorized_keys的权限(参考 )修改完最好把系统重启一下。
另外,不要将启动hadoop的用户的主目录加密,否则没法配置ssh无密码登陆(参考 )。
2、安装Hadoop
从hadoop官网下载hadoop-0.20.203.0rc1.tar.gz到某个目录,如/srv,解压之,注意一定要将解压之后的目录及其子目录和文件的所有者改为将要启动hadoop的用户(参考 )。
之后设置HADOOP_HOME和PATH环境变量。虽然不是必须的,但为了以后方便,建议设置一下。在/etc/profile文件末尾添加:
export HADOOP_HOME=/srv/hadoop-0.20.203.0 export PATH=$PATH:$HADOOP_HOME/bin然后对hadoop进行配置,分别修改如下$HADOOP_HOME/conf中的6个文件:
hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、masters、slaves
具体的配置参考hadoop文档。但有一点需要注意:尽管配置的是伪分布式集群,建议不要在配置文件中使用localhost,因为如果使用localhost,以后在其他计算机上通过网络连接本机的hadoop时,会出现“拒绝连接”的情况(参考 ),我猜测这是因为hadoop的datanode是直接和用户建立连接的,不通过namenode,所以配置为localhost可能会导致用户试图和'localhost'上的datanode建立连接,故连接失败,猜测而已,目前没有能力去查证,还望指教。