风险评估
前置知识:云计算公理,Linux基本指令,ssh
实验时间:1d
实验难度(采用Codeforces的rating标准):
- 使用相同初始用户名:div2C / ≈1600
- 使用不同用户名:div2D / ≈2100
- 使用不同初始用户名,然后再新建同名用户:div2C / ≈1800
如果仅仅是为了完成实验,强烈推荐大家初始创建相同用户名完成任务。
参考资料
以下是这个实验涉及到的常见问题的参考资料以及解决方案链接清单:
虚拟机 sudo apt install net-tools 无法下载问题解决方法
Spark学习之standalone模式部署实战(配置ssh)
实验中要用到的spark集成环境和jdk可以通过这个网盘地址下载:
https://pan.baidu.com/s/1QF00LD–i5CEx6NQCo8D-w
提取码:tjgj
关于云计算公理
由于老师提供的spark实验教程比较简略,并且省略了很多前置步骤,并没有提到这个步骤的目的是什么。因此在做实验之前,有必要介绍一些关于云计算的最最核心的概念和步骤,为致敬《三体2:黑暗森林》中的黑暗森林理论,称之为云计算公理:
- 公理1:云计算需要两台或多台电脑/虚拟机/云服务器共同运行;
- 公理2:云计算需要记录两台或多台电脑的ip地址;
- 公理3:记录ip地址的关键字是HOST,如果要用字符串代替ip地址,就要修改host文件;
- 公理4:云计算需要两台或多台电脑使用ssh无密码互相连接;
- 公理5:如果两台或多台电脑使用ssh无密码互相连接,则两台电脑必须生成ssh密钥,并相互分发到对方的电脑上;
如果在实验过程中出现了"No Connection"或者"Permission Denied"的情况,绝大多数可以归结为以下几种情况:
- 只使用了一台电脑/虚拟机,违反了公理1;
- 没有记录ip地址或者ip地址记录错误,违反了公理2;
- 使用字符串代替ip地址时没有修改host文件,违反了公理3;
- 没有生成并使用ssh密钥,违反了公理4;
- ssh密钥没有分发到对方电脑上,违反了公理5;
一:创建虚拟机
了解上述关于云计算的五条公理之后,接下来就是安装master和slave两台虚拟机的过程:
为了方便记忆名字,同时尽量避免旁边有人使用的用户重名的问题,我们把master称作Nardack,slave称作Krenz(P.S.两位都是非常厉害的传说级画师)
这里推荐使用VMWare创建两台虚拟机,使用的虚拟机iso映像:ubuntu-20.04.4-desktop-amd64.iso
(百度这个文件名可以直接找到下载地址)
然后VMWare会自动帮你完成剩下的安装步骤,之后点进去虚拟机的桌面:
这里其实点Remind Me Later或者Install Now都可以,这里推荐选Remind Me Later。
特别提醒:
- 记得两台虚拟机设一个比较好记的密码。
- 为了方便后续命令的复制,建议将VMWare的剪贴板模式设定成"双向"。
- 文件编辑器推荐使用vim,vi编辑器有一些兼容性的问题。
- 如果仅仅是为了完成实验,强烈推荐大家初始创建相同用户名完成任务,这样可以跳过步骤六。
二:本地ip地址查询
以下是查询本地ip地址的方法和常见的坑:
方法1——ifconfig
采用网上的ifconfig方法,在这个步骤会出现以下的问题:
这是由于ifconfig是net-tools里面的包。
然后又按照系统提示的方法做,又会出现这个问题:
那么这个问题怎么解决呢?
参照这个教程的方法,可以通过运行以下的命令解决:
sudo rm /var/lib/dpkg/lock-frontend
sudo rm /var/lib/dpkg/lock
sudo rm /var/cache/apt/archives/lock
根本原因是apt这个时候仍然在运行,导致资源被锁不可用,而导致资源被锁的原因是上次执行安装或更新时没有正常完成。
这个时候就可以正常的运行sudo apt install net-tools
这个命令了。
运行上述命令后,再运行ifconfig
命令后的结果是这样的:
然后,我们注意到第二行的inet,这个192.168.79.130
就是master虚拟机,也就是用户名Nardack的虚拟机对应的IP地址。这个结果对不同的地区和机器可能不相同。
对于slave虚拟机(用户名Krenz)也是同理,运行后的结果如下图所示:
据此我们得出master(Nardack)的ip地址是192.168.79.130
,slave(Krenz)的ip地址是192.168.79.131
。
容易发现对于同一台机器相继创造的两台虚拟机,对应的ip地址最后一位也是连续的。
方法2——ip addr
在Ubuntu 20.04中,我们还可以使用ip addr
这个命令来查询本地的ip:
其中inet
后面的192.168.79.130
就是这台虚拟机的ip地址了。
为了之后的操作方便,记录master和slave两台虚拟机的用户名和IP地址是非常有必要的:
master:
- 用户名:Nardack
- IP:192.168.79.130
slave:
- 用户名:Krenz
- IP:192.168.79.131
温馨提示:在整个实验过程中,你可以通过观察上方的选项卡哪个被选中来判断当前使用的机器是master还是slave虚拟机。例如上图中"Nardack"的选项卡被选中,说明用的是master虚拟机。
三:配置ssh
接下来进入两台虚拟机无密码互通并且配置ssh环节:
测试两台机器是否能ping互通
我们先测试两台虚拟机能否用ping互通:
像这样master去ping一下slave,slave再去ping一下master,如果像上图一样相互ping到就成功了。
另外也要检查一下外网的连通性,比如能否正常上网,ping一下www.baidu.com是否有响应等等。
下载open-ssh并生成密钥
然后,两台虚拟机上都需要下载open-ssh:
sudo apt install openssh-server
安装之后生成密钥:
ssh-keygen -t rsa
然后系统会依次询问存储位置,passphrase(也就是密码),再输入一遍passphrase,这个过程直接按回车就可以(采用默认存储位置,无密码):
如果最后显示&#