### 1.1 实验目的 1. 熟悉大数据实验一体机并了解如何搭建集群; 2. 熟悉Linux基本命令; 3. 掌握vi编辑器的使用; 4. 了解SSH免密登录的原理以及为何需要配置SSH免密登录; 5. 掌握如何配置SSH免密登录; 6. 掌握Java基本命令; ### 1.2 实验要求 1. 使用大数据实验一体机搭建自己的集群; 2. 通过SSH工具登录集群服务器; 3. 实现每台服务器相互之间的免密登录; 4. 通过vi编辑器编写Java程序; 5. 通过Java命令编译和运行编写的Java程序; 6. 通过Jar命令打包编写的Java程序; ### 1.4 实验步骤 #### 1.4.1 搭建集群服务器 #### 1.4.2 使用SSH工具登录每台服务器 在搭建好的Hadoop集群中,已经有了所有五台服务器的内部ip地址、ssh端口号、ssh登录名以及ssh登录密码。 #### 1.4.3 添加域名映射 系统搭建好的集群服务器已经完成修改主机名、关闭防火墙、安装JDK、同步时钟四步操作,为了可以安装大数据组件,还需为所有机器添加域名映射 使用ssh工具登录到master服务器,使用vi命令编辑/etc/hosts文件: ~~~ [root@master ~]# vi /etc/hosts #root权限,编辑master的域名映射文件 #在文件的末尾追加写入如下五行(具体的IP地址请替换为实际集群服务器内部ip): 172.17.0.7 master 172.17.0.10 slave1 172.17.0.33 slave2 172.17.0.8 slave3 172.17.0.34 client ~~~ 保存退出后,master服务器的域名映射即添加完成,使用cat命令查看/etc/hosts文件。如图1-15所示: ![](https://box.kancloud.cn/01ae231860da83abcf17de9967727c9a_403x204.png) 依次登录slave1~3和client服务器,重复该操作。 #### 1.4.4 配置SSH免密登录 **1.4.4.1 生成master服务器密钥** 执行命令ssh-keygen,生成master服务器密钥。如图1-16所示: ~~~ [root@master ~]# ssh-keygen #root用户,master机,生成公私钥 ~~~ ![](https://box.kancloud.cn/3f7cc5fc56d1896b7ad8f4b25cef47ca_498x442.png) 如图1-14所示,在master上执行“ssh-keygen”命令生成公私钥。第一个提示是询问将公私钥文件存放在哪,直接回车,选择默认位置。 第二个提示是请求用户输入密钥,既然操作的目的就是实现SSH无密钥登录,故此处必须使用空密钥,所谓的空密钥指的是直接回车,不是空格,更不是其他字符。此处请读者务必直接回车,使用空密钥。第三个提示是要求用户确认刚才输入的密钥,既然刚才是空密钥(直接回车即空),那现在也应为空,直接回车即可。 最后,可通过命令“ls -all /root/.ssh”查看到,SSH密钥文件夹.ssh目录下的确生成了两个文件id\_rsa和id\_rsa\_pub,这两个文件都有用,其中公钥用于加密,私钥用于解密。中间的rsa表示算法为RSA算法。 **1.4.4.2 拷贝master服务器公钥至本机** 执行命令ssh-copy-id master,将master服务器公钥拷贝至master服务器本身。如图1-17所示: ![](https://box.kancloud.cn/9a436fbcfce831987aa8e2f24c3f5b8e_529x110.jpg) 第一次连接master时,需要输入yes来确认建立授权的主机名访问,并需要输入root用户密码来完成公钥文件传输。 **1.4.4.3 验证master服务器ssh免密登录master本身** 公钥拷贝完成后,可以在master服务器上直接执行命令ssh master,查看是否可以免密登录master服务器: ~~~ [root@master ~]# ssh master #root用户,登录本机网络地址 [root@master ~]# exit #退出本次登录 logout Connection to master closed. [root@master ~]# ~~~ **1.4.4.4 拷贝master服务器公钥至其余服务器** 执行命令ssh-copy-id slave1,将master服务器公钥拷贝至slave1服务器。如图1-18所示: ![](https://box.kancloud.cn/a317037207aeb282204656d15a6ebbf1_530x126.jpg) 第一次连接slave1时,需要输入yes来确认建立授权的主机名访问,并需要输入root用户密码来完成公钥文件传输。 依照同样的方式将公钥拷贝至slave2、slave3和client服务器。 **1.4.4.5 验证master服务器ssh免密登录其余服务器** 公钥拷贝完成后,可以在master服务器上直接执行命令ssh master,查看是否可以免密登录slave1~3和client服务器: ~~~ [root@master ~]# ssh localhost #root用户,登录本机环回地址 [root@master ~]# ssh master #root用户,登录本机网络地址 [root@master ~]# ssh slave1 #root用户,从master远程登录slave1 [root@master ~]# ssh slave2 #root用户,从master远程登录slave2 [root@master ~]# ssh slave3 #root用户,从master远程登录slave3 ~~~ **1.4.4.6 其余服务器配置ssh免密登录** 其余服务器按照同样的方式配置ssh免密登录,完成后验证是否可以互相之间实现SSH免密登录。 #### 1.4.5 在client服务器开发Java Helloworld程序 使用ssh工具登录client服务器,使用vi编辑器编写Helloworld.java: ~~~ public class Helloworld { public static void main(String args[]) { System.out.println("Hello World!"); } } ~~~ 使用javac命令编译该程序,生成Helloworld.class文件: ~~~ [root@client ~]# javac Helloworld.java [root@client ~]# ls anaconda-ks.cfg data envSource Helloworld.class Helloworld.java ~~~ 使用java命令执行该程序,输出Hello World! \[root@client ~\]# java Helloworld Hello World!