文章目录
注意事项
- 需要注意每一步执行的顺序,例如如果在生成了ssh密钥后修改了主机名,则需要重新在生成密钥,还有许多类似的细节需要注意,不然会做出很多重复无用的工作。
- 注意权限问题,
大部分操作都需要加sudo,但是sudo也只是获取root的部分权限,😂😂一开始切换到root用户就行了,不需要每个命令加sudo,切换su root
如果出现其他权限问题的话,只能自行百度了。 - 虚拟机真的很容易崩(可能是因为我穷的原因。。。),如果出现问题一定要耐心耐心,搜一搜,等一等,多试试总是能解决的,毕竟我这个小集群也配了四五天,每天都有新问题呢。。。。头有点秃。。。
下面是完整步骤。。
1. 安装虚拟机
本篇博客用的是VMWare和CentOS7
开启虚拟机
开始安装。。。等很久
设置root密码
2. 复制虚拟机
在创建了一个虚拟机后,找到存放地址,直接将虚拟机复制粘贴即可复制虚拟机
打开文件夹中的.vmx文件即可打开复制后的虚拟机,会跳出一个选项,选择复制虚拟机即可
在VMware中可以对虚拟机重命名,直接右键可以看到选项
由于是直接复制的虚拟机,所以三个虚拟机的MAC地址是相同的,后面需要对其进行修改
3. 设置IP和MAC地址
首先需要查看不同虚拟机的mac地址,路径为:虚拟机->设置->网络适配器->高级
点击生成按钮就可以自动生成新的mac地址
3.1 更改mac地址
sudo vim /etc/udev/rules.d/70-persistent-ipoib.rules
将文件中的MAC地址更改为虚拟机对应的mac地址即可
3.2 更改ip地址
本篇博客使用的网络连接方式是桥接模式,桥接网络是wlan,因此ip应该与WLAN在一个网段,在cmd中输入ipconfig即可查询本地WLAN的ip及其他网络信息。
更改配置文件地址为
sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33
需要注意的是CentOS6中没有ifcfg-ens33 文件,对应的是ifcfg-eth0文件,因此如果找不到ifcfg-ens33 文件则需要修改ifcfg-eth0文件
重启网络
service network start
需要ifconfig和ping一下验证网络配置是否好了。
4. 关闭防火墙和SELinux
4.1 关闭防火墙
sudo service iptables stop
报错Failed to stop iptables.service: Unit iptables.service not loaded.
参考博客https://blog.csdn.net/zhou_438/article/details/86761398 找到的解决方法如下(大概还是CentOS版本问题,如果是7以上可以用上面的命令完成,7以后的需要用下面的命令完成):
systemctl stop firewalld
systemctl disable firewalld.service
CentOS7中关于防火墙的命令有下面这些:
# 查看防火墙状态
firewall-cmd --state
# 停止防火墙
systemctl stop firewalld.service
# 禁止防火墙开机启动
systemctl disable firewalld.service
4.2 关闭selinux
SELinux是Linux中的一种安全子系统,在文件权限外增加了对进程的限制,进程只能在进程允许的范围内操作资源。如果开启了SELinux, 需要做非常复杂的配置, 才能正常使用系统, 在学习阶段, 在非生产环境, 一般不使用SELinux 。
SELinux的工作模式:
- enforcing 强制模式
- permissive 宽容模式
- disabled 关闭
修改配置文件
# 修改selinux的配置文件
sudo vim /etc/selinux/config
将工作模型从强制模式改为关闭
5. 虚拟机免密登陆
Hadoop 节点众多, 所以一般在主节点启动从节点, 这个时候就需要程序自动在主节点登录到从节点中, 如果不能免密就每次都要输入密码, 非常麻烦
免密登陆利用SSH密钥:
- 先在B节点 配置 A节点 的公钥
- A节点请求B节点 要求登录
- B节点使用A节点的公钥, 加密一段随机文本
- B节点使用 A节点的公钥, 加密一段随机文本
- B节点 验证文本是否正确
首先需要修改主机名,配置文件路径如下,将主机名修改为自己需要的名称
sudo vim /etc/hostname
修改后可以通过hostnamectl
命令查看主机名是否被修改
5.1 生成公钥和私钥
ssh-keygen -t rsa
如果这条命令执行后生成了id_rsa id_rsa.pub
两个文件,需要加入授权
cd ~/.ssh
cat id_rsa.pub >> authorized_keys
需要更改.ssh和authorized_keys的权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
5.2 复制公钥到同一台机器
给每台虚拟机设置ip和域名映射
sudo vim /etc/host
192.168.88.120 hadoop1
192.168.88.130 hadoop2
192.168.88.140 hadoop3
本博客是以三台虚拟机为例搭建hadoop集群,将hadoop1作为Master,hadoop2和hadoop3分别为Slave1、Slave2
将hadoop1的公钥复制给hadoop2
ssh-copy-id -i zoe@hadoop2
报错ERROR: ssh: Could not resolve hostname hadoop2: Name or service not known
解决方法:将hadoop2和hadoop3的ip加到hadoop1的etc/hosts中
例如192.168.80.100 hadoop0
成功
再次确认ssh hadoop2
6. 安装SecureCRT并连接虚拟机
参考博客https://blog.csdn.net/qq_39052513/article/details/100272502
7. 安装jdk
通过SecureCRT连接三台虚拟机,SecureCRT可以打开交互窗口同时给三台虚拟机发送命令。View->Command Window->right click->send commands to all sessions
7.1 卸掉自带的java
# grep是查找含java的文件
rpm -qa | grep java
# 把上面搜索到的文件都删除,--nodeps是跳过依赖检查
sudo rpm -e java-1.6.0-openjdk-1.6.0.41-1.13.13.1.el6_8.x86_64 tzdata-java-2016j-1.el6.noarch java-1.7.0-openjdk-1.7.0.131-2.6.9.0.el6_8.x86_64 --nodeps
7.2 创建安装目录
sudo mkdir -p /export/softwares #软件包存放目录
sudo mkdir -p /export/servers #安装目录
7.3 上传jdk包并解压
使用rz -E
从本地上传文件,如果报错,则需要安装lrzsz配置工具。
sudo yum -y install lrzsz
将压缩包放到上面建好的安装目录下
# 将压缩包放到软件包存放目录下
sudo mv jdk-8u141-linux-x64.tar.gz /export/softwares/
#上传jdk到/export/softwares路径下去,并解压
sudo tar -zxvf jdk-8u141-linux-x64.tar.gz -C ../servers/
7.4 配置环境变量
vim /etc/profile
export JAVA_HOME=/export/servers/jdk1.8.0_141
export PATH=:$JAVA_HOME/bin:$PATH
修改后要让文件生效
source /etc/profile
# 查看Java是否安装
java -version
一个虚拟机安装好后可以直接复制到其他虚拟机中
scp -r jdk1.8.0_141/ hadoop2:/export/services/
8. 安装ZooKeeper
8.1 下载zookeeper压缩包
http://archive.apache.org/dist/zookeeper/
8.2 解压压缩包
使用rz -E
从本地上传文件
sudo rz -E
解压文件
sudo tar -zxvf zookeeper-3.4.9.tar.gz -C ../servers/
8.3 修改配置文件
第一台服务器修改配置文件
cd /export/servers/zookeeper-3.4.9/conf/
sudo cp zoo_sample.cfg zoo.cfg
sudo mkdir -p /export/servers/zookeeper-3.4.9/zkdatas/
sudo vim zoo.cfg
修改配置文件
注意服务器配置不能用主机名要用ip,否则后面可能报错
dataDir=/export/servers/zookeeper-3.4.9/zkdatas
# 保留多少个快照
autopurge.snapRetainCount=3
# 日志多少小时清理一次
autopurge.purgeInterval=1
# 集群中服务器地址
server.1=192.168.88.120:2888:3888
server.2=192.168.88.130:2888:3888
server.3=192.168.88.140:2888:3888
8.4 添加myid配置
将第一台机器上的安装包传给其他两台机器
scp -r /export/servers/zookeeper-3.4.9/ hadoop2:/export/servers/
scp -r /export/servers/zookeeper-3.4.9/ hadoop3:/export/servers/
在第一台服务器的/export/servers/zookeeper-3.4.9/zkdatas /这个路径下创建一个文件,文件名为myid ,文件内容为1
sudo sh -c 'echo 1 > /export/servers/zookeeper-3.4.9/zkdatas/myid'
第二台服务器myid改为2,第三台改为3
sudo sh -c 'echo 2 > /export/servers/zookeeper-3.4.9/zkdatas/myid'
sudo sh -c 'echo 3 > /export/servers/zookeeper-3.4.9/zkdatas/myid'
8.5 启动zookeeper服务
三台机器都启动服务
sudo /export/servers/zookeeper-3.4.9/bin/zkServer.sh start
如果报错看zookeeper.out文件,文件在/export/servers/zookeeper-3.4.9/zkdatas/下
刚开始报错nohup: 无法运行命令"java": 没有那个文件或目录
,这大概是因为之前把自带的jdk删掉了重新下载的,Java能运行也没有用,必须在/export/servers/zookeeper-3.4.9/bin/zkServer.sh
下增加JAVA_HOME=/export/servers/jdk1.8.0_141
,注意要加在最前面,我刚开始加后面也没有用。
然后又报错。。。。。。
在配置文件zoo.cfg中添加
quorumListenOnAllIPs=true
查看状态
/export/servers/zookeeper-3.4.9/bin/zkServer.sh status