前言:
使用vmware搭建hadoop分布式集群,包括一个master,两个slave
环境:
1.windows10 家庭中文版
2.VMware Workstation 15 Pro
3.Ubuntu16.04 LTS(32位)
注:之所以使用32位的Ubuntu16.04 LTS,是因为前两天刚好做了操作系统实验,使用其他Linux系统也可以。最好选择需要系统资源少的操作系统,不然容易爆内存。其实我感觉如果熟练的话根本不需要图形界面。
配置:
master:2G内存,1核
slave1: 1.3G内存,1核
slave2: 1.0G内存,1核
注:这个当然是有多少分配多少,我的笔记本8G,这三个同时开的话内存占用就直接到了80%~90%。master最流畅,甚至比我直接安装在物理机上的ubuntu还快(vmware真的是强),后面两个主要用的是slave1,所以内存分配得多一点,slave2和slave1基本一样,所以没必要分太多(其实是没内存了o(╥﹏╥)o)。
实验过程:
1.安装VMware,要装Pro版本,不然没法克隆。
网上有很多教程,这里就不详述了。
2.master的初步配置(这是master的独角戏,后面就是三个同时操作了)
1.使用VMware创建一个虚拟机,把自己准备的Linux系统(Ubuntu或者Centos等等)安装到虚拟机上。
ubuntu2.安装必要的软件(我觉得网络配置可以等一下再弄)
①JAVA,因为hadoop需要JAVA环境才能运行。
从oracle官网下载tar.gz文件,然后解压到/opt文件夹下(其实也没有什么讲究,其他地方也可以,不过下面就要修改一下了)。
配置环境变量
输入命令sudo vim /etc/profile,在这个文件下添加两行:
配置环境变量注意:第一句中的路径是你解压JAVA压缩包之后放置JAVA文件的路径的路径,我前面说了,我解压到/opt
目录下了,如果解压到其他地方就换成相应的目录。还有jdk的版本号要和自己下载的jdk版本号对应。
java放置的位置安装成功的标志:
安装成功标志②SSH,这个在后面的免密通信中要用到。
安装ssh3.(难点)网络配置
这个地方就是前期一个比较难的地方,需要对网络有一点了解。
每台计算机想要在互联网上和其他计算机通信就需要一个IP地址(公网IP,全世界通用),比如邮递员需要知道你家的地址才能给你送信。
而因为一些原因(比如IP地址不足、安全隐患等等)一些计算机没有办法得到一个公网IP,但又需要和其他计算机通信,怎么办呢?
内网IP(通常是192.168.xxx.xxx)就出现了,这个IP只能在局域网中使用,可以和该局域网的计算机通信(最简单的就是自己家里连在同一路由上的设备同属一个局域网),本实验的三个“计算机”就是通过内网通信。当然内网IP是不被互联网承认的,所以依然无法访问互联网。想要访问互联网就必须要公网IP,IPv4的地址早就分完了,没有那么多地址怎么办,NAT(网络地址转换)和NATP就出现了。VMware虚拟机默认使用的模式就是NAT,虚拟机在访问互联网的时候将地址转换成物理机的公网IP,通过公网IP访问互联网。所以你会发现在物理机和虚拟机中同时百度IP,发现他们一模一样。
不过更加震惊的是你以为你的物理机就有公网IP了吗?并不一定,因为IPv4的IP地址早就枯竭了,根本不够用,所以运营商给你提供的可能也是通过NAT或者其他方式转换过的IP地址,所以你百度IP得到的地址和你直接在cmd中输入ipconfig得到的地址可能不一样,扯远了。
一般而言,VMware会用DHCP给虚拟机动态分配内网IP,就跟我们在家联网一样,网络一开一断IP可能就变了,这会导致我们配置得要经常更改,所以先下手为强,将内网IP改为静态,让它不再变化。
①点击VMware上面菜单栏的编辑,然后点击虚拟网络编辑器,会发现选项都是灰的不能改,点击更改设置(获取管理员权限),然后将VMnet8的使用本地DHCP服务将IP地址分配给虚拟机的√去掉
取消DHCP分配IP②确定子网IP(地址)、子网掩码、网关IP,这三个在之后的配置中需要。
我的子网IP(地址)默认是192.168.204.0,第三个数字可能不同,无所谓。
子网掩码一般都是255.255.255.0,大家都一样。
网关一般是IP地址的最后一个0改为2,比如我的是192.168.204.2。可以在NAT设置中查看。
③先打开虚拟机的网络这个地方,选择Edit Connections...
Edit Connections...④ 选择Edit
Edit⑤配置IPv4 Setting
IPv4 Setting注:这里DNS servers和网关一样,我也不知道是不是巧合。子网掩码(Netmask)填的255.255.255.0,它自动变为了24.
这个地址(Address)就可以自己随便配了,这就是这台“计算机”的静态IPv4地址了。
4.修改host文件
输入命令sudo vim /etc/hosts
主要是加上IP地址和主机名称的对应关系,例如192.168.204.10就是我们刚刚设置的虚拟机的静态IPv4地址,master是虚拟机的名字,就是在命令行中xxx@xxxx的@后面的xxxx,当然现在不一定是master,不过后面可以更改。看到这里可能有点糊,但是看完后面slave的配置应该就清楚了。写在这里主要是为了方便,hosts文件三个虚拟机都需要这样改,在克隆之前改就只用改一次。
修改hosts*3.关闭防火墙和selinux
很多博客中提到了这一点,但是我发现我的虚拟机(Ubuntu16.04 LTS)防火墙好像默认关闭了,selinux则根本没有安装,所以这一步直接跳过了。不过还是要先检查一下,免得到时候出问题。这一步最好在克隆之前做,避免多次重复工作。
4.虚拟机克隆
克隆克隆出slave1和slave2
5.slave网络配置
按照master的配置,设置slave1和slave2的IPv4 Setting的IPv4地址(Address),我设的192.168.204.11和192.168.204.12,最后一位可以改,前三位就和master一样。
6.修改hostname
命令行输入hostname可以看到自己的hostname(主机名),使用sudo hostnamectl set-hostname xxxx可以更改hostname。例如我的:
我改的是master两台slave也是同样,不过hostname要改为相应的名字,例如:我使用的slave1和slave2。
至此,我们在之前修改hosts文件时的困惑也应该明了了。三个IP地址分别对应三台“计算机”的静态IPv4地址,后面是它们的hostname(主机名)。这都不是固定不变的,网络设置的时候设置的什么IP、修改什么样的hostname在hosts文件中就改成什么样。
7.(难点)SSH实现免密登录
我对于这方面不是很了解,所以一开始走了一些弯路,大致的意思就是让三台“计算机”互相之间可以通过SSH免密登录。
互相:两两之间。
免密:不需要密码。
登录:这个对于长期使用windows而不熟悉Linux的人(例如我)可能有点难理解,这涉及到Linux的一些知识。我们看到命令行中每行的开头都是xxxx@xxxxx,例如我的yzt@master或者yzt@slave1,@后面的是主机名,也就是这台计算机的名称,@前面的是该计算机当前用户,我们每次输入密码进入系统的时候也就是一次登录的过程,登陆之后就可以访问相应的资源,不过这是在本地登录,使用SSH之后就可以做到远程登录,不过这个时候还是需要密码的,为了三台“计算机”能够畅通无阻的互相访问,我们要做到免密登录。
登录可以看成是钥匙开锁,我们提前将钥匙发给要远程登录的其他计算机就可以让其他计算机远程免密登录了。
所以,三台计算机要生成各自的“钥匙”,然后将“钥匙”给另外两台计算机。
①以master为例:先在命令行输入ssh-keygen -t rsa,然后一路敲回车键,然后输入ls ~/.ssh,就可以看到id_rsa(私钥)和id_rsa.pub(公钥)了。
生成公钥和私钥另外两台slave也是一样的操作。
②以master为例:将自己的公钥送到其他两台计算机sudo scp ~/.ssh/id_rsa.pub yzt@slave1:~/authorized_keys_m
sudo scp ~/.ssh/id_rsa.pub yzt@slave2:~/authorized_keys_m.
送“钥匙”注:前面的是固定的,后面的yzt@slave1要改为自己的用户名和主机名,至于~/authorized_keys_m,目录和名称都是自己随便定的,但是后面使用的时候也要用相应的目录和名称。不要出现同名的现象。
另外两台slave也是一样,分别传到另外两台机器。
③以master为例:将自己和另外两台机器的公钥写入授权文件
cat ~/.ssh/id_rsa.pub>>~/.ssh/authorized_keys(自己的公钥)
cat ~/authorized_keys_s1>>~/.ssh/authorized_keys(slave1送来的公钥)
cat ~/authorized_keys_s2>>~/.ssh/authorized_keys(slave2送来的公钥)
注:公钥存放的目录和名称都是上一步定下来的,所以这两步要对应。
另外两台slave也是一样
④以master为例:给授权文件权限,输入命令chmod 600 ~/.ssh/authorized_keys
另外两台slave也是一样
成功标志:两两之间可以免密登录,下图只是其中一种情况
从master到slave1如果还是需要密码,说明失败了,回头看看哪里出了问题。
8.hadoop安装及配置
铺垫了这么久,终于到了正题了。
①从网上下载二进制源码hadoop源码到master,然后将解压到~/主目录下(别的地方也可以,这个主要是方便),改不改名就自己决定。
②配置hadoop节点,配置文件都在hadoop的etc/hadoop中,包括core-site.xml,hdfs-site.xml,mapred-site.xml.yarn-site.xml,slaves
core-site.xml:上面的master是自己主节点的名称,下面的路径是自己的hadoop的路径,如果没有tmp就自己建一个
core-site.xmlhdfs-site.xml:反正按照自己的路径写
hdfs-site.xmlmapred-site.xml:这个要注意我的hadoop版本是2.9.2,没有mapred-site.xml,但是有一个mapred-site.xml.template,就用这个拷贝一份当做mapred-site.xml,然后修改
mapred-site.xmlyarn-site.xml:按照自己的路径写
yarn-site.xmlslaves:把自己的“计算机”放进去,比如我有slave1和slave2,master也可以,这个文件就是用来配置数据节点的,按照自己的配。
slaves③将master上配置好的hadoop送到slave中
*(可选)hadoop中有个比较大的文档(share/doc),其实slave并不需要,为了减轻负担,可以传送之前先把它从hadoop中弄出去
发送命令命令:sudo scp -r ~/hadoop-2.9.2 yzt@slave1:~/
sudo scp -r ~/hadoop-2.9.2 yzt@slave2:~/
④配置环境变量命令vim ~/.bashrc
注意还是要写自己的路径(三台机子都需要)
修改~/.bashrc好像还有几个和JAVA相关的脚本语言需要JAVA环境,我突然忘了
9.启动hadoop
①格式化namenode:输入命令hadoop namenode -format
②启动hadoop:输入命令start-dfs.sh
start-yarn.sh
③在浏览器输入http://master:50070/
得到结果:我把slave2关了所以只有两个Live Nodes,如果Live Nodes和预想的数量不同甚至为0,那么肯定是出错了
结果去master和slave中使用jps查看情况:master可能没我这么多,slave这三个不能少
master slave10.停止hadoop
停止hadoop11.hadoop的应用
(累死我了)。。。。。。
网友评论