hadoop 的单机配置在hadoop的文档中已经有了详细的介绍,当然,集群的配置也有详细描述(Hadoop的中文文 档:http://www.hadoop.org.cn/document/cn/r0.18.2/)。但在集群配置中必然会遇到各种问题,下面我就描述 下我配置Hadoop集群的过程和遇到的问题,其中解释不清楚或者不正确的地方,还请谅解。
一.Hadoop的配置:
首先,是准备工作,就是在各个节点安装相应的软件。
1.本次配置中,使用VMware虚拟出三个虚拟机(Ubuntu 8.04TL),三个节点的用户名都是hadoop,使用桥接,这样各节点跟主机使用相同的IP段,可以通过外界访问namenode。三个节点的主机名 分别是一个namenode节点:NameNode(ip:125.216.227.**1),两个datanode节 点:DataNode1(ip:125.216.227.**2)和DataNode2(125.216.227.**3)。然后在网络中配置好各节点的 名称。
2.本次配置采用截至到现在最稳定的0.18版本的Hadoop,将Hadoop解压到Hadoop部署目录结构如下:/home/hadoop /HadoopInstall,所有的hadoop版本放在这个目录中。将hadoop0.18.0压缩包解压至HadoopInstall中,为了方便 以后升级,建议建立一个链接指向要使用的hadoop版本,不妨设为hadoop:$ln -s hadoop0.18.0 hadoop
3.在各节点安装好jdk和ssh,jdk需加入环境变量。因为在Hadoop启动以后,Namenode是通过SSH(Secure Shell)来启动和停止各个节点上的各种守护进程的,这就需要在节点之间执行指令的时候是不需要输入密码的方式,故我们需要配置SSH使用无密码公钥认 证的方式。该认证对于hadoop的集群配置只需单向认证即可,方法如下:
(1)在namenode节点下通过如下命令:
$ scp authorized_keys (slave ip):/home/username/.ssh #把slave的授权文件拷贝到master
$ cat id_dsa.pub >>authorized_keys
$chmode 644 authorized_key
(2)在datanode节点下:
$chmode 644 authorized_key
4.现在开始配置hadoop的conf目录下的配置文件:先配置环境配置文件:hadoop-env.sh,具体配置请查看Hadoop文档。在此贴出我的部分配置信息(其他默认)如下,以供参考:
# The java implementation to use. Required.
export JAVA_HOME=/usr/lib/jvm/java-6-sun-1.6.0.07
export HADOOP_HOME=/home/hadoop/HadoopInstall/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/conf
export HADOOP_PID_DIR=/home/hadoop/HadoopInstall/PID
export PATH=$PATH:$HADOOP_HOME/bin
# Extra Java CLASSPATH elements. Optional.
#export HADOOP_CLASSPATH=
再配置hadoop-site.xml。具体配置同样查看文档,代码:
(1)NameNode的配置:
(2)DataNode的配置信息:
(3)配置slave和master文件,slave文件保存了datanode的ip信息,而master则保存了namenode的ip信息。
然后是查看hadoop是否配置成功,并启动hadoop。
配置好后先在/home/hadoop /HadoopInstall下建立/tmp目录。然后在 hadoop的bin目录下:
$jps
会返回该节点的配置信息,如下:
20198 NameNode
20318 SecondaryNameNode
20684 Jps
20383 JobTracker
同样,在datanode也会返回该datanode解嗲的信息:
14784 TaskTracker
17044 Jps
14683 DataNode
然后进入hadoop目录下:
$bin/hadoop namenode -format #在NameNode格式化一个新的分布式文件系统
$bin/start-dfs.sh #启动namenode上的hadoop
$bin/start-mapred.sh #启动JobTracker
$netstat -tnl #查看50070,54310,50090端口是否启动
浏览NameNode和JobTracker的网络接口,它们的地址默认为:
- NameNode - http://localhost:50070/
- JobTracker - http://localhost:50030/
最后将配置好的Hadoop打包发送到各个slave:
$cd /home/hadoop/HadopInstall
$tar -cvf hadoop-0.18.0.tar.gz hadoop-0.18.0/
$scp -r hadoop-0.18.0.tar.gz hadoop@slave1:/home/hadoop /HadopInstall
$scp -r hadoop-0.18.0.tar.gz hadoop@slave2:/home/hadoop /HadopInstall
二.遇到的问题
(1)在重新格式化一个新的分布式文件时,需要将你NameNode上所配置的dfs.name.dir这一namenode用来存放NameNode 持久存储名字空间及事务日志的本地文件系统路径删除,同时将各DataNode上的dfs.data.dir的路径 DataNode 存放块数据的本地文件系统路径的目录也删除。如本此配置就是在NameNode上删除/home/hadoop/NameData,在DataNode上删除/home/hadoop/DataNode1和/home/hadoop/DataNode2。
这是因为Hadoop在格式化一个新的分布式文件系统时,每个存储的名字空间都对应了建立时间的那个版本(可以查看/home/hadoop /NameData/current目录下的VERSION文件,上面记录了版本信息),在重新格式化新的分布式系统文件时,最好先删除NameData 目录。必须删除各DataNode的dfs.data.dir。这样才可以使namedode和datanode记录的信息版本对应。
否则会出现能够启动datanode,但无法访问,也无法结束的错误,如下:
hadoop@HadoopHost:~/HadoopInstall/hadoop$ bin/stop-all.sh
stopping jobtracker
125.216.227.**2: stopping tasktracker
125.216.227.**3: stopping tasktracker
stopping namenode
125.216.227. ** 2: no datanode to stop
125.216.227. ** 3: no datanode to stop
125.216.227. ** 1: stopping secondarynamenode
以后有问题继续添加,希望大家予以指教。