这篇文章主要介绍“怎么搭建虚拟机组成Hadoop集群”,在日常操作中,相信很多人在怎么搭建虚拟机组成Hadoop集群问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么搭建虚拟机组成Hadoop集群”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
创新互联长期为千余家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为海淀企业提供专业的成都网站制作、做网站,海淀网站改版等技术服务。拥有10年丰富建站经验和众多成功案例,为您定制开发。
完全分布模式是比本地模式与伪分布模式更加复杂的模式,真正利用多台Linux主机来进行部署Hadoop
,对集群进行规划,使得Hadoop
各个模块分别部署在不同的多台机器上,这篇文章介绍的是通过三台虚拟机进行集群配置的方式,主要步骤为:
准备虚拟机:准备虚拟机基本环境
ip
+Host
配置:手动设置虚拟机ip
以及主机名,需要确保三台虚拟机能互相ping
通
ssh
配置:生成密钥对后复制公钥到三台虚拟机中,使其能够实现无密码相互连接
Hadoop
配置:core-site.xml
+hdfs-site.xml
+workers
YARN
配置:yarn-site.xml
需要使用到三台虚拟机,其中一台为Master
节点,两台Worker
节点,首先安装虚拟机并配置环境,最后进行测试。
使用VirtualBox
进行虚拟机的安装,先去CentOS
官网下载最新版本的镜像:
这里有三种不同的镜像:
boot
:网络安装版
dvd1
:完整版
minimal
:最小化安装版
这里为了方便选择最小化安装版的,也就是不带GUI
的。
下载后,打开Virtual Box
并点击New
,选择专家模式
:
命名为CentOSMaster
,作为Master
节点,并且分配内存,这里是1G,如果觉得自己内存大的可以2G:
磁盘30G足够,其他可以保持默认:
创建好后从设置中的存储中,选择下载的镜像:
启动后会提示选择启动盘,确定即可:
好了之后会出现如下提示画面,选择第一个安装:
等待一会后进入安装界面:
接下来对安装位置以及时区进行配置,首先选择安装位置:
由于是虚拟的单个空磁盘,选择自动分区即可:
时区这里可以选择中国的上海:
接着选择网络,首先修改主机名为master
:
接着点击Configure
:
添加ip
地址以及DNS
服务器,ip
地址可以参考本机,比如笔者的机器本地ip
为192.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
的用户,后面的操作都直接基于该用户:
等待一段时间后安装完成重启即可。
在启动之前首先把原来的镜像去掉:
启动后是黑框界面:
登录刚才创建的hadoopuser
用户即可。
ssh
连接虚拟机默认的话是不能连接外网的,需要在菜单栏中的Devices
中选择Network
,设置为Bridged Adapter
(桥接模式):
使用ping
测试:
接着可以测试能否ping
通本地机器:
通了之后可以通过ssh
连接虚拟机,像平时操作服务器一样,在本地终端中连接虚拟机,首先添加指纹:
接着输入密码连接即可:
如果想偷懒可以使用密钥连接的方式,在本地机器中:
ssh-keygen -t ed25519 -a 100 ssh-copy-id -i ~/.ssh/id_ed25519.pub hadoopuser@192.168.1.8
基本环境搭建就是安装JDK
以及Hadoop
,使用scp
上传OpenJDK
以及Hadoop
。
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
测试:
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.gz sudo 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目录
因为需要一个Master
节点以及两个Worker
节点,将Master
节点关机,并选择配置好的CentOSMaster
,右键进行克隆:
并选择完全克隆:
克隆出CentOSWorker1
以及CentOSWorker2
。
ip
设置这里的两个Worker
节点以Worker1
以及Worker2
命名,首先操作Worker1
,修改主机名:
sudo vim /etc/hostname # 输入 # worker1
对于ip
,由于Master
节点的ip
为192.168.1.8
,因此这里修改两个Worker
的节点分别为:
192.168.1.9
192.168.1.10
sudo vim /etc/sysconfig/network-scripts/ifcfg-xxxx # 该文件因人而异 # 修改IPADDR IPADDR=192.168.1.9
修改完成后重启Worker1
,对Worker2
进行同样的修改主机名以及ip
操作。
Host
设置需要在Master
以及Worker
节点进行Host
设置:
Master
节点sudo vim /etc/hosts # 添加 192.168.1.9 worker1 # 与上面的ip对应一致 192.168.1.10 worker2
Worker1
节点sudo vim /etc/hosts # 添加 192.168.1.8 master 192.168.1.10 worker2
Worker2
节点sudo vim /etc/hosts # 添加 192.168.1.8 master 192.168.1.9 worker1
ping
测试在三台虚拟机中的其中一台ping
另外两台的ip
或者主机名,测试通过后就可以进行下一步了,这里使用Worker1
节点测试:
ssh
sshd
服务需要在三个节点(包括自身)之间配置ssh
无密码(密钥)连接,首先使用
systemctl status sshd
检查sshd
服务是否开启,没开启的使用
systemctl start sshd
开启。
三个节点都进行如下操作:
ssh-keygen -t ed25519 -a 100 ssh-copy-id master ssh-copy-id worker1 ssh-copy-id worker2
在其中一个节点中直接ssh
连接其他节点,无需密码即可登录,比如在Master
节点中:
ssh master # 都是hadoopuser用户,所以省略了用户 ssh worker1 ssh worker2
Master
节点Hadoop
配置在Master
节点中,修改以下三个配置文件:
HADOOP/etc/hadoop/core-site.xml
HADOOP/etc/hadoop/hdfs-site.xml
HADOOP/etc/hadoop/workers
core-site.xml
fs.defaultFS hdfs://master:9000 hadoop.tmp.dir /usr/local/hadoop/data/tmp
fs.defaultFS
:NameNode
地址
hadoop.tmp.dir
:Hadoop
临时目录
hdfs-site.xml
dfs.namenode.name.dir /usr/local/hadoop/data/namenode dfs.datanode.data.dir /usr/local/hadoop/data/datanode dfs.replication 2
dfs.namenode.name.dir
:保存FSImage
的目录,存放NameNode
的metadata
dfs.datanode.data.dir
:保存HDFS
数据的目录,存放DataNode
的多个数据块
dfs.replication
:HDFS
存储的临时备份数量,有两个Worker
节点,因此数值为2
workers
最后修改workers
,输入(与上面设置的主机名一致):
worker1 worker2
把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/
HDFS
格式化并启动在Master
节点中:
cd /usr/local/hadoop bin/hdfs namenode -format sbin/start-dfs.sh
运行后可以通过jps
命令查看:
在Worker
节点中:
浏览器输入:
master:9870 # 如果没有修改本机Host可以输入 # 192.168.1.8:9870
但是。。。
本以为做了这么多能看到成果了。
然后检查过了一遍本机+虚拟机Host
,还有Hadoop
的配置文件,都没有问题。
最后,
才定位到问题是
防火墙。
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 --permanent sudo 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.sh sudo firewall-cmd --add-port=9000/tcp --permanent sudo firewall-cmd --reload /usr/local/hadoop/sbin/start-dfs.sh
再次在浏览器访问:
master:9000 # 或 # 192.168.1.8:9000
这时候就可以看见Worker
节点了:
YARN
YARN
配置在两个Worker
节点中修改/usr/local/hadoop/etc/hadoop/yarn-site.xml
:
yarn.resourcemanager.hostname master
YARN
Master
节点中开启YARN
:
cd /usr/local/hadoop sbin/start-yarn.sh
同时开放8088
端口为下面的测试做准备:
sudo firewall-cmd --add-port=8088/tcp --permanent sudo firewall-cmd --reload
浏览器输入:
master:8088 # 或 # 192.168.1.8:8088
应该就可以访问如下页面了:
同样道理没有看到Worker
节点,查看Worker
节点的日志,发现也是端口的问题:
Master
节点先关闭YARN
,开放8031
端口,并重启YARN
:
/usr/local/hadoop/sbin/stop-yarn.sh sudo firewall-cmd --add-port=8031/tcp --permanent sudo firewall-cmd --reload /usr/local/hadoop/sbin/start-yarn.sh
再次访问:
master:8088 # 或 # 192.168.1.8:8088
就可以看到Worker
节点了:
至此,虚拟机组成Hadoop
集群正式搭建完成。
到此,关于“怎么搭建虚拟机组成Hadoop集群”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!