qdice007@gmail.com 2017-12-21 13:05
写在前面的废话
我们至少需要三台虚拟机来组建大数据集群,所以,重复第1篇和第2篇的操作,再创建两个虚拟机,这三台不一样的地方就只是配置"网络和主机名"的地方,填入不同的主机名,比如我的主机名配置就是 bd-1, bd-2, bd-3
另外,可能我比较笨吧,建议不要只装好第一台虚拟机,就使用克隆来创建另外两台主机,还是一台一台装吧.
从现在开始,保持主机处于可以访问Internet的状态,因为我们需要实时联网安装一些软件.
开始
CentOS 7配置
1. 关闭selinux
查看selinux当前的配置
[libing@bd-1 ~]$ cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of three two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
需要把其中的 SELINUX=enforcing 改为 SELINUX=disabled
sudo vi /etc/selinux/config
改完后保存文件退出vi,可以马上重启机器使之生效,也可以和下面防火墙的配置改完后一起重启.
2. 关闭防火墙
查看防火墙的状态,CentOS 7的防火墙改用firewall了,而不再是iptables
[libing@bd-1 ~]$ systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since 四 2017-12-21 14:13:31 CST; 1h 34min ago
Docs: man:firewalld(1)
Main PID: 759 (firewalld)
CGroup: /system.slice/firewalld.service
└─759 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
12月 21 14:13:31 bd-1 systemd[1]: Starting firewalld - dynamic firewall daemon...
......一大坨别的信息,此处略去
关闭并禁用防火墙,使其不再开机自行启动
[libing@bd-1 ~]$ sudo systemctl stop firewalld
[sudo] libing 的密码:
[libing@bd-1 ~]$ sudo systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
再次查看防火墙运行状态
[libing@bd-1 ~]$ systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
12月 21 14:13:31 bd-1 systemd[1]: Starting firewalld - dynamic firewall daemon...
......还是一大坨,此处略去
可以看到,防火墙是inactive(dead)状态了.
重启虚拟机.
3. 查看ssh服务状态,在虚拟机里操作总是比较别扭的,尤其是还没有图形界面的时候,所以,我们需要在主机里,通过ssh客户端软件(例如SecureCRT,Xshell,putty等),连接虚拟机的ssh端口(22),登录进虚拟机操作系统的Linux命令行.开启虚拟机,使用普通用户登录进去,查看ssh服务状态.
sudo systemctl status sshd.service
解释一下这条命令:
- sudo表示你要使用超出你身份的系统权限,第一次使用,它会告诉你三件事,然后再要求你输入你这个用户的密码
- systemctl全面接管了原来service和chkconfig命令的工作,命令格式也有所不同,详细使用说明自己bing或google一下吧
输出的结果中,加亮显示的"active(running)"表示ssh服务正在运行,其他的信息我们不用理会.
4. 测试主机和虚拟机之间的网络连通性,打开主机的CMD命令行,ping一下虚拟机的网址,如下,证明网络是通的:
> ping 192.168.206.135
正在 Ping 192.168.206.135 具有 32 字节的数据:
来自 192.168.206.135 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.206.135 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.206.135 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.206.135 的回复: 字节=32 时间<1ms TTL=64
192.168.206.135 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 0ms,平均 = 0ms
5. 主机中使用Xshell来连接虚拟机,Xshell对个人和学生是免费的(官网原话是Xshell is free for home and school use),还是尽量不要用破解的SecureCRT吧.打开Xshell,点击菜单"文件"中的"新建...",分别在"连接"和"用户身份验证"中输入名称(自己随意起),主机(IP地址),用户名(安装CentOS时创建的普通用户)和密码,最后点击"确定按钮"保存
6. 接着会自动出现如下图的对话框,选中"bigdata-1",点击"连接"
7. 由于是第一次连接,所以需要点击"接受并保存"来自虚拟机的主机密钥,然后就可以顺利进入虚拟机的Linux命令行了
8. 使用YUM更新系统,并安装一些大数据要求的Linux组件,以及其他工具软件
Last login: Thu Dec 21 13:15:12 2017
[libing@bigdata-1 ~]$ hostname
bigdata-1
[libing@bigdata-1 ~]$ ifconfig
-bash: ifconfig: 未找到命令
[libing@bigdata-1 ~]$ java -version
-bash: java: 未找到命令
连ifconfig(用于查看网卡信息,主要是IP地址),JDK都没装,可见这Minimal版多干净.
我们来联网安装一些东西,首先使用YUM更新一下系统
[libing@bigdata-1 ~]$ sudo yum update
[sudo] libing 的密码:
已加载插件:fastestmirror
base
extras
updates
(1/4): base/7/x86_64/group_gz
(2/4): extras/7/x86_64/primary_db
(3/4): base/7/x86_64/primary_db
(4/4): updates/7/x86_64/primary_db
Determining fastest mirrors
* base: mirrors.shuosc.org
* extras: mirrors.tuna.tsinghua.edu.cn
* updates: mirrors.tuna.tsinghua.edu.cn
正在解决依赖关系
--> 正在检查事务
---> 软件包 NetworkManager.x86_64.1.1.8.0-9.el7 将被 升级
---> 软件包 NetworkManager.x86_64.1.1.8.0-11.el7_4 将被 更新
---> 软件包 NetworkManager-libnm.x86_64.1.1.8.0-9.el7 将被 升级
---> 软件包 NetworkManager-libnm.x86_64.1.1.8.0-11.el7_4 将被 更新
......
......中间好多内容,此处略去
......
事务概要
===============
安装 5 软件包
升级 53 软件包
总下载量:113 M
Is this ok [y/d/N]:
输入 y 并 回车 就可以更新了,由于没有WiFi,我就不更新了,见谅.
接着安装一些其他工具(有些可能系统已经装了,顺便检查一下也没关系,YUM会自动智能处理),安装过程中如有暂停,问你输入y或N,输入 y 并按 回车 就行了.
[libing@bigdata-1 ~]$ sudo yum install openssh rsync bzip2 net-tools wget
[sudo] libing 的密码:
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.shuosc.org
* extras: mirrors.tuna.tsinghua.edu.cn
* updates: mirrors.tuna.tsinghua.edu.cn
正在解决依赖关系
......
......中间又是一大坨,此处略去
......
已安装:
bzip2.x86_64 0:1.0.6-13.el7 net-tools.x86_64 0:2.0-0.22.20131004git.el7
rsync.x86_64 0:3.0.9-18.el7 wget.x86_64 0:1.14-15.el7_4.1
更新完毕:
openssh.x86_64 0:7.4p1-13.el7_4
作为依赖被升级:
openssh-clients.x86_64 0:7.4p1-13.el7_4 openssh-server.x86_64 0:7.4p1-13.el7_4
完毕!
注意!!! 从现在开始,使用的都是之前搭建好的三台虚拟机,所以主机名以及IP地址和文章前面使用的不一样了.
9. 配置三台虚拟机之间的ssh免密登录
首先,把三台虚拟机的主机名和IP地址收集好,在每台虚拟机上执行如下命令来查看
[libing@bd-1 ~]$ hostname
bd-1
[libing@bd-1 ~]$ ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.206.132 netmask 255.255.255.0 broadcast 192.168.206.255
......后面又是一大坨,此处略去
最终三台虚拟机的收集结果就是
- 192.168.206.132 bd-1
- 192.168.206.133 bd-2
- 192.168.206.134 bd-3
使用vi编辑器,将上面内容写入 /etc/hosts 文件的最后并保存
sudo vi /etc/hosts
这个文件的作用就是把主机名和IP地址对应起来,这样以后的一些操作或配置中,可以直接使用主机名,系统或其他软件可以根据这个文件中的对应关系,找到主机名对应的IP地址.
使用ping命令测试一下,例如,在bd-1虚拟机上ping其他两台虚拟机
[libing@bd-1 ~]$ ping -c 5 bd-2
PING bd-2 (192.168.206.133) 56(84) bytes of data.
64 bytes from bd-2 (192.168.206.133): icmp_seq=1 ttl=64 time=0.637 ms
64 bytes from bd-2 (192.168.206.133): icmp_seq=2 ttl=64 time=1.00 ms
64 bytes from bd-2 (192.168.206.133): icmp_seq=3 ttl=64 time=1.07 ms
64 bytes from bd-2 (192.168.206.133): icmp_seq=4 ttl=64 time=0.786 ms
64 bytes from bd-2 (192.168.206.133): icmp_seq=5 ttl=64 time=0.775 ms
--- bd-2 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4013ms
rtt min/avg/max/mdev = 0.637/0.854/1.075/0.164 ms
[libing@bd-1 ~]$ ping -c 5 bd-3
PING bd-3 (192.168.206.134) 56(84) bytes of data.
64 bytes from bd-3 (192.168.206.134): icmp_seq=1 ttl=64 time=1.06 ms
64 bytes from bd-3 (192.168.206.134): icmp_seq=2 ttl=64 time=0.862 ms
64 bytes from bd-3 (192.168.206.134): icmp_seq=3 ttl=64 time=0.781 ms
64 bytes from bd-3 (192.168.206.134): icmp_seq=4 ttl=64 time=0.756 ms
64 bytes from bd-3 (192.168.206.134): icmp_seq=5 ttl=64 time=0.815 ms
--- bd-3 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4011ms
rtt min/avg/max/mdev = 0.756/0.855/1.062/0.110 ms
下面在bd-1虚拟机上配置ssh到其他两台虚拟机不需要密码.首先需要在bd-1上生成公钥/私钥对
[libing@bd-1 ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/libing/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/libing/.ssh/id_rsa.
Your public key has been saved in /home/libing/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:MrrWf67vQ5Qf09QcYOsRmjWVIJyZ6ymntFOElGS1OoE libing@bd-1
The key's randomart image is:
+---[RSA 2048]----+
| .o+o+B+=o|
| oo =B =.o|
| E...=.= |
| .=o+ o |
| o S+o..+ |
| . o oo=. |
| .. ..* |
| ... +o |
| .. .o*=. |
+----[SHA256]-----+
连续按三次回车即可完成.会自动在当前用户的家目录下,建立 .ssh 目录,并在该目录下写入三个文件
[libing@bd-1 ~]$ ll ~/.ssh/
总用量 12
-rw-------. 1 libing libing 1675 12月 21 14:26 id_rsa
-rw-r--r--. 1 libing libing 393 12月 21 14:26 id_rsa.pub
-rw-r--r--. 1 libing libing 364 12月 20 12:37 known_hosts
其中 id_rsa 文件中保存了 私钥 ,而 id_rsa.pub 中保存了 公钥 .
在其他两台(bd-2和bd-3)中,使用libing用户,同样做一遍上述所有内容.
现在,以配置"bd-1虚拟机通过ssh访问bd-2不需要密码"为例,说明配置方法
将bd-1的公钥文件远程拷贝到bd-2的相同目录下
[libing@bd-1 ~]$ scp ~/.ssh/id_rsa.pub libing@bd-2:/home/libing/
The authenticity of host 'bd-2 (192.168.206.133)' can't be established.
ECDSA key fingerprint is SHA256:QNxHAL+gpIMhnXJA3dDzootU5/garFmxLRgsycheHrU.
ECDSA key fingerprint is MD5:a4:38:55:30:30:63:e9:fc:79:8e:5d:47:12:8d:85:a5.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'bd-2,192.168.206.133' (ECDSA) to the list of known hosts.
libing@bd-2's password:
id_rsa.pub 100% 393 243.6KB/s 00:00
第一次使用scp(远程拷贝)还是需要确认(输入yes),然后还需要输入bd-2上libing的用户密码,才能将文件拷贝过去,简单解释一下这条命令
- scp命令格式: scp 本地文件 远程主机的用户名@远程主机名:远程主机目录
- 符号 ~ 表示当前用户的家目录(比如在这里就是代指 /home/libing 目录)
- 要注意,是把bd-1的公钥文件拷贝到了bd-2的家目录下(而不是家目录下的.ssh目录)
下面切换到bd-2虚拟机的命令行中,将bd-1虚拟机的公钥文件内容拷入 .ssh 目录下的authorized_keys文件,并修改其权限属性(该文件必须是600权限)
[libing@bd-2 ~]$ cd ~
[libing@bd-2 ~]$ cat id_rsa.pub >> .ssh/authorized_keys
[libing@bd-2 ~]$ chmod 600 .ssh/authorized_keys
现在验证bd-1是否可以免密码ssh登录到bd-2虚拟机了,切换回bd-1虚拟机的命令行
[libing@bd-1 ~]$ ssh bd-2
Last login: Thu Dec 21 14:25:38 2017 from 192.168.206.1
[libing@bd-2 ~]$ hostname
bd-2
[libing@bd-2 ~]$ exit
登出
Connection to bd-2 closed.
总结一下,通过以下三个步骤完成了A机器到B机器的ssh免密码登录:
- 在A机器某用户下生成公钥/私钥对(通过 ssh-keygen -t rsa 命令)
- 远程拷贝A机器某用户的公钥文件id_rsa.pub到B机器的某用户家目录下(通过scp命令)
- 在B机器上,将A机器的公钥文件内容添加进 .ssh目录下的authorized_keys文件,并且修改authorized_keys文件的权限属性(600)
捋一下吧,要做到三台虚拟机之间,任意两台之间ssh登录免密,需要完成如下每一项
- bd-1 免密访问 bd-2
- bd-1 免密访问 bd-3
- bd-2 免密访问 bd-1
- bd-2 免密访问 bd-3
- bd-3 免密访问 bd-1
- bd-3 免密访问 bd-2
把ssh免密登录的配置方法走六遍就ok了.
重要补充
有时候,需要ssh免密访问自己,例如在bd-1虚拟机中,执行
[libing@bd-1 ~]$ ssh bd-1
这时可能还需要要求输入密码,那么就需要先执行
[libing@bd-1 ~]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
也就是把自己的公钥文件内容添加到authorized_keys文件中.
为了方便以后的操作,建议在每台虚拟机上都执行一下上面这行命令.
安装JDK
1. 在每台虚拟机的libing账户家目录下都创建 softwares 目录,用来存放所需要安装的软件包(例如JDK,hadoop什么的)
[libing@bd-1 ~]$ cd
[libing@bd-1 ~]$ mkdir softwares
2. 选择任一台虚拟机(例如bd-1)安装图形桌面环境,因为需要访问多个网站,并下载我们需要的软件包,当然,也可以在主机的浏览器中获取软件包的下载链接,然后在虚拟机的命令行使用wget来下载也可以.不过,受Windows的毒害这么多年,还是有个图形桌面操作的舒服一些,下面的命令用来安装GNOME桌面环境,当然你也可以装别的,例如XFCE什么的.
[libing@bd-1 ~]$ sudo yum groupinstall "GNOME Desktop"
......
......中间又是一大坨,此处略去
......
事务概要
=======================
安装 285 软件包 (+703 依赖软件包)
总下载量:654 M
安装大小:2.0 G
Is this ok [y/d/N]:
输入y并回车就可以安装了.
安装完之后还需要再安装个浏览器(Firefox),再配置成下次打开虚拟机直接登录图形桌面环境
[libing@bd-1 ~]$ sudo yum install firefox
......
......此处略去Firefox的安装过程
......
[libing@bd-1 ~]$ sudo systemctl set-default graphical.target
3. 下载JDK软件包,存入softwares目录,并远程拷贝到其他虚拟机
在具有图形桌面环境的虚拟机中,打开Firefox浏览器,访问Oracle网站,找到JDK的下载链接,版本就选1.8的吧,毕竟现在Hadoop 3.0都发布了,明确要求JDK是1.8,另外,下载的是 .tar.gz 结尾的压缩包,和 .rpm 结尾的相比,就是"绿色版"和"安装版"的区别.
[libing@bd-1 ~]$ ll softwares/
总用量 580100
-rw-rw-r--. 1 libing libing 189784266 12月 11 22:49 jdk-8u152-linux-x64.tar.gz
远程拷贝到bd-2和bd-3虚拟机
[libing@bd-1 ~]$ scp softwares/jdk-8u152-linux-x64.tar.gz libing@bd-2:/home/libing/softwares/
jdk-8u152-linux-x64.tar.gz 100% 181MB 42.5MB/s 00:04
[libing@bd-1 ~]$ scp softwares/jdk-8u152-linux-x64.tar.gz libing@bd-3:/home/libing/softwares/
jdk-8u152-linux-x64.tar.gz 100% 181MB 81.0MB/s 00:02
4. 安装与配置JDK
在bd-1虚拟机的命令行上解压下载的JDK软件包
[libing@bd-1 ~]$ cd
[libing@bd-1 ~]$ tar -xzf jdk-8u152-linux-x64.tar.gz -C /home/libing/
[libing@bd-1 ~]$ ll
总用量 4
drwxr-xr-x. 8 libing libing 255 9月 14 17:27 jdk1.8.0_152
drwxrwxr-x. 2 libing libing 148 12月 20 20:09 softwares
[libing@bd-1 ~]$ ll jdk1.8.0_152/
总用量 25936
drwxr-xr-x. 2 libing libing 4096 9月 14 17:25 bin
-r--r--r--. 1 libing libing 3244 9月 14 17:24 COPYRIGHT
drwxr-xr-x. 4 libing libing 122 9月 14 17:24 db
drwxr-xr-x. 3 libing libing 132 9月 14 17:24 include
-rw-r--r--. 1 libing libing 5202883 9月 14 14:34 javafx-src.zip
drwxr-xr-x. 5 libing libing 185 9月 14 17:25 jre
drwxr-xr-x. 5 libing libing 245 9月 14 17:25 lib
-r--r--r--. 1 libing libing 40 9月 14 17:24 LICENSE
drwxr-xr-x. 4 libing libing 47 9月 14 17:24 man
-r--r--r--. 1 libing libing 159 9月 14 17:24 README.html
-rw-r--r--. 1 libing libing 424 9月 14 17:24 release
-rw-r--r--. 1 libing libing 21117451 9月 14 17:24 src.zip
-rw-r--r--. 1 libing libing 63933 9月 14 14:34 THIRDPARTYLICENSEREADME-JAVAFX.txt
-r--r--r--. 1 libing libing 145180 9月 14 17:24 THIRDPARTYLICENSEREADME.txt
创建链接
[libing@bd-1 ~]$ sudo ln -s /home/libing/jdk1.8.0_152/ /usr/local/jdk
配置环境变量,修改 /etc/profile 文件
[libing@bd-1 ~]$ sudo vi /etc/profile
在文件的最后增加如下内容,然后保存退出
# Added for JDK
JAVA_HOME=/usr/local/jdk/
export JAVA_HOME
PATH=${JAVA_HOME}/bin:$PATH
export PATH
使之马上生效,并验证java是否已可用
[libing@bd-1 ~]$ source /etc/profile
[libing@bd-1 ~]$ java -version
java version "1.8.0_152"
Java(TM) SE Runtime Environment (build 1.8.0_152-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.152-b16, mixed mode)