1 齐全分布模式

齐全分布模式是比本地模式与伪分布模式更加简单的模式,真正利用多台Linux主机来进行部署Hadoop,对集群进行布局,使得Hadoop各个模块别离部署在不同的多台机器上,这篇文章介绍的是通过三台虚拟机进行集群配置的形式,次要步骤为:

  • 筹备虚拟机:筹备虚拟机根本环境
  • ip+Host配置:手动设置虚拟机ip以及主机名,须要确保三台虚拟机能相互ping
  • ssh配置:生成密钥对后复制公钥到三台虚拟机中,使其可能实现无明码相互连接
  • Hadoop配置:core-site.xml+hdfs-site.xml+workers
  • YARN配置:yarn-site.xml

2 虚拟机装置

须要应用到三台虚拟机,其中一台为Master节点,两台Worker节点,首先装置虚拟机并配置环境,最初进行测试。

2.1 镜像下载

应用VirtualBox进行虚拟机的装置,先去CentOS官网下载最新版本的镜像:

这里有三种不同的镜像:

  • boot:网络安装版
  • dvd1:完整版
  • minimal:最小化安装版

这里为了不便抉择最小化安装版的,也就是不带GUI的。

2.2 装置

下载后,关上Virtual Box并点击New,抉择专家模式

命名为CentOSMaster,作为Master节点,并且分配内存,这里是1G,如果感觉本人内存大的能够2G:

磁盘30G足够,其余能够放弃默认:

创立好后从设置中的存储中,抉择下载的镜像:

启动后会提醒抉择启动盘,确定即可:

好了之后会呈现如下提醒画面,抉择第一个装置:

期待一会后进入装置界面:

接下来对装置地位以及时区进行配置,首先抉择装置地位:

因为是虚构的单个空磁盘,抉择主动分区即可:

时区这里能够抉择中国的上海:

接着选择网络,首先批改主机名为master

接着点击Configure

增加ip地址以及DNS服务器,ip地址能够参考本机,比方笔者的机器本地ip192.168.1.7,则:

  • 虚拟机的ip能够填192.168.1.8
  • 子网掩码个别为255.255.255.0
  • 默认网关为192.168.1.1
  • DNS服务器为114.114.114.114(当然也能够换其余的公共DNS比方阿里的223.5.5.5、百度的180.76.76.76等)

点击Save后利用主机名并开启:

没问题的话就能够装置了:

装置的时候设置root用户的明码以及创立用户:

用户这里采纳一个叫hadoopuser的用户,前面的操作都间接基于该用户:

期待一段时间后装置实现重启即可。

2.3 启动

在启动之前首先把原来的镜像去掉:

启动后是黑框界面:

登录方才创立的hadoopuser用户即可。

3 ssh连贯虚拟机

默认的话是不能连贯外网的,须要在菜单栏中的Devices中抉择Network,设置为Bridged Adapter(桥接模式):

应用ping测试:

接着能够测试是否ping通本地机器:

通了之后能够通过ssh连贯虚拟机,像平时操作服务器一样,在本地终端中连贯虚拟机,首先增加指纹:

接着输出明码连贯即可:

如果想偷懒能够应用密钥连贯的形式,在本地机器中:

ssh-keygen -t ed25519 -a 100ssh-copy-id -i ~/.ssh/id_ed25519.pub hadoopuser@192.168.1.8

4 根本环境搭建

根本环境搭建就是装置JDK以及Hadoop,应用scp上传OpenJDK以及Hadoop

4.1 JDK

首先去下载OpenJDK,而后在本地机器上应用scp上传:

scp openjdk-11+28_linux-x64_bin.tar.gz hadoopuser@192.168.1.8:/home/hadoopuser

接着在本地上切换到连贯虚拟机的ssh中,

cd ~tar -zxvf openjdk-11+28_linux-x64_bin.tar.gz sudo mv jdk-11 /usr/local/java

下一步是编辑/etc/profile,增加bin到环境变量中,在开端增加:

