环境
-
环境准备
CentOS 7 64位 、Hadoop2.7.2、jdk1.8
这里使用的是虚拟机安装CentOS 7 系统进行环境搭建。
-
下载地址
- CentOS 7 镜像:https://mirrors.tuna.tsinghua.edu.cn/centos/7/isos/x86_64/
- Hadoop 2.7.2 https://archive.apache.org/dist/hadoop/common/hadoop-2.7.2/
- jdk1.8 https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
准备工作
-
准备3台 CentOS 7 虚拟机
虚拟机有克隆的功能,所以可以先准备好一台虚拟机,设置好NAT联网模式,关闭了防火墙,设置了静态IP,然后再克隆出另外2台。
但是分布式集群中每个节点的ip地址是不同的,因此还要分别修改这3台主机的ip地址。
但是hadoop、jdk的安装就不要使用克隆了,在真实的生产环境中使用的肯定不是虚拟机,这就得学习工作中会用到的一些东西,比如scp,比如写个集群分发脚本。
-
设置网络连接方式为NAT、关闭防火墙、设置静态ip
没有进行虚拟机网络连接方式为NAT 的先看之前的博客记录:虚拟机使用NAT模式联网 。然后再关闭防火墙,给节点设置不同的静态ip,详细步骤也在上面的博客中。
博客的大致内容:
这里,我准备把3个节点的IP地址和主机名分别配置如下:
IP地址 主机名 192.168.137.101 hadoop101 192.168.137.102 hadoop102 192.168.137.103 hadoop103 如图,把ip地址改成192.168.137.101就可以了。
-
修改主机名
3个节点的主机名称我准备修改为hadoop101,hadoop102和hadoop103。这里就以hadoop101的修改为例(由于我从之前的虚拟机hadoop100克隆过来的,因此原本的主机名是hadoop100)。
通过
hostnamectl set-hostname [新的主机名]
可以永久修改主机名:[ht@hadoop100 ~]$ hostnamectl set-hostname hadoop101 [ht@hadoop100 ~]$ hostname #使用hostname命令查看主机名 hadoop101
-
配置集群各个主机名到IP地址的映射
修改 /etc/hosts,配置主机名到IP地址的映射:
[ht@hadoop100 ~]$ sudo vim /etc/hosts
新增以下内容:
192.168.137.101 hadoop101 192.168.137.102 hadoop102 192.168.137.103 hadoop103
注:图中hadoop100是我之前使用的伪分布式主机,这里无需添加它。
最后以hadoop101为例,使用ping命令检查各个节点之间的网络是否互通。
[ht@hadoop101 ~]$ ping hadoop102 [ht@hadoop101 ~]$ ping hadoop103
安装JDK和Hadoop
这里我们使用原先已经安装jdk和hadoop的伪分布式节点hadoop100来进行scp(安全拷贝)。
如果原先没有安装过hadoop的虚拟机,可以参照这篇博客Hadoop单机与伪分布式环境(CentOS)中的相关步骤(安装JDK、Hadoop单机配置) 在hadoop101上安装jdk和hadoop,然后再通过scp拷贝到hadoop102和hadoop103。
scp安全拷贝
scp -r $pdir/$fname $user@hadoop$host:$pdir/$fname
命令 递归 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
使用scp命令将hadoop100上的jdk与hadoop安装目录分别拷贝到hadoop101,102,103,最后还要将配置文件/etc/profile也拷贝过去,记得在每个节点上执行souce /etc/profile
使之生效。
[ht@hadoop100 ~]$ scp -r /opt/module/ root@hadoop101:/opt/module
The authenticity of host 'hadoop101 (192.168.137.101)' can't be established.
ECDSA key fingerprint is xxx.
ECDSA key fingerprint is xxx.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'hadoop101,192.168.137.101' (ECDSA) to the list of known hosts.
root@hadoop101's password:
再分别拷贝到hadoop102,hadoop103上:
[ht@hadoop100 ~]$ scp -r /opt/module/ root@hadoop102:/opt/module
[ht@hadoop100 ~]$ scp -r /opt/module/ root@hadoop103:/opt/module
注:
拷贝到hadoop101和其余两个节点上之所以使用的是它们的root用户,是因为/opt这个目录所属用户和用户组都是root,在其中进行创建新目录等操作需要root权限。
拷贝过来的/opt/module目录,需要在hadoop101、hadoop102、hadoop103上修改文件的所有者和所有者组:sudo chown ht:ht -R /opt/module
。
Hadoop分布式集群配置
集群分发脚本
之前在Hadoop伪分布式的搭建中修改了hadoop的一些配置文件,同样地,在完全分布式集群中也需要修改一些配置文件。那么问题就来了,我们现在有3个节点,难道要一个一个地去修改配置文件吗?这显然很浪费时间,而且容易出错。
因此,我们可以写一个集群分发脚本来自动同步多个节点的同一个配置文件。
在hadoop101的用户ht的home目录下先创建一个目录:
[<