hadoop完全分布式安装
时间:2014-11-08 22:54 来源:linux.it.net.cn 作者:IT
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/master,修改为master的主机名(或IP),此处为summer1(或10.0.5.199)
编辑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文件,重点修改下面两行:
# The java implementation to use. Required.:!
export JAVA_HOME=/usr/local/jdk1.6.0_31 #不同的机器上java根目录不同,根据实际情况进行设定
# The directory where pid files are stored. /tmp by default.
export HADOOP_PID_DIR=/usr/local/hadoop/run/tmp #防止数据丢失
现在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等进程时,
分别要求输入密码,这是因为当前用户对hadoop文件夹没有使用权限造成的。解决办法:
[summer@localhost ~]$ sudo chown -R summer:summer hadoop-0.20.2
注:当前用户为summer,所以组为summer,hadooop安装目录为:/home/summer/hadoop-0.20.2
2.在解决了问题1之后,又出现一个问题,如下图所示,
大概是要表明在运行hadoop-daemon.sh时hadoop-hadoop-namenode.pid权限不够导致namenode无法启动。
在网上搜索了好久,发现有人也遇到过同样的问题,参考他的方法解决了此问题,原文地址:http://bbs.chinacloud.cn/showtopic-3564.aspx
解决办法为:
第一步,在hadoop-config中修改hadoop-env.sh,添加:export HADOOP_PID_DIR=$HADOOP_HOME/run/tmp。改变pid的路径。
第二步,修改/etc/profile,添加:export HADOOP_PID_DIR=$HADOOP_HOME/run/tmp。
最后,运行start-all.sh后一切正常。
3.在配置好hadoop伪分布模式后,使用start-all.sh成功启动各个节点,使用jps查看成功,
使用浏览器查看:http://localhost:50070查看hdfs文件系统,一切正常。
在使用hadoop fs -copyFromLocal 或者-put时出现如现错误。大概意思是连接被拒绝。
copyFromLocal: Call to localhost/127.0.0.1:8020 failed on connection exception:
java.net.ConnectException: Connection refused
解决办法:1.查看防火墙是否关闭,要求关闭防火墙。如果还不行,2.请查看/etc/hosts文件是否配置正确。
4.datanode无法启动
在测试Hadoop的分布式环境搭建时,在namenode启动时信息正常(jps查看显示:JobTracker ,SecondaryNameNode ,NameNode ,Jps),而 在datanode上使用jps查看时,只显示了 tasktracker,
没有显示datanode ,解决办法如下:
(1)先检查conf/masters 和conf/slaves文件,确保配置没错。
(2)把所有节点的hadoop.tmp.dir指定的文件夹下的内容全部删掉
(3)重新格式化 namenode: $hadoop namenode -format
(4)启动 : $start-all.sh
查看namenode 和 datanode ,一切正常
(责任编辑:IT)
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无法启动 |