这里用的VMware Workstation版本为15.0.1,CentOS操作系统版本为7.5(1804)
01.在VMware Workstation中新建虚拟机,选择【典型】安装
02.选择【稍后安装操作系统】
03.选择虚拟机操作系统为【Linux】,版本为【CentOS 7 64位】
04.虚拟机名称改为【CentOS01】,位置自定义
05.指定磁盘容量,这里默认为【20G】,虚拟磁盘拆分
06.完成创建
07.【编辑虚拟机设置】,选择【使用IOS映像文件】,使用在CentOS官网下载的【CentOS-7-x86_64-DVD-1804.iso】
08.开启虚拟机,出现下图界面按【ENTER】进入
09.选择语言为【简体中文】,点击【继续】
10.【安装源】为默认;【软件选择】为【GNOME桌面】,右侧的附加选项可以根据需要进行勾选,也可以不选择,此处不进行勾选;【安装位置】为默认自动选择;可以单击【网络和主机名】选项,查看虚拟机的IP地址,开启以太网卡,使虚拟机连接上网络,也可以不进行配置,在操作系统完成安装时手动配置,此处不进行配置。
11.设置【root】密码,并创建一个名为hadoop的管理员用户
12.安装完成后【重启】
13.重启后进入初始化设置,点击【LICENSE INFORMATION】后勾选【我同意许可协议】,点击左上角【完成】,点击【完成配置】
14.为避免此后操作出现用户权限不够而切换身份的麻烦,此处选择以root身份登入
15.进入图形界面,默认选择【汉语】,然后一直点击【前进】,【跳过】
至此,第一台虚拟机创建成功。
1.修改主机名
在分布式集群中,主机名用于区分不同的节点,并方便节点之间相互访问,因此需要修改主机的主机名。
查看主机名
hostname
执行以下命令,修改hostname文件内容,将主机名改为centos01:
vi /etc/hostname
重启系统使修改生效。
reboot
注意:修改主机名需要重启才能生效。
2.关闭防火墙
集群一般都是内网搭建的,如果内网内开启防火墙,内网集群通讯会容易出现很多问题。因此需要关闭集群中每个节点的防火墙。
执行以下命令进行关闭防火墙:
systemctl stop firewalld.service
然后执行以下命令,禁止防火墙开机启动:
systemctl disable firewalld.service
查看防火墙状态:
systemctl status firewalld
3.设置固定IP
为了避免后续启动操作系统后,IP地址改变了,导致本地SSH连接不上,节点间无法访问,需要将操作系统设置为固定IP,这里配centos01的IP地址为192.168.170.133
执行以下命令,修改文件ifcfg-ens33:
vi /etc/sysconfig/network-scripts/ifcfg-ens33
修改内容如下:
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
DEVICE=ens33
ONBOOT=yes#开机启用本配置
IPADDR=192.168.170.133#IP地址
NETMASK=255.255.255.0#子网掩码
GATEWAY=192.168.170.2 #默认网关,虚拟机安装的话,通常是2,也就是VMnet8的网关设置
DNS2=114.114.114.114 #DNS 配置,虚拟机安装的话,DNS就网关就行
修改完成后重启网络服务:
service network restart
查看改动后的IP:
ifconfig
这里使用的工具是SSH Secure Shell Client,jdk版本jdk1.8.0_144,hadoop版本为hadoop-2.8.2
1.在虚拟机创建文件存放目录
在/opt下创建目录softwares(存软件压缩包)、modules(存软件解压包)、data(存数据),分别用于存放软件安装包、软件安装数据和其它数据:
mkdir /opt/softwares
mkdir /opt/modules
mkdir /opt/data
修改目录权限为hadoop用户:
chown -R hadoop:hadoop /opt/*
查看目录权限是否修改成功:
ll /opt
2.设置本地网络,将本地VMNATE8的设置改为固定IP,与centos01在同一号段
3.ssh上传
打开ssh,点击【Quick Connect】,配置如图
输入密码连接成功后将本地jdk1.8.0_144和hadoop-2.8.2的安装包上传到centos01下的/opt/softwares目录下
传输完成后在centos01输入命令ll /opt/softwares验证是否传输成功
如图,上传成功。
1.首先删除原有的jdk
输入rpm -qa|grep java命令查看系统已有的jdk
挨个执行以下命令,将系统已有的java环境全部删除
rpm -e --nodeps \python-javapackages-3.4.1-11.el7.noarch
rpm -e --nodeps \java-1.8.0-openjdk-headless-1.8.0.161-2.b14.el7.x86_64
rpm -e --nodeps \tzdata-java-2018c-1.el7.noarch
rpm -e --nodeps \java-1.7.0-openjdk-1.7.0.171-2.6.13.2.el7.x86_64
rpm -e --nodeps \java-1.8.0-openjdk-1.8.0.161-2.b14.el7.x86_64
rpm -e --nodeps \javapackages-tools-3.4.1-11.el7.noarch
rpm -e --nodeps \ java-1.7.0-openjdk-headless-1.7.0.171-2.6.13.2.el7.x86_64
执行rpm -qa|grep java验证是否都已删除
2.解压jdk和hadoop
分别执行以下命令解压上传的jdk和hadoop-2.8.2到/opt/modules目录下
tar -zxvPf jdk-8u144-linux-x64.tar.gz -C /opt/modules/
tar -zxvPf hadoop-2.8.2.tar.gz -C /opt/modules/
3.配置jdk
修改文件/etc/profile,配置JDK环境变量:
vi /etc/profile
在文件末尾加入以下内容:
export JAVA_HOME=/opt/modules/jdk1.8.0_144
export PATH=$JAVA_HOME/bin:$PATH
刷新profile文件,使修改生效。
source /etc/profile
执行java -version命令,查看是否能成功输出JDK版本信息,信息如下:
至此,jdk环境变量配置成功
4.配置hadoop
4.1配置hadoop环境变量
Hadoop所有的配置文件都存在于安装目录/opt/modules/hadoop-2.8.2/etc/hadoop中,修改如下配置文件:
vi hadoop-env.sh
vi mapred-env.sh
vi yarn-env.sh
三个文件分别加入JAVA_HOME环境变量,如下:
export JAVA_HOME=/opt/modules/jdk1.8.0_144
4.2配置HDFS
(1)修改配置文件core-site.xml,加入以下内容:
fs.defaultFS
hdfs://centos01:9000
hadoop.tmp.dir
file:/opt/modules/hadoop-2.8.2/tmp
fs.defaultFS:HDFS的默认访问路径。
hadoop.tmp.dir:Hadoop临时文件的存放目录,可自定义。
(2)修改配置文件hdfs-site.xml,加入以下内容:
dfs.replication
2
dfs.permissions.enabled
false
dfs.namenode.name.dir
file:/opt/modules/hadoop-2.8.2/tmp/dfs/name
dfs.datanode.data.dir
file:/opt/modules/hadoop-2.8.2/tmp/dfs/data
dfs.replication:文件在HDFS系统中的副本数。
dfs.namenode.name.dir:HDFS名称节点数据在本地文件系统的存放位置。
dfs.datanode.data.dir:HDFS数据节点数据在本地文件系统的存放位置。
(3)修改slaves文件,配置DataNode节点。slaves文件原本无任何内容,需要将所有DataNode节点的主机名都添加进去,每个主机名占一整行。本次搭建过程,DataNode为三个节点:
centos01
centos02
centos03
4.3配置YARN
(1)重命名mapred-site.xml.template文件为mapred-site.xml,修改mapred-site.xml文件
mv mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
添加以下内容,指定以yarn集群方式运行。
mapreduce.framework.name
yarn
(2)修改yarn-site.xml文件,添加以下内容:
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.nodemanager.aux-services :NodeManager上运行的附属服务。需配置成mapreduce_shuffle才可运行MapReduce程序。
1.将centos01关机,右键【centos01】,选择菜单栏中的【管理】,点击【克隆】,克隆centos01的当前状态,点击【下一步】
2.点击【创建完整克隆】,下一步
3.自定义名称为centos02,自定义安装位置,点击【完成】
centos03的克隆同centos02
启动三台虚拟机,均以root身份登入。
将主机centos02的主机名改为centos02,将主机centos03的主机名改为centos03,重启生效。
使用ifconfig命令查看三台虚拟机的IP,并将centos02与centos03的IP分别改为固定IP。本次搭建三台主机IP分别为:
192.168.170.133
192.168.170.134
192.168.170.135
1.配置IP映射
在各个节点上分别执行以下命令,修改hosts文件:
vi /etc/hosts
在hosts文件中加入以下内容:
192.168.170.133 centos01
192.168.170.134 centos02
192.168.170.135 centos03
每个节点的hosts文件中都要加入同样的内容,这样可以保证每个节点都可以通过主机名访问到其它节点。
配置完后,使用ping命令检查是否配置成功:
ping centos01
ping centos02
ping centos03
最后,配置一下本地Windows系统的主机IP映射,方便本地通过主机名直接访问虚拟机。进入Windows操作系统的目录C:\Windows\System32\drivers\etc编辑hosts文件,加入以下内容:
192.168.170.133 centos01
192.168.170.134 centos02
192.168.170.135 centos03
2.配置各节点间免密登录
Hadoop的进程间通信使用SSH(Secure Shell)方式。SSH是一种通信加密协议,使用非对称加密方式,可以避免网络窃听。为了使Hadoop各节点之间能够无密码相互访问,需要配置各节点的SSH无秘钥登录。
【登录原理】
使用一种被称为"公私钥"认证的方式来进行ssh登录. "公私钥"认证方式简单的解释是首先在客户端上创建一对公私钥 (公钥文件:~/.ssh/id_rsa.pub; 私钥文件:/.ssh/id_rsa)然后把公钥放到服务器上(~/.ssh/authorized_keys), 自己保留好私钥当ssh登录时,ssh程序会发送私钥去和服务器上的公钥做匹配.如果匹配成功就可以登录了
ssh-copy-id命令可以把本地主机的公钥复制并追加到远程主机的authorized_keys文件中,ssh-copy-id命令也会给远程主机的用户主目录(home)和~/.ssh, 和~/.ssh/authorized_keys设置合适的权限。
若没有cd ~/.ssh/目录,请先执行一次ssh localhost
分别在三个节点中执行以下命令,生成秘钥文件:
ssh-keygen -t rsa
生成秘钥文件时,会有提示,都按回车就可以
分别在三个节点中执行以下命令,将公钥信息拷贝并追加到对方节点的授权文件authorized_keys中:
ssh-copy-id centos01
ssh-copy-id centos02
ssh-copy-id centos03
测试centos01无秘钥登录centos02和centos03
ssh centos02
ssh centos03
不用输入密码则配置免密登录成功
centos02和centos03的测试方法与centos01相同
启动Hadoop之前,需要先格式化NameNode。格式化NameNode可以初始化HDFS文件系统的一些目录和文件,在centos01节点上执行以下命令,进行格式化操作:
vim /etc/profile
追加内容:
export HADOOP_HOME=/opt/modules/hadoop-2.8.2
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
然后可以在任意目录下执行以下命令:
hadoop namenode -format
格式化成功后,在centos01节点上执行以下命令,启动Hadoop集群:
start-all.sh
也可以执行start-dfs.sh和start-yarn.sh分别启动HDFS和YARN集群。
在各个节点执行命令jps查看各节点启动进程,各节点结果显示如下,则hadoop集群启动成功。
1.测试HDFS
访问网址:http://192.168.170.133 :50070可以查看HDFS的NameNode信息,界面如下:
2.测试MapReduce
在centos01节点的HDFS根目录创建文件夹input,并将Hadoop安装目录下的文件README.txt上传到新建的input文件夹中。命令如下:
hdfs dfs -mkdir /input
hdfs dfs -put /opt/modules/hadoop-2.8.2/README.txt /input
运行Hadoop自带的MapReduce单词计数程序,统计/input文件夹中的所有文件的单词数量:
hadoop jar /opt/modules/hadoop-2.8.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.2.jar wordcount /input /output
统计完成后,执行以下
如果以上测试没有问题,则Hadoop集群搭建成功。