a.虚拟机VMware16.0
b.操作系统CentOS-7-x86
c. hadoop3.0
d. jdk1.8
一. 环境基础
1.安装虚拟机:https://mp.weixin.qq.com/s/mkt3HjLgXmqxBP4_tucReQ。
2.安装CentOS7可以去官网下载,因为一些限制这里上传不了
3.hadoop3.0和jdk1.8
链接:https://pan.baidu.com/s/15ZlxfymyR8vsJZ7ucvBOkg
提取码:u32b
复制这段内容后打开百度网盘手机App,操作更方便哦
二.搭建分布式集群开始
开始之前安装VMware,在VMware安装好一台CentOS,我们这里需要使用三台CentOS,安装好一台之后直接对这台克隆。
克隆完成之后,修改主机名,分别修改为master、slave1、slave2(名字可以按自己喜欢的起)。
修改主机名:hostnamectl set-hostname +主机名
hostnamectl set-hostname master
hostname #查看一下是否修改成功
ls
三台虚拟机的hostname和ip地址:
hostname | IP地址 |
---|---|
master | 192.168.190.10 |
slave1 | 192.168.190.11 |
slave2 | 192.168.190.12 |
IP地址的选择:点击屏幕最左下角的“开始”按钮,选择“运行”命令,在弹出的“运行”对话框中输入“CMD”命令:ipconfig/all。
1.网络配置
(1)VMware 网络配置;网络配置的目的是使虚拟机上的各个节点能够互联,并且使用用同一个网段。
VMnet8(NAT模式)——子网IP设置为:192.168.190.0——NAT设置:网关改为192.168.190.2—确定,注意勾上“本地使用DHCP服务…”。
(2)开始菜单->运行->services.msc——确定,如下图所示,找到以vmware开头的服务,确保都启动了,一般情况已经启动了,这里检查一下
检查是否启动:
(3)控制面板->系统和安全->网络和 Internet->网络和共享中心->更改适配器设置,启用VMnet8。
右键查看VMnet8属性,双击Intter协议版本4看IP地址与子网掩码是否配好,若没则进行相应配置。(注意IP地址与子网掩码是于上面虚拟机配置相对应的)
2.CentOS网络配置
(1)master节点上修改网卡配置
vi /etc/sysconfig/network-scripts/ifcfg-ens33 #ens33为自己本机上的网卡名
#进入后修改:
BOOTPROTO=static
ONBOOT=yes
注:vim需要在sudo -i下才有权限修改保存。
vim的保存操作,按ESC键跳到命令模式,然后输入“:”
:w - 保存文件,不退出vim。 :w file - 将修改另外保存到file中,不退出vim。 :w! - 强制保存,不退出vim 。
:wq - 保存文件,退出vim。 :wq! - 强制保存文件,退出vim。 :q - 不保存文件,退出vim。 :q!
不保存文件,强制退出vim。 :e! - 放弃所有修改,从上次保存文件开始再编辑。
修改后添加(如在slave1):
IPADDR=192.168.190.11 #IP地址
NETMASK=255.255.255.0 #子网掩码
GATEWAY=192.168.190.2 #网关地址
DNS1=8.8.8.8 #DNS服务器地址
master和slave2节点上修改网卡配置,基本和slave1上的配置一样,但slave2的IP地址改为192.168.190.12,master的IP地址改为192.168.190.10
(2)三台虚拟机都配置完网卡后,重启网卡。
在master节点和slave1、slave2节点上重启网卡。
systemctl restart network #重启网卡
关闭掉master和slave1、slave2上的防火墙
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
(3)修改域名,同样的三个节点上都配一遍
vi /etc/hosts
追加ip和主机名的映射关系:
192.168.190.10 master master.cn
192.168.190.11 slave1 slave1.cn
192.168.190.12 slave2 slave2.cn
#ip地址 hostname 域名 ,设置完之后可以用域名进行访问
修改完成之后,重启一下:
reboot
重启完之后,测试能不能ping通,实现节点间的互联
ifconfig #显示的网络信息是否和我们配置的契合
Master测试(同样在slave1、slave2测试):
#查看网络配置是否成功
ping baidu.com
ping 192.168.100.10
ping Slave1 #ip地址或者是主机名都可以
ping Slave2
到这里网络配置基本完成。以上如果ping不通:https://blog.youkuaiyun.com/weixin_44283054/article/details/114946744
二. yum 源配置
yum 是linux环境安装软件包的一种方式。很多时候安装一个软件安装一个软件需要安装1个或者多个其他软件, yum仓库用来存放所有的现有的.rpm包,当使用yum安装一个rpm包时, 需要依赖关系,会自动在仓库中查找依赖软件并安装。
(1)安装wget
yum install -y wget
(2)备份/etc/yum.repos.d/CentOS-Base.repo文件
cd /etc/yum.repos.d/
mv CentOS-Base.repo CentOS-Base.repo.back
(3)下载阿里云的Centos-7.repo文件
wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
(4)重新加载yum
yum clean all
yum makecache
三. jdk安装
开头已经上传了网盘连接可以下载jdk1.8。然后要上传到三台虚拟机上。我这里使用的是 Xftp文件传输工具(也可以使用其他方式传输,如rz).
master、slave1、slave2同样要进行以下jdk配置。
(1)jdk上传(顺便把hadoop也上传了)
(2)解压,我在home目录下新建了一个文件夹为java,把jdk解压缩放进去
tar -zxvf jdk-8u11-linux-x64.tar.gz #执行解压操作
cd jdk1.8.0_11 #进入jdk目录
vi /etc/profile #在jdk目录下配置一下java的环境变量
#添加如下内容:
export JAVA_HOME=*jdk路径*
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
(3)查看jdk是否安装成功
source /etc/profile #让配置生效
java -version #看java是否安装配置成功
chkconfig iptables off #不成功检查防火墙是否关闭,如果之前忘记关防火墙,可用此命令进行防火墙永久关闭
CentOS7系统默认开启了防火墙,在开启 Hadoop 集群之前,需要关闭集群中每个节点的防火墙。有防火墙会导致 ping 得通但 telnet 端口不通,从而导致 DataNode 启动了,但 Live datanodes 为 0的情况。我们前面的操作中已经关闭防火墙了,如果防火墙没关闭得先关闭防火墙,再开启集群。
到此,jdk安装成功
四. 免密登录设置(是集群配置成功的关键一步)
以slave1为例,我们执行如下命令生成密匙
ssh-keygen -t rsa #一直按回车,生成密钥(三台都执行生成)
ssh localhost #这时候连接到本机是不需要密码了
#在master、slave1、slave2中都执行下面这三条命令,把密钥复制到其他虚拟机上
ssh-copy-id -i master
ssh-copy-id -i slave1
ssh-copy-id -i slave2
测试是否可以免密登录:
ssh+主机名
这样我们三台机器之间就可免密登录了。
ssh+主机名就可以免密登录到其他虚拟机了,不成功检查虚拟机之间是否可以ping通。(可能上午还可以ping通,下午的时候可能ping不通了,导致ssh不成功,这里重启一下虚拟机,就可以重新ping通)
五. hadoop的安装
(在第三jdk的安装把的时候hadoop压缩包上传到三台虚拟机了)
(1)同样在home目录下新建了一个hadoop,cd hadoop进入到hadoop目录下进行解压缩操作。
tar -zxvf hadoop-3.0.0.tar.gz#解压缩
配置环境变量:
cd hadoop-3.0.0
vim /etc/profile #配置hadoop的环境变量
#添加以下内容
export HADOOP_HOME=*hadoop路径*
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
(2)测试hadoop是否成功
source /etc/profile #让其配置生效
hadoop version #查看是否成功
我这里第一次Hadoop version不成功,原因是jdk的环境变量配置错误,所以环境变量的路径一定要配置准确。
注意: 出现的所有目录是根据自己的配置而定的,不一定和我的一样。
(slave1、slave2的hadoop安装配置同上)
六. 集群配置
mkdir data #进入hadoop新建一个目录放data,然后ls一下查看是否建好
cd data
mkdir -p hadoop/tmp #在data下新建一个放hadoop数据,然后ls一下
cd etc
cd hadoop/ #进入到etc的hadoop的配置文件
注意路径
(1)修改一下JAVA_HOME的安装目录
vim hadoop-env.sh #添加安装目录
#添加内容
export JAVA_HOME=/home/hmm/java/jdk1.8.0_11
export HADOOP_LOG_DIR=/home/hmm/hadoop/hadoop
vim mapred-env.sh #同样进入,添加以上安装目录内容
hadoop的配置文件在hadoop目录下的etc/hadoop中,这里只修改其中一台服务器的,其他的也一样,只要拷贝过去就行。
(2)配置 core-site.xml
vim core-site.xml #配置 core-site.xml
#在<configuration>和</configuration>中间添加以下内容:
</property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.190.10:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hmm/hadoop/hadoop/data/hadoop/tmp</value>
</property>
其中/home/hmm/hadoop/hadoop/data/hadoop/tmp是之前是建的放hadoop数据的地方
hdfs://192.168.190.10:9000 前面为主机master的IP地址,后面为端口号,可以默认为9000
(3)配置yarn-sit.xml
vim yarn-site.xml #配置yarn-sit.xml
#在<configuration>和</configuration>中间添加以下内容:
</property>
<name>yarn.resourcemanager.hostname</name>
<value>192.168.190.10</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
其中192.168.190.10是为主机Master的IP地址
(4)配置hdfs-site.xml
vim hdfs-site.xml #配置hdfs-site.xml
#在<configuration>和</configuration>中间添加以下内容:
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.secondary.http.address</name>
<value>192.168.190.10:50090</value>
</property>
其中192.168.190.10是为master的IP地址,3为机器的节点数
(5)配置mapred-site.xml
vim mapred-site.xml #配置mapred-site.xml
#在<configuration>和</configuration>中间添加以下内容:
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
(6)修改workers文件
增加所有从节点的主机名,我这里使用master做主节点,那么slave1、slave2就是从节点了。
vim workers #在etc下的hadoop目录进行
首先删除文件中的默认localhost,然后添加从节点的主机名:
注意,slave1、slave2也是删除默认localhost添加slave1、2.
(7)修改启动脚本
修改start-dfs.sh,stop-dfs.sh这两个脚本文件在文件中前面都增加如下内容,这两个文件在hadoop目录下的sbin/目录下,在文件开头添加内容如下:
vim start-dfs.sh
vim stop-dfs.sh
#都进入以下内容
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
修改start-yarn.sh,stop-yarn.sh这两个文件在文件前面增加如下内容,这两个文件在hadoop目录下的sbin/目录下,在文件开头添加内容如下:
vim start-yarn.sh
vim stop-yarn.sh
#进入以下内容
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
到此一台服务器就配置完成了,其他两台也配置也和上面一模一样,只需要拷贝过去就行了。
可以把master上的hadoop配置文件进行打包压缩复制到slaves节点上,或者直接在slaves节点上各配置一遍,其中配置内容跟master的配置一模一样*(包括IP地址和端口号,三台虚拟机的IP地址全部是master的192.168.190.10)。*
七. 开启集群
- 在master中切换到hadoop目录下,执行如下命令(只需在master执行格式化操作,并且只需要执行一遍即可):
bin/hdfs namenode -format ##启动前先格式化文件系统,之后无须格式化
看到这个,就说明格式化成功了,没成功检查第六步的配置是否准确。
2. 开启集群
start-dfs.sh #启动dfs
start-yarn.sh #启动yarn
mr-jobhistory-daemon.sh start historyserver #启动脚本
接下来用jps这个命令来查看三个节点中已启动的进程来验证集群是否成功:
jps #可以查看各个节点所启动的进程
正确的话,在 Master 节点上可以看到 NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer 进程;
在Slave1、2节点上也可以通过jps
看到DataNode 和 NodeManager进程。
以上集群已搭建成功
最后 关闭集群也是在Master上关闭,按顺序执行命令
stop-yarn.sh
stop-dfs.sh
mr-jobhistory-daemon.sh stop historyserver
除了用jps
来验证,还可以在浏览器中访问cluster界面