sudo vim /etc/profile# 没有vim请应用vi# 或装置:sudo yum install vim# 增加export PATH=$PATH:/usr/local/java/bin

而后:

. /etc/profile

测试:

4.2 Hadoop

Hadoop的压缩包scp上传到虚拟机后,解压并挪动到/usr/local

scp hadoop-3.3.0.tar.gz hadoopuser@192.168.1.8:/home/hadoopuser

虚拟机ssh终端:

cd ~tar -xvf hadoop-3.3.0.tar.gzsudo mv hadoop-3.3.0 /usr/local/hadoop

同时批改etc/hadoop/hadoop-env.sh配置文件,填入Java门路:

sudo vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh# 填入export JAVA_HOME=/usr/local/java # 批改为您的Java目录

5 克隆

因为须要一个Master节点以及两个Worker节点,将Master节点关机,并抉择配置好的CentOSMaster,右键进行克隆:

并抉择齐全克隆:

克隆出CentOSWorker1以及CentOSWorker2

6 主机名+ip设置

这里的两个Worker节点以Worker1以及Worker2命名,首先操作Worker1,批改主机名:

sudo vim /etc/hostname# 输出# worker1

对于ip,因为Master节点的ip192.168.1.8,因而这里批改两个Worker的节点别离为:

  • 192.168.1.9
  • 192.168.1.10
sudo vim /etc/sysconfig/network-scripts/ifcfg-xxxx # 该文件因人而异# 批改IPADDRIPADDR=192.168.1.9

批改实现后重启Worker1,对Worker2进行同样的批改主机名以及ip操作。

7 Host设置

须要在Master以及Worker节点进行Host设置:

7.1 Master节点

sudo vim /etc/hosts# 增加192.168.1.9 worker1 # 与下面的ip对应统一192.168.1.10 worker2

7.2 Worker1节点

sudo vim /etc/hosts# 增加192.168.1.8 master192.168.1.10 worker2

7.3 Worker2节点

sudo vim /etc/hosts# 增加192.168.1.8 master192.168.1.9 worker1

7.4 互ping测试

在三台虚拟机中的其中一台ping另外两台的ip或者主机名,测试通过后就能够进行下一步了,这里应用Worker1节点测试:

8 配置ssh

8.1 sshd服务

须要在三个节点(包含本身)之间配置ssh无明码(密钥)连贯,首先应用

systemctl status sshd

查看sshd服务是否开启,没开启的应用

systemctl start sshd

开启。

8.2 复制公钥

三个节点都进行如下操作:

ssh-keygen -t ed25519 -a 100ssh-copy-id masterssh-copy-id worker1ssh-copy-id worker2

8.3 测试

在其中一个节点中间接ssh连贯其余节点,无需明码即可登录,比方在Master节点中:

ssh master # 都是hadoopuser用户,所以省略了用户ssh worker1ssh worker2

9 Master节点Hadoop配置

Master节点中,批改以下三个配置文件:

  • HADOOP/etc/hadoop/core-site.xml
  • HADOOP/etc/hadoop/hdfs-site.xml
  • HADOOP/etc/hadoop/workers

9.1 core-site.xml

<configuration>    <property>        <name>fs.defaultFS</name>        <value>hdfs://master:9000</value>    </property>    <property>        <name>hadoop.tmp.dir</name>        <value>/usr/local/hadoop/data/tmp</value>    </property></configuration>
  • fs.defaultFSNameNode地址
  • hadoop.tmp.dirHadoop长期目录

9.2 hdfs-site.xml

<configuration>    <property>        <name>dfs.namenode.name.dir</name>        <value>/usr/local/hadoop/data/namenode</value>    </property>    <property>        <name>dfs.datanode.data.dir</name>        <value>/usr/local/hadoop/data/datanode</value>    </property>    <property>        <name>dfs.replication</name>        <value>2</value>    </property></configuration>
  • dfs.namenode.name.dir:保留FSImage的目录,寄存NameNodemetadata
  • dfs.datanode.data.dir:保留HDFS数据的目录,寄存DataNode的多个数据块
  • dfs.replicationHDFS存储的长期备份数量,有两个Worker节点,因而数值为2

