虚拟机配置hadoop攻略(上)
笔者查阅大量资料,非常草狗,内心非常崩溃的终于搞好了。。。为了防止以后忘了。。特意写此博客,做总结
首先声明硬件环境
1. 多台电脑,每台电脑上一个虚拟机,挂载一个ubuntu linux系统。。
2. 每台电脑的windows系统有一个静态ip,每个虚拟机也有一个自己的静态ip
3. 电脑之间连接采用hub连接。 (如果你和笔者一样没有hub,可以使用路由器,把所有的网线都插到LAN口,关闭路由器的dhcp功能,避免自动分配ip就可以啦)
基本框架
我的节点配置 (完全分布式集群)
Master (job tracker/namenode) |
192.168.0.32 |
h1 |
Slave (task tracker/datanode) |
192.168.221.131 |
h2 |
- 所有虚拟机的用户名: hadoop_admin
---------------华丽的分割线----------------
安装VMware以及ubuntu
这种东西请自己百度安装,如果这个东西也搞不定,其他的请不要往下看了,真的不适合你。
⚠ 需要注意的是:如果你电脑本身的系统是64位的,cpu也支持64位,但是安装64位ubuntu的时候,提示cpu报错! 说明你需要在bios里设置一下cpu的虚拟机兼容模式,具体修改项请百度。
下载备用软件
1. 先去下载一个jdk,笔者在这里使用的是jdk1.7.0_79。 (链接: http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html)
2.下载hadoop, 笔者这里使用的是 hadoop-2.6.4. (链接:略。 这里需要注意的是,应该下载后缀为tar.gz 的文件,切莫下载src.tar.gz的,因为那个需要重新编译的版本)
3. 更新ssh以及apt-get
为什么要干这个?因为你的电脑如果一旦开始改了静态ip,可能就不能上网了。。。
首先保证你的电脑能够上网。虚拟机默认是VAT模式,如果你的电脑本身能够上网,那么虚拟机也可以。
之后,虚拟机中,打开terminal,输入命令
sudo apt-get update
(如果询问你密码,直接输入电脑进入的密码即可。)
更新完毕后,继续输入指令
sudo apt-get upgrade
完毕后,继续。。我们更新ssh
sudo apt-get install openssh-server
之后运行
sudo apt-get install ssh
至此,我们已经更新了ssh,可以正式开始安装了!!!!(虐心的还在后面)
配置静态ip
配置静态IP,我们需要将虚拟机的虚拟网卡设置成“桥接模式”。
(这里补充一下,虚拟机网卡设置模式一共是三种,默认是NAT模式,该模式下虚拟机对外和主机使用同样的IP。 桥接模式是将虚拟机像一台独立的计算机一样接入网络。 而“仅主机模式” 是仅仅使得虚拟机可以和宿主机相互ping通)
(注意,在下面的配置中,所有的IP,必须在同一网段,包括虚拟机和宿主机)
首先我们要确保,在打开虚拟机之前,我们所有的宿主机之间能够ping通,也就是宿主机所在的网络是没有问题的。
如果你不知道怎么检查,请自行百度。
接着,我们在Vmware顶部的菜单栏中,点击虚拟机 ===> 设置 ===> 网络适配器,之后在右边选择“桥接模式”,同时选中“复制物理网络连接状态”
接下来,我们开始配置虚拟机的静态IP。
进入虚拟机后,打开terminal,运行如下命令
sudo vi /etc/network/interfaces
之后在该文件中添加如下代码
auto lo #localhost iface lo inet loopback #这一段配置的是localhost/127.0.0.1,可保留 #加上eth0, 网卡0的配置 auto eth0 iface eth0 inet static #静态ip address 192.168.0.32 netmask 255.255.255.0 gateway 192.168.0.1 dns-nameserver 192.168.0.1 8.8.8.8
重启网络
sudo /etc/init.d/networking restart #重启后,才能establish eth0 whereis ifup #... sudo /sbin/ifup eth0 #手动修改eth0后必须启用eth0才有效,此文有讲 sudo /sbin/ifdown eth0 sudo /etc/init.d/networking restart #再重启 ifconfig #查看IP,显示eth0信息
接下来,配置DNS
sudo vi /etc/resolv.conf
在其中加入如下 google的公共DNS,
nameserver 192.168.0.1 nameserver 8.8.8.8
在下来,配置HOST
sudo vi /etc/hosts
加上
192.168.0.32 h1 192.168.221.131 h2
(这里,h1是我master的名称和地址,h2是我唯一一个slave的名称和地址,你可以自己取名和填写地址,但是请保证全局一致)
再下来配置host name
whereis hostname
sudo vi /etc/hostname
在文件中,写上h1
(注意,如果是h2 h3……等等机器,这里就写h2, h3)
运行 sudo hostname h1,使hostname文件更改生效。
截止这里,我们已经配置完h1,请在其他的机器上相同配置。
之后检查是否成功,如果成功,所有虚拟机之间应该能够ping通,如果不能,请检查
为hadoop创建特定操作用户
1. 创建用户
sudo adduser hadoop_admin –home /home/hadoop_admin –u 545
2. 将用户加入到可以执行sudo的用户列表
sudo vi /etc/sudoers
将如下信息加入到文件中(白字部分),这样切换到hadoop_admin账户时也有权限使用sudo指令了
生成RSA KEY,完成SSH无密码互通
SSH无密码原理
Master(NameNode |JobTracker)作为客户端,要实现无密码公钥认证,连接到服务器Salve(DataNode |Tasktracker)上时,需要在Master上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到所有的Slave上。
当Master通过SSH连接Salve时,Salve就会生成一个随机数并用Master的公钥对随机数进行加密,并发送给Master。Master收到加密数之后再用私钥解密,并将解密数回传给Slave,Slave确认解密数无误之后就允许Master进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。
重要过程是将客户端Master复制到Slave上。
下面我们开始
1. 输入 su hadoop_admin 命令,切换到hadoop_admin账户。这时候,屏幕应该显示 hadoop_admin@h1:
2. Master机器(h1)上生成密码对
ssh-keygen –t rsa –P
这条命令是生成其无密码密钥对,询问其保存路径时直接回车采用默认路径。生成的密钥对:id_rsa和id_rsa.pub,默认存储在"/home/hadoop/.ssh"目录下。
看到如下图案,说明生成成功。
+--[ RSA 2048]----+
|. E.=.o |
|.o = @ o . |
|. * * = |
| o o o = |
| . = S |
| . |
| |
| |
| |
+-----------------+
我们这时候可以查看"/home/hadoop_admin/"下是否有".ssh"文件夹,且".ssh"文件下是否有两个刚生产的无密码密钥对。
3. 生成授权文件
hadoop_admin@h1:~/.ssh$ cat id_rsa.pub >> authorized_keys
cat命令是将公钥文件id_rsa.pub加入到授权文件authorized_keys中。
同时我们还有一件事儿,我们还需要给新生成的授权文件以及.ssh文件夹提高权限(权限的设置非常重要,因为不安全的设置安全设置,会让你不能使用RSA功能)。
备注:如果不设置,一会用ssh登入的时候依然需要密码,笔者在这里浪费很多时间。
hadoop_admin@h1:~/.ssh$ chmod 644 authorized_keys hadoop_admin@h1:~/.ssh$ cd ~ hadoop_admin@h1:~$ chmod 700 .ssh
4. 设置SSH配置
用root用户登录服务器修改SSH配置文件"/etc/ssh/sshd_config"的下列内容。
RSAAuthentication yes # 启用 RSA 认证
PubkeyAuthentication yes # 启用公钥私钥配对认证方式
AuthorizedKeysFile /home/hadoop_admin/.ssh/authorized_keys # 公钥文件路径(和上面生成的文件同)
有一些系统已经有这三行,但是可能被#注释了起来,请把前面的#去掉。
(未完待续)