hadoop安装包:hadoop0.20.205.0.tar.gz 操作系统: fedora14 jdk版本: jdk1.6.0_31 一、安装过程 对于hadoop ,不同的系统会有不同的节点划分方式。在HDFS看来,节点分为Namenode和Datanode,其中Namenode只有一个,datanode可以有多个;在MapReduce看来,节点又分为jobtracker和tasktracker,其中jobtracker只有一个,而tasktacker可以有多个。namenode和jobtracker可以部署在不同的机器上,也可以部署在同一机器上。部署namenode和/或jobtracker的机器是master,其余的都是slaves。用户甚至可以将namenode、datanode、jobtacker、tasktracker都部署在一台机器上。详细的配置方法如下。 配置之前,确保所有主机的防火墙处于关闭状态。 1. 配置namenode和datanode 配置成功的关键在于确保各机器上的主机名和IP地址之间能正确解析。修改每台机器的/etc/hosts文件,如果该台机器作namenode用,则需要在文件中添加集群中所有机器的IP地址及其对应 主机名;如果该台机器仅作为datanode用,则只需要在文件中添加本机和namenode的IP地址及其对应的主机名。 (修改主机名的命令为:hostname 新名称) 假设有两台机器,主机名分别为summer1,summer2,IP地址为10.0.5.199,10.0.5.198,summer1作为namenode,summer2作为datanode,刚两者的hosts文件配置是一样的,如下:
2. 在所有机器上建立相同的用户summer $useradd -m summer $passwd summer 3. ssh配置 该配置主要是为了实现在机器间执行指令时不需要输入密码。在namenode上执行以下命令: $cd ~/.ssh $ssh-keygen -t rsa --------------------然后一直按回车键,就会按照默认的选项将生成的密钥保存在.ssh/id_rsa文件中。 $cp id_rsa.pub authorized_keys $scp authorized_keys summer@10.0.5.198:/home/summer/.ssh ------把刚刚产生的authorized_keys文件拷一份到datanode上. 最后进入所有机器的.ssh目录,改变authorized_keys文件的许可权限。 $chmod 644 authorized_keys 这时从namenode所在机器向其他datanode所在机器发起ssh连接,只有在第一次登录时需要输入密码,以后则不需要。 4. 在所有机器上配置hadoop 首先在namenode所在机器上配置,执行如下解压命令: $sudo tar -xzvf hadoop0.20.205.0.tar.gz --------------解压 $sudo mv hadoop0.20.205.0 hadoop -----------------重命名文件夹,把名字中的版本号去掉,方便以后的命令输入 解压完成后,编辑conf/core-site.xml,conf/hdfs-site.xml,conf/mapred-site.xml core-site.xml <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>hadoop.tmp.dir</name> <value>/home/summer/hadoopTMP</value> </property> <property> <name>fs.default.name</name> <value>hdfs://summer1:9000</value> </property> </configuration> hdfs-site.xml <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration> mapred-site.xml <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>mapred.job.tracker</name> <value>summer1:9001</value> </property> </configuration>
编辑conf/slaves,加入所有slaves/datanodes的主机名(或IP),每个主机名占一行,此处即为summer2(或10.0.5.198) 把namenode机器上配置好的hadoop安装包复制到其他的datanode机器上: $scp -r hadoop summer@10.0.5.198:/usr/local (此处可能会提示没有权限,是普通用户对/usr/local目录没有操作权限,可以在10.0.5.198机器上使用chown命令更改/usr/local目录对summer用户有权限,或者不使用该目录,而换成smmer家目录下的某个目录) 编辑所有机器上的conf/hadoop-env.sh文件,重点修改下面两行:
现在hadoop已经在集群上部署完毕。如果要新加入或者删除节点,仅需要修改namenode的master和slaves文件,并作相关的拷贝工作。 5. hadoop运行 运行前先在 /etc/profile文件中配置hadoop的环境变量,如下图所示:
格式化分布式文件系统,启动守护进程的命令如下: $hadoop namenode -format --------------------因为配置了环境变量,此处不需要输入hadoop命令的全路径 /hadoop/bin/hadoop 执行后的结果中会提示“ dfs/name has been successfully formatted”。否则格式化失败。 启动hadoop: $start-all.sh 启动成功后,分别在namenode和datanode所在机器上使用 jps 命令查看,会在namenode所在机器上看到namenode,jobtracker,secondaryNamenode,会在datanode所在机器上看到datanode,tasktracker. 否则启动失败,检查配置是否有问题。 停止hadoop: $stop-all.sh
二、常见问题:
1.安装完java和hadoop之后,直接在终端下运行start-all.sh,在启动namenode、datanode等进程时,
2.在解决了问题1之后,又出现一个问题,如下图所示,
在网上搜索了好久,发现有人也遇到过同样的问题,参考他的方法解决了此问题,原文地址:http://bbs.chinacloud.cn/showtopic-3564.aspx
3.在配置好hadoop伪分布模式后,使用start-all.sh成功启动各个节点,使用jps查看成功, 解决办法:1.查看防火墙是否关闭,要求关闭防火墙。如果还不行,2.请查看/etc/hosts文件是否配置正确。
4.datanode无法启动 |