9.3 workers

最初批改workers,输出(与下面设置的主机名统一):

worker1worker2

9.4 复制配置文件

Master节点的配置复制到Worker节点:

scp /usr/local/hadoop/etc/hadoop/* worker1:/usr/local/hadoop/etc/hadoop/scp /usr/local/hadoop/etc/hadoop/* worker2:/usr/local/hadoop/etc/hadoop/

10 HDFS格式化并启动

10.1 启动

Master节点中:

cd /usr/local/hadoopbin/hdfs namenode -formatsbin/start-dfs.sh

运行后能够通过jps命令查看:

Worker节点中:

10.2 测试

浏览器输出:

master:9870# 如果没有批改本机Host能够输出# 192.168.1.8:9870

然而。。。

本认为做了这么多能看到成绩了。

而后查看过了一遍本机+虚拟机Host,还有Hadoop的配置文件,都没有问题。

最初,

才定位到问题是

防火墙。

10.3 防火墙

CentOS8默认开启了防火墙,能够应用:

systemctl status firewalld

查看防火墙状态。

因为是通过9870端口拜访,首先查问9870是否凋谢,Master节点中输出:

sudo firewall-cmd --query-port=9870/tcp# 或sudo firewall-cmd --list-ports

如果输入为no

则示意没有凋谢,手动凋谢即可:

sudo firewall-cmd --add-port=9870/tcp --permanentsudo firewall-cmd --reload # 使其失效

再次在浏览器输出:

master:9870# 如果没有批改本地Host# 192.168.1.8:9870

能够看到一个敌对的页面了:

然而,有一个问题就是这里没有显示Worker节点,上图中的Live Nodes数目为0 ,而Datanodes这里什么也没有显示:

然而在Worker节点中确实能够看到有Datanode的过程了:

查看Worker节点的日志(/usr/local/hadoop/logs/hadoop-hadoopuser-datanode-worker1.log)能够看到应该是Master节点9000端口的没有开启的问题:

回到Master节点,先执行stop-dfs.sh敞开,并凋谢9000端口后执行start-dfs.sh开启:

/usr/local/hadoop/sbin/stop-dfs.shsudo firewall-cmd --add-port=9000/tcp --permanentsudo firewall-cmd --reload/usr/local/hadoop/sbin/start-dfs.sh

再次在浏览器拜访:

master:9000# 或# 192.168.1.8:9000

这时候就能够看见Worker节点了:

11 配置YARN

11.1 YARN配置

在两个Worker节点中批改/usr/local/hadoop/etc/hadoop/yarn-site.xml

<property>    <name>yarn.resourcemanager.hostname</name>    <value>master</value></property>

11.2 开启YARN

Master节点中开启YARN

cd /usr/local/hadoopsbin/start-yarn.sh

同时凋谢8088端口为上面的测试做筹备:

sudo firewall-cmd --add-port=8088/tcp --permanentsudo firewall-cmd --reload

11.3 测试

浏览器输出:

master:8088# 或# 192.168.1.8:8088

应该就能够拜访如下页面了:

同样情理没有看到Worker节点,查看Worker节点的日志,发现也是端口的问题:

Master节点先敞开YARN,凋谢8031端口,并重启YARN

/usr/local/hadoop/sbin/stop-yarn.shsudo firewall-cmd --add-port=8031/tcp --permanentsudo firewall-cmd --reload/usr/local/hadoop/sbin/start-yarn.sh

再次拜访:

master:8088# 或# 192.168.1.8:8088

就能够看到Worker节点了:

至此,虚拟机组成Hadoop集群正式搭建实现。

12 参考

  • CSDN-GitChat·大数据 | 史上最具体的Hadoop环境搭建
  • How To Set Up a Hadoop 3.2.1 Multi-Node Cluster on Ubuntu 18.04 (2 Nodes)
  • How to Install and Set Up a 3-Node Hadoop Cluster
  • CSDN-virtualBox实现主机和虚拟机互相ping通,配置动态IP地址