软件包:
高可用集群VS非高可用集群
区别:高可用大数据集群有两个master节点,用于在主master节点故障时,快速切换到备用master节点。实现业务的高可用。
在搭建难度上:高可用集群搭建较为复杂,配置项较多。
二者架构图可参考下图:
hadoop全分布集群搭建:
一.节点配置说明
1台Master节点,3台Slave节点,每台节点配置环境,如下表所示:
主机名 | IP地址 | 需要安装软件 |
master | 192.168.31.100 | jdk、hadoop |
slave1 | 192.168.31.101 | jdk、hadoop |
slave2 | 192.168.31.102 | jdk、hadoop |
slave3 | 192.168.31.103 | jdk、hadoop |
二.单节点配置步骤
(1)安装前准备
1.给要访问的主机地址设置别名
[root@localhost ~]# vim /etc/hosts
192.168.31.100 master
192.168.31.101 slave1
192.168.31.102 slave2
192.168.31.103 slave3
2.在/root目录创建app目录,并将java和hadoop安装包上传
(2)安装JDK
1.解压jdk压缩包,解压完成后删除压缩包
[root@localhost ~]# cd app
[root@localhost app]# tar -zxvf jdk-8u202-linux-x64.tar.gz
[root@localhost app]# rm -rf jdk-8u202-linux-x64.tar.gz
2.配置java环境变量,进入java目录,ls查看java安装目录为:/root/app/jdk1.8.0_202
设置环境变量:
[root@localhost app]vim /etc/profile
添加以下三行:
export JAVA_HOME=/root/app/jdk1.8.0_202
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
使环境变量生效:
[root@localhost jdk1.8.0_202]# source /etc/profile
验证jdk是否配置成功:
[root@localhost jdk1.8.0_202]# java -version
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)
(三)安装hadoop
解压hadoop,解压完成后删除原始的安装包
[root@master app]# cd /root/app
[root@master app]# tar -zxvf hadoop-2.7.7.tar.gz
[root@master app]# rm -rf hadoop-2.7.7.tar.gz
进入hadoop,打印并hadoop所处的目录:/root/app/hadoop-2.7.7
[root@master app]# cd hadoop-2.7.7
[root@master hadoop-2.7.7]# pwd
/root/app/hadoop-2.7.7
配置hadoop环境变量:
[root@master hadoop-2.7.7]#vim /etc/profile
添加以下4行:
export JAVA_HOME=/root/app/jdk1.8.0_202
export HADOOP_HOME=/root/app/hadoop-2.7.7
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$HADOOP_HOME/lib:$CLASSPATH
使配置生效:
[root@master hadoop-2.7.7]# source /etc/profile
验证安装是否成功:
[root@master hadoop-2.7.7]# hadoop
Usage: hadoop [--config confdir] [COMMAND | CLASSNAME]
(4)让环境变量持续生效
注:必须设置,否则可能在执行某些脚本,如第6章脚本执行到一半,hadoop命令失效
当前设置的java版本和hadoop命令会在关闭终端和在其他目录打开终端时失效,可通过如下方式解决:
[root@master app]# vim /root/.bashrc
在最后添加以下代码:
#java path
export JAVA_HOME=/root/app/jdk1.8.0_202
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
#hadoop path
export JAVA_HOME=/root/app/jdk1.8.0_202
export HADOOP_HOME=/root/app/hadoop-2.7.7
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$HADOOP_HOME/lib:$CLASSPATH
设置完成后保存退出,再bash以下使之生效!
[root@master app]# bash
(5)配置hadoop的配置文件(位于安装目录的etc/hadoop目录下):
[root@master hadoop]# cd /root/app/hadoop-2.7.7/etc/hadoop
[root@master hadoop]# ls
在hadoop-env.sh中修改jdk的环境变量:
[root@master hadoop]# vim hadoop-env.sh
将:export JAVA_HOME=${JAVA_HOME}
改为:
export JAVA_HOME=/root/app/jdk1.8.0_202
配置从节点(将从节点的主机名添加到slaves文件中):
[root@master hadoop]# vim slaves
slave1
slave2
slave3
此处设置的主机名即是/etc/hosts设置的别名
配置hdfs的配置文件(core-site.xml,hdfs-site.xml)
core-site.xml:
[root@master hadoop]# vim core-site.xml
配置如下:
<configuration>
<!--指定HDFS存储入口-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<!--指定hadoop临时目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/root/app/hadoop-2.7.7/tmp</value>
</property>
</configuration>
设置hdfs-site.xml文件:
<configuration>
<!--设备数据备份数量-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>
配置mapreduce配置文件(mapred-site.xml,yarn-site.xml):
mapred-site.xml本身并不存在可以使用cp命令复制mapred-site.xml.template再更改:
[root@master hadoop]# cp mapred-site.xml.template mapred-site.xml
[root@master hadoop]# vim mapred-site.xml
<configuration>
<!--配置mapreduce框架用yarn启动-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
yarn-site.xml是ResourceManager进程相关配置文件:
<configuration>
<!--设置对外暴露的访问地址为master-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<!--NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce程序-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
配置完成后格式化namenode节点
[root@master hadoop]# hdfs namenode -format
格式化完成后像这样:
如果执行成功,在/root/app/hadoop-2.7.7目录下会生成一个tmp目录。可以使用tree (没有此命令可以使用yum -y install tree 来安装tree命令)来查看tmp目录下的文件结构,如果出现相应的快照文件和版本相应的信息,则格式化成功:
[root@master hadoop]# ls /root/app/hadoop-2.7.7
bin etc include lib libexec LICENSE.txt NOTICE.txt README.txt sbin share tmp
[root@master hadoop]# tree /root/app/hadoop-2.7.7/tmp
数据含义说明:
安装ssh(centos7.6 GNOME桌面版已经有ssh,可以不装)
[root@master hadoop]# yum list | grep ssh
安装openssh.x86_64 openssh-clients.x86_64 openssh-server.x86_64
[root@master hadoop]# yum -y install openssh.x86_64 openssh-clients.x86_64 openssh-server.x86_64
安装好ssl后就可以复制虚拟机(需完全关闭:使用poweroff命令)
三.多节点克隆
1.复制虚拟机
方式一:(直接复制虚拟机文件,我这里存储空间不够,未采用此方式)
根据master虚拟机所在的位置,将文件复制3分,并命名为slave1,slave2,slave3
复制三份并重命名:
然后选择【打开虚拟机】-启动虚拟机时选择-【我已复制该虚拟机】
方式二,克隆
右键-【master】-【管理】-【克隆】
【下一步】-【克隆自虚拟机中当前状态】-【克隆方法:创建链接克隆】,最好使用完整克隆,我这里存储空间不够了,所以采用此方式,空间足够的情况下请使用【创建完整克隆】
选择一个存储路径,我这里先在D:\Virtual Machines目录下创建了一个slave1目录
按照以上方式再克隆slave2,slave3
三个都克隆完成后像这样:
四.配置多节点
将4台虚拟机都开启,按照约定,设置3台从服务器的主机名和固定IP:
主机名 | IP地址 | 需要安装软件 |
master | 192.168.31.100 | jdk、hadoop |
slave1 | 192.168.31.101 | jdk、hadoop |
slave2 | 192.168.31.102 | jdk、hadoop |
slave3 | 192.168.31.103 | jdk、hadoop |
1.slave1修改主机名并设置固定ip:
[root@localhost ~]# vim /etc/hostname
主机名设置为:slave1
或者直接使用以下命令设置
[root@localhost ~]# hostnamectl set-hostname slave1
[root@localhost ~]# bash
修改网络配置文件,修改MAC地址和ip
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@localhost ~]# systemctl restart network
按照上面的教程设置slave2,slave3的主机名和固定IP
2.使用xshell连接上4个服务器
3.在master节点设置免密登录
[root@slave1 ~]# ssh-keygen -t rsa -P ''
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:IjmkX5UliD8jDt+bHgwRad20AUAlIxdpnj+Mpuxeb1Q root@slave1
The key's randomart image is:
+---[RSA 2048]----+
| ..OOo=+ . |
| o*+o .* |
| +oo + |
| .o+o+.E |
| .+=*o+S |
| .=**. |
| . oo.o+ |
| o. .+. |
| oo oo |
+----[SHA256]-----+
4.将密钥分发给每个节点(包括自己):
[root@master ~]# ssh-copy-id master
[root@master ~]# ssh-copy-id slave1
[root@master ~]# ssh-copy-id slave2
[root@master ~]# ssh-copy-id slave3
[root@master ~]# ssh master
[root@master ~]# ssh slave1
[root@slave1 ~]# exit
[root@master ~]# ssh slave2
[root@slave2 ~]# exit
[root@master ~]# ssh slave3
[root@slave3 ~]# exit
5.关闭4个节点的防火墙,不关闭会影响mapreduce的运行:
在撰写栏输入命令,同时在四个终端执行命令
如果没有出现输入框,点击xshell-【查看】-【撰写】-【撰写栏】开启
开启后要选择发送到全部选项卡:
关闭防火墙命令:
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
关闭selinux:
[root@localhost ~]# vim /etc/selinux/config
将参数设置为disabled 然后保存退出:
自此,所有配置完成
在master节点启动集群:
[root@master ~]# start-all.sh
验证是否启动成功,在撰写栏输入jps查看集群中所有进程:
如果成功,master节点会出现ResourceManager SecondaryNameNode NameNode进程
从节点会出现:NodeManager DataNode 进程
在浏览器验证,输入master的IP地址加端口号50070
yarn web页面地址为:http://192.168.31.100:8088
关闭集群命令:
[root@master hadoop]# stop-all.sh #关闭集群所有服务
本文作者为BUG之神,转载请注明。