前言
首先放上本次搭建所需的VMware虚拟机、Centos7镜像、jdk和Hadoop文件,如果链接失效,也可自行百度相关版本,无硬性需求。
以下是本次搭建环境:
VMware-15
CentOS-7-x86_64-DVD-1708.iso
hadoop-2.7.6.tar.gz
jdk-8u172-linux-x64.tar.gz
链接:https://pan.baidu.com/s/1Ig2vYOLKwBIEogrIjdSaXg,提取码:64ll。
文章目录
1.完全分布式集群的节点规划
(1)网络规划
主机名 | IP地址 | 节点类型 |
---|---|---|
master | 192.168.10.10 | 主节点 |
slave1 | 192.168.10.11 | 从节点1 |
slave2 | 192.168.10.12 | 从节点2 |
(2)服务规划
服务 | master | slave1 | slave2 |
---|---|---|---|
NameNode | ✓ | ||
SecondaryNameNode | ✓ | ||
ResourceManager | ✓ | ||
JobHistoryServer | ✓ | ||
DataNode | ✓ | ✓ | |
NodeManager | ✓ | ✓ |
(3)硬件规划
①建议配置
节点 | CPU | 内存 | 硬盘 |
---|---|---|---|
master | 双核四线程 | 4G | 40G |
slave1 | 一核双线程 | 2G | 40G |
slave2 | 一核双线程 | 2G | 40G |
②最低配置
节点 | CPU | 内存 | 硬盘 |
---|---|---|---|
master | 一核双线程 | 2G | 40G |
slave1 | 一核一线程 | 1G | 40G |
slave2 | 一核一线程 | 1G | 40G |
2.VMware虚拟机网络配置
1.虚拟机左上角编辑里的虚拟网络适配器里VMnet8的子网ip设置改成想要的IP,如:192.168.10.0。(前3位正常写,最后1位为0,最后一位设置成几无所谓,因为后面每个虚拟机还要分别固定IP)
2.验证NAT设置里面的网关IP是不是192.168.10.2。
3.桌面右下角VMware8属性里的IPV4,IP地址改成192.168.10.1,子网掩码255.255.255.0。
4.虚拟机网络适配器选择NAT模式。
3.固定三台虚拟机ip
首先进入你要配置成matser节点的虚拟机:
然后输入cd /etc/sysconfig/network-scripts然后输入ls
再输入vi-虚拟网卡名,如下(vi ifcfg-ens33)
进入到vi编辑界面后,做如下修改:
把BOOTPROTO那行改成BOOTPROTO=static,
ONBOOT那行改成ONBOOT=yes,在最下面加上
IPADDR=192.168.10.10(设置想要固定的ip)
NETMASK=255.255.255.0
GATEWAY=192.168.10.2(网络编辑器-NAT模式)
DNS1=114.114.114.114
如下图:
最后输入service network restart重启一下网络就好了(如果报错,reboot,重启虚拟机)
成功后,分别进入两台从节点虚拟机,依次将两台从节点虚拟机的ip分别固定为192.168.10.11(slave1),192.168.10.12(slave2)。
不要忘记两台从节点ip固定完成以后也要输入service network restart重启一下网络。
4.改主机名和配置hosts
三台虚拟机分别配置:
在master节点命令行输入:hostnamectl set-hostname master
在slave1节点命令行输入:hostnamectl set-hostname slave1
在slave2节点命令行输入:hostnamectl set-hostname slave2
查看主机名,命令行输入:hostname
主节点配置主机和IP映射:
在主节点输入vi /etc/hosts命令,在vi编辑窗口输入如下内容:
192.168.10.10 master
192.168.10.11 slave1
192.168.10.12 slave2
保存之后,通过如下命令将主节点的hosts分别拷贝到其他两个子节点
在master节点命令行分别完成以下操作:
命令行输入:scp /etc/hosts root@192.168.10.11:/etc
命令行输入:scp /etc/hosts root@192.168.10.12:/etc
三台虚拟机分别reboot重启。
5.关闭防火墙
在三个节点分别输入以下命令
1、停止firewall
命令行输入:systemctl stop firewalld.service
2、禁止firewall开机启动
命令行输入:systemctl disable firewalld.service
3、关闭selinux
命令行输入:sed -i ‘s#SELINUX=enforcing#SELINUX=disabled#g’ /etc/selinux/config命令,然后用grep ‘SELINUX=disabled’ /etc/selinux/config命令查看以下状态。
如下图所示,即关闭成功。
关闭selinux后,最好重启系统。
6.配置节点时间同步
此步骤在日常学习时可以省略,但是存在极少数几率,当各个节点时间不同步时,会造成无法完成集群搭建的情况。建议在时间充裕的情况下,完成此步骤,当然,这并不会耗费太多时间.
在三台节点分别完成以下操作:
1、安装ntp服务:
命令行输入:yum install ntp -y命令
2、与阿里云时间同步:
命令行输入:ntpdate -u ntp1.aliyun.com
命令行输入:sudo ntpdate -u ntp1.aliyun.com
3、查看时间:
命令行输入:date
当三台节点的时间一样时,即完成三台节点的时间同步。
7.配置ssh免密登录
(1)生成公钥密钥对
在三台节点上分别执行以下操作:
命令行输入:ssh-keygen -t rsa
一直按回车直到生成结束。
执行结束之后每个节点上的/root/.ssh/目录下生成了两个文件 id_rsa 和 id_rsa.pub,其中前者为私钥,后者为公钥。
(2)将子节点的公钥拷贝到主节点并添加进authorized_keys
主节点上执行:
命令行输入:cd .ssh
命令行输入:cp id_rsa.pub authorized_keys
分别在两个子节点上执行以下操作:
命令行输入:scp /root/.ssh/id_rsa.pub root@master:/root/.ssh/id_rsa_slave1.pub
命令行输入:scp /root/.ssh/id_rsa.pub root@master:/root/.ssh/id_rsa_slave2.pub
(3)在主节点上,将拷贝过来的两个公钥合并到authorized_keys文件中去
主节点上执行:
命令行输入:cat id_rsa_slave1.pub>> authorized_keys
命令行输入:cat id_rsa_slave2.pub>> authorized_keys
将主节点的authorized_keys文件分别替换子节点的authorized_keys文件
(4)在主节点上用scp命令将authorized_keys文件拷贝到子节点的相应位置
命令行输入:scp authorized_keys root@slave1:/root/.ssh/
命令行输入:scp authorized_keys root@slave2:/root/.ssh/
(5)最后测试是否配置成功
在master上分别执行
命令行输入:ssh slave1
命令行输入:ssh slave2
能正确跳转到两台子节点的操作界面即可,同样在每个子节点通过相同的方式登录主节点和其他子节点也能无密码正常登录就表示配置成功。
这里的配置方式可以有多种操作步骤,最终目的是每个节点上的/root/.ssh/authorized_keys文件中都包含所有的节点生成的公钥内容。
8、安装JDK(三台虚拟机都要安装)
先在opt目录下创建结构清晰的文件夹,以便于管理。
通过以下命令,在root用户下创建wdp、soft文件夹。
命令行输入:cd /opt
命令行输入:mkdir wdp
命令行输入:mkdir soft
(1)导入jdk压缩文件
用Xftp工具将jdk-8u172-linux-x64.tar.gz导入到opt目录下面的soft文件夹下面
验证是否导入成功:
命令行输入:ls /opt/soft
(2)解压jdk到/opt/wdp目录下
命令行输入:tar -zxvf jdk-8u172-linux-x64.tar.gz -C /opt/wdp/
(3)配置jdk环境变量
打开/etc/profile文件:vi /etc/profile
在profie文件末尾添加jdk路径:
export JAVA_HOME=/opt/wdp/jdk1.8.0_172
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:.
export PATH=${JAVA_HOME}/bin:$PATH
让修改后的文件生效:
命令行输入:source /etc/profile
验证jdk安装成功:
命令行输入:java -version
(4)将主节点的jdk分发到子节点
主节点上执行以下操作:
命令行输入:scp -r /opt/wdp/jdk1.8.0_172 root@slave1:/opt/wdp
命令行输入:scp -r /opt/wdp/jdk1.8.0_172 root@slave2:/opt/wdp/jdk1.8.0_172
命令行输入:scp -r /opt/wdp/jdk1.8.0_172/ root@slave2:/opt/wdp
拷贝profile到子节点,主节点上执行以下操作:
命令行输入:scp /etc/profile root@slave1:/etc/
命令行输入:scp /etc/profile root@slave2:/etc/
在两个子节点上分别使新的profile生效,在两台子节点上执行以下操作:
命令行输入:source /etc/profile
9、安装Hadoop(三台虚拟机都要安装)
(1)导入Hadoop压缩文件
用Xftp工具将hadoop-2.7.6.tar.gz导入到opt目录下面的soft文件夹下面
验证是否导入成功:
命令行输入:ls /opt/soft
(2)解压Hadoop到/opt/wdp目录下
进入到Hadoop安装包路径下:
命令行输入:cd /opt/soft/
解压安装文件到/opt/wdp下面:
命令行输入:tar -zxvf hadoop-2.7.6.tar.gz -C /opt/wdp/
查看是否解压成功:
命令行输入:ls /opt/wdp/
(3)配置Hadoop环境变量
打开/etc/profile文件:
命令行输入:vi /etc/profile
在profie文件末尾添加jdk路径:
export HADOOP_HOME=/opt/wdp/hadoop-2.7.6
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
保存后退出:wq
让修改后的文件生效:
命令行输入:source /etc/profile
验证hadoop安装成功:
命令行输入:hadoop
(4)配置Hadoop配置文件
需要配置的文件的位置为/opt/wdp/hadoop-2.7.6/etc/hadoop,需要修改的有以下几个文件:
hadoop-env.sh
yarn-env.sh
core-site.xml
hdfs-site.xml
mapred-site.xml
yarn-site.xml
slaves
其中hadoop-env.sh和yarn-env.sh里面都要添加jdk的环境变量
进入配置文件所在目录
命令行输入:cd /opt/wdp/hadoop-2.7.6/etc/hadoop
①配置hadoop-env.sh
命令行输入:vi hadoop-env.sh
添加jdk路径:export JAVA_HOME=/opt/wdp/jdk1.8.0_172
②配置yarn-env.sh
命令行输入:vi yarn-env.sh
添加jdk路径:export JAVA_HOME=/opt/wdp/jdk1.8.0_172
③配置core-site.xml
命令行输入:vi core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/temp</value>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
</configuration>
④配置hdfs-site.xml
命令行输入:vi hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/usr/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<property>
<name>dfs.web.ugi</name>
<value>supergroup</value>
</property>
</configuration>
⑤配置mapred-site.xml
将mapred-site.xml.template重命名为mapred-site .xml的文件
命令行输入:mv mapred-site.xml.template mapred-site.xml
命令行输入:vi mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<final>true</final>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>
⑥配置yarn-site.xml
命令行输入:vi yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>/home/hadoop/logs</value>
</property>
</configuration>
命令行输入:mkdir -p /home/hadoop/logs
命令行输入:mkdir -p /usr/hadoop/logs
⑦配置slaves
命令行输入:vi slaves
删除里面的原有内容,将配置了映射文件的子节点的主机名写入
slave1
slave2
(5)将主节点的Hadoop分发到子节点
主节点上执行:
命令行输入:scp -r /opt/wdp/hadoop-2.7.6 root@slave1:/opt/wdp
命令行输入:scp -r /opt/wdp/hadoop-2.7.6 root@slave2:/opt/wdp
拷贝profile到子节点,主节点上执行:
命令行输入:scp /etc/profile root@slave1:/etc/
命令行输入:scp /etc/profile root@slave2:/etc/
在两个子节点上分别使新的profile生效:
命令行输入:source /etc/profile
(6)格式化namenode
格式化主节点的namenode,主节点上进入hadoop目录:
命令行输入:cd /opt/wdp/hadoop-2.7.6
然后执行格式化命令:
命令行输入:bin/hdfs namenode -format
提示中出现:successfully formatted表示格式化成功。
(7)启动与关闭hadoop
主节点上在hadoop目录下执行以下操作:
命令行输入:cd /opt/wdp/hadoop-2.7.6
启动命令:
命令行输入:start-all.sh
命令行输入:mr-jobhistory-daemon.sh start historyserver
关闭命令:
命令行输入:stop-all.sh
命令行输入:mr-jobhistory-daemon.sh stop historyserver
在启动hadoop以后,在主节点上输入jps命令:
显示如下进程:
NameNode
SecondaryNameNode
Jps
ResourceManager
JobHistoryServer
每个子节点上的jps进程如下:
Jps
DataNode
NodeManager
这样则表示hadoop完全分布式集群搭建成功。
10、Web访问
在浏览器地址栏输入http://192.168.10.10:50070/访问,如下图所示。
如果这篇文章对你有所帮助,记得点赞+收藏哦!