这里用的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
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
这里使用的工具是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,加入如下内容:
<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程序。
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
刷新生效
source /etc/profile
而后能够在任意目录下执行如下命令:
hadoop namenode -format
格式化成功后,在centos01节点上执行如下命令,启动Hadoop集群:
start-all.sh
也能够执行start-dfs.sh和start-yarn.sh分别启动HDFS和YARN集群。
在各个节点执行命令jps查看各节点启动进程,各节点结果显示以下,则hadoop集群启动成功。
centos01
centos02
centos03
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集群搭建成功。