hadoop完全分布式集群搭建

强烈建议先看一遍hadoop伪分布式集群搭建,然后再按本文的hadoop完全分布式集群搭建进行配置。

集群规划

四台服务器,分别为layne1~4,分布如下:

  • layne1作为NameNode服务器
  • layne2作为SecondaryNameNode和DataNode服务器
  • layne3、layne4作为DataNode服务器

HDFS完全分布式搭建

详细步骤如下:

1、四台服务器之间互相均可以免密登录

可参考我之前的博客多台服务之间免密登陆

2、四台服务器JDK安装并配置环境变量

可参考rpm安装jdk

3、先在layne1上配置好,然后将配置好的hadoop拷贝到layne2~layne4上,这里所有配置都先在layne1上进行

将hadoop安装包拷贝到layne1上并解压,然后进行如下配置:

(1)配置hadoop-env.sh

由于通过SSH远程启动进程的时候默认不会加载/etc/profile设置,JAVA_HOME变量就加载不到,需要手动指定。

/opt/hadoop-2.6.5下,输入vim ./etc/hadoop/hadoop-env.sh,找到JAVA_HOME所在的行,并改为export JAVA_HOME=/usr/java/default

1
2
3
4
[root@layne1 hadoop-2.6.5]# pwd
/opt/hadoop-2.6.5
[root@layne1 hadoop-2.6.5]# cd ./etc/hadoop/
[root@layne1 hadoop]# vim hadoop-env.sh

(2)修改slaves指定DataNode的位置

1
2
3
4
5
/opt/hadoop-2.6.5/etc/hadoop
[root@layne1 hadoop]# vim slaves
layne2
layne3
layne4

(3)配置hdfs-site.xml

指定SecondaryNameNode的位置

1
2
3
[root@layne1 hadoop]# pwd
/opt/hadoop-2.6.5/etc/hadoop
[root@layne1 hadoop]# vim hdfs-site.xml

修改为如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
<configuration>
<!-- 指定block副本数 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- 指定secondarynamenode所在的位置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>layne2:50090</value>
</property>
</configuration>

(4)配置core-site.xml

这里是配置NameNode的位置和hadoop的存储目录

1
2
3
[root@layne1 hadoop]# pwd
/opt/hadoop-2.6.5/etc/hadoop
[root@layne1 hadoop]# vim core-site.xml

修改为:

1
2
3
4
5
6
7
8
9
10
11
12
<configuration>
<!-- 指定访问HDFS的时候路径的默认前缀 / hdfs://layne1:9000/ -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://layne1:9000</value>
</property>
<!-- 指定hadoop的临时目录位置-->
<property>
<name>hadoop.tmp.dir</name>
<value>/var/layne/hadoop/full</value>
</property>
</configuration>

4、将第3步配置好的hadoop拷贝到layne2~node4上

先将layne1上的hadoop目录打成压缩包

1
2
3
[root@layne1 opt]# pwd
/opt
[root@layne1 opt]# tar -zcvf hadoop-2.6.5.tar.gz hadoop-2.6.5/

/opt/hadoop-2.6.5.tar.gz 拷贝到layne2、layne3、layne4的对应目录中,即分别执行:

1
2
3
scp hadoop-2.6.5.tar.gz layne2:/opt
scp hadoop-2.6.5.tar.gz layne3:/opt
scp hadoop-2.6.5.tar.gz layne4:/opt

然后,在layne2、layne3、layne4分别解压

1
tar -zxvf hadoop-2.6.5.tar.gz

最后,删除四台虚拟机上的hadoop-2.6.5.tar.gz

1
rm -f hadoop-2.6.5.tar.gz

5、配置环境变量

在layne1上配置环境变量,在/etc/profile中最后一行加入:

1
2
3
4
export JAVA_HOME=/usr/java/default
export ZOOKEEPER_HOME=/opt/zookeeper-3.4.6
export HADOOP_HOME=/opt/hadoop-2.6.5
export PATH=$PATH:$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

然后,将etx/profile分别拷贝到layne2、layne3、layne4,再分别执行source /etc/profile使其立即生效。

6、格式化并启动

在layne1上执行:hdfs namenode -format
启动即可(该命令在四台服务器上哪一台执行都可以):start-dfs.sh

在四台机器上分别输入jps即可显示以下信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
layne1上显示
[root@layne1 current]# jps
1232 NameNode
1301 Jps
layne2上显示
[root@layne2 opt]# jps
1203 DataNode
1256 SecondaryNameNode
1295 Jps
layne3上显示
[root@layne3 opt]# jps
1300 DataNode
1487 Jps
layne4上显示
[root@layne4 /]# jps
1189 DataNode
1258 Jps

访问:http://layne1:50070,点击DataNodes一栏,会出现如下界面:

7、上传文件

1
2
3
4
5
6
[root@layne4 apps]# hdfs dfs -mkdir -p /user/abc
21/03/17 22:49:03 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
[root@layne4 apps]# ls
jdk-8u221-linux-x64.rpm
[root@layne4 apps]# hdfs dfs -put jdk-8u221-linux-x64.rpm /user/abc
21/03/17 22:49:46 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

上述命令将文件jdk-8u221-linux-x64.rpm上传到hadoop的/user/abc目录下,注意该目录不是Linux系统中的目录,这两者没关系。

在界面中可以看到上传的文件:

8、关闭hadoop集群

执行stop-dfs.sh关闭hadoop集群,该命令在hadoop集群中任意一台虚拟机执行均可。