【Hadoop】伪分布式集群搭建(CentOS7)

  1. 在VMware中建立虚拟机
  2. 修改主机名、关闭防火墙、设置固定IP
  3. ssh上传jdk和hadoop安装包
  4. 配置jdk环境变量、配置hadoop
  5. 虚拟机克隆
  6. 配置ip映射和节点免密登录
  7. 启动hadoop
  8. hadoop集群功能测试:测试HDFS、测试MapReduce

1、在vmware中建立虚拟机

这里用的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】
在这里插入图片描述java

08.开启虚拟机,出现下图界面按【ENTER】进入node

在这里插入图片描述

09.选择语言为【简体中文】,点击【继续】
在这里插入图片描述
10.【安装源】为默认;【软件选择】为【GNOME桌面】,右侧的附加选项能够根据须要进行勾选,也能够不选择,此处不进行勾选;【安装位置】为默认自动选择;能够单击【网络和主机名】选项,查看虚拟机的IP地址,开启以太网卡,使虚拟机链接上网络,也能够不进行配置,在操做系统完成安装时手动配置,此处不进行配置。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
11.设置【root】密码,并建立一个名为hadoop的管理员用户
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
12.安装完成后【重启】
在这里插入图片描述
13.重启后进入初始化设置,点击【LICENSE INFORMATION】后勾选【我赞成许可协议】,点击左上角【完成】,点击【完成配置】
在这里插入图片描述
在这里插入图片描述
14.为避免此后操做出现用户权限不够而切换身份的麻烦,此处选择以root身份登入
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
15.进入图形界面,默认选择【汉语】,而后一直点击【前进】,【跳过】
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
至此,第一台虚拟机建立成功。python

2、修改主机名、关闭防火墙、设置固定IP

1.修改主机名linux

在分布式集群中,主机名用于区分不一样的节点,并方便节点之间相互访问,所以须要修改主机的主机名。web

查看主机名
hostname
执行如下命令,修改hostname文件内容,将主机名改成centos01:
vi /etc/hostname

重启系统使修改生效。
reboot
注意:修改主机名须要重启才能生效。vim

2.关闭防火墙centos

集群通常都是内网搭建的,若是内网内开启防火墙,内网集群通信会容易出现不少问题。所以须要关闭集群中每一个节点的防火墙。服务器

执行如下命令进行关闭防火墙:
systemctl stop firewalld.service
而后执行如下命令,禁止防火墙开机启动:
systemctl disable firewalld.service

查看防火墙状态:
systemctl status firewalld网络

3.设置固定IPless

为了不后续启动操做系统后,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

3、 ssh上传jdk和hadoop安装包

这里使用的工具是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验证是否传输成功

如图,上传成功。

4、配置jdk环境变量,配置hadoop

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,加入如下内容:

<configuration>
   <property>
	 <name>fs.defaultFS</name>
	 <value>hdfs://centos01:9000</value>
   </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/opt/modules/hadoop-2.8.2/tmp</value>
     </property>
</configuration>


fs.defaultFS:HDFS的默认访问路径。
hadoop.tmp.dir:Hadoop临时文件的存放目录,可自定义。

(2)修改配置文件hdfs-site.xml,加入如下内容:

<configuration>
   <property>
	  <name>dfs.replication</name>
	  <value>2</value>
	</property>
    <property><!--不检查用户权限-->
	  <name>dfs.permissions.enabled</name>
	  <value>false</value>
	</property>
	<property>
	  <name>dfs.namenode.name.dir</name>
	  <value>file:/opt/modules/hadoop-2.8.2/tmp/dfs/name</value>
	</property>
	<property>
	  <name>dfs.datanode.data.dir</name>
	  <value>file:/opt/modules/hadoop-2.8.2/tmp/dfs/data</value>
	</property>
</configuration>

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集群方式运行。

<configuration>  
    <property>  
       <name>mapreduce.framework.name</name>  
       <value>yarn</value> 
    </property> 
</configuration>

(2)修改yarn-site.xml文件,添加如下内容:

<configuration>  
    <property>  
       <name>yarn.nodemanager.aux-services</name>  
       <value>mapreduce_shuffle</value>  
    </property>     
</configuration>

yarn.nodemanager.aux-services :NodeManager上运行的附属服务。需配置成mapreduce_shuffle才可运行MapReduce程序。

5、虚拟机克隆

1.将centos01关机,右键【centos01】,选择菜单栏中的【管理】,点击【克隆】,克隆centos01的当前状态,点击【下一步】

2.点击【建立完整克隆】,下一步

3.自定义名称为centos02,自定义安装位置,点击【完成】

centos03的克隆同centos02

6、配置IP映射和节点间免密登陆

启动三台虚拟机,均以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相同

7、启动hadoop

启动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


刷新生效
source /etc/profile

而后能够在任意目录下执行如下命令:
hadoop namenode -format

格式化成功后,在centos01节点上执行如下命令,启动Hadoop集群:
start-all.sh

也能够执行start-dfs.shstart-yarn.sh分别启动HDFS和YARN集群。

在各个节点执行命令jps查看各节点启动进程,各节点结果显示以下,则hadoop集群启动成功。

centos01

centos02

centos03

8、hadoop集群功能测试:测试HDFS、测试MapReduce

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集群搭建成功。