一、虚拟机环境
需要安装JDK环境,CentOS下安装JDK可参考:
注意三台机器均要配置,因为启动时,namenode会启动其它机器。
二、Hadoop环境
hadoop1.2.1
idk7u79-linux-i586.tar.gz
三、开始搭完全分布式hadoop
三台机器,角色配置如下
hostname 角色配置centos1 namenode
centos2 datanode, secondaryNameNode
centos3 datanode
1、hadoop配置
分别在三台虚拟机内拷贝hadoop-1.2.1.tar.gz,并解压: tar -zxvf hadoop-1.2.1.tar.gz
conf目录文件配置
conf目录下文件 配置项 备注core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://centos:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop-tmp</value>
</property>
</configuration>
1、fs.default.name:配置namenode站点地址。需要注意。9000端口是hdfs rpc协议端口,如果从浏览器访问,则是http协议,端口号是50070.例::50070
2、hadoop.tmp.dir默认配置/tmp/hadoop-${user.name},hadoop文件数据会默认配置在此目录,由于tmp目录,linux重启后自动清空,因此这里对hadoop.tmp.dir进行手动指定。
hadoop-env.sh export Java_HOME=/usr/local/java/jdk1.7.0_79
配置jdk时在系统配置了JAVA_HOME,但是hadoop不认,必须要在这里修改成你现在的路径。
hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
lock最大附本数,配置2台dataNode,此处填2.masters centos1 master文件用来配置secondaryNameNod, 注意是secondaryNameNode,不是nameNode
slaves
centos1
centos2 (一个节点一行)
2、格式化dfs
cd /home/hadoop-1.2/bin/
./hadoop namenode -format (格式化成功后会在/opt/hadoop-tmp/dfs/name/下生成格式化文件)
3、hadoop路径每台机器要保持一致
配置完成后,NameNode机器上输入命令,即可完成hadoopo的hdfs分布式服务的启动。
root@centos bin]# ./start-dfs.sh
4、启动后结果
在浏览器中输入{NameNode IP}:50070即可访问配置的hdfs环境
四、配置中常见问题
1、JAVA_HOME is not set.
错误日志:
root@centos bin]# ./start-dfs.sh
starting namenode, logging to /home/alvin/hadoop-1.2.1/libexec/../logs/hadoop-root-namenode-centos.out
centos1: bash: line 0: cd: /home/alvin/hadoop-1.2.1/libexec/..: No such file or directory
centos2: bash: line 0: cd: /home/alvin/hadoop-1.2.1/libexec/..: No such file or directory
centos2: starting datanode, logging to /opt/hadoop-1.2/libexec/../logs/hadoop-root-datanode-centos2.out
centos1: starting datanode, logging to /usr/hadoop-1.2.1/libexec/../logs/hadoop-root-datanode-centos1.out
centos2: Error: JAVA_HOME is not set.
centos1: Error: JAVA_HOME is not set.
centos1: bash: line 0: cd: /home/alvin/hadoop-1.2.1/libexec/..: No such file or directory
centos1: starting secondarynamenode, logging to /usr/hadoop-1.2.1/libexec/../logs/hadoop-root-secondarynamenode-centos1.out
centos1: Error: JAVA_HOME is not set.
产生原因三种:
(1)、JDK未配置
(2)、hadoop在每台机器路径不一致,会报JAVA_HOME is not set.问题
该问题首先会想到centos1, centos2两台机器JDK环境是否有配置JAVA_HOME,但是查看均已配了JDK环境。
仔细阅读日志,发现问题是No such file or directory
centos1: bash: line 0: cd: /home/alvin/hadoop-1.2.1/libexec/..: No such file or directory
centos2: bash: line 0: cd: /home/alvin/hadoop-1.2.1/libexec/..: No such file or directory
解决方法:hadoop在每台机器配置路径要一致
(3)、hadoop-env.sh里面没有配置JAVA_HOME
解决方法:配置jdk时在系统配置了JAVA_HOME,但是hadoop不认,必须要在这里修改成你现在的路径。
分析原因:
由于centos1下hadoop路径在/home/alvin/hadoop-1.2.1/下,centos2与centos3路径在/opt/hadoop-1.2/下,
启动datanode或secondaryNameNode节点时,报No such file or directory.
可以看到centos2与centos3都是按照centos1机器的hadoop路径去读取文件的。因此报 No such file or directory
2、启动dfs服务时,jps命令查看,NameNode启动,DataNode和SecondaryNameNode未启动。
防火墙未关,输入命令service iptables stop关闭三台机器防火墙
3、org.apache.hadoop.security.AccessControlException
解决方法
在 hdfs-site.xml 添加参数:
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>