背景
本人最近在学习hadoop的相关内容,感觉在一个伪分布式环境下研究、学习总是感觉不伦不类的,于是想配一个基于OSX平台的完全分布式环境。在网上看了很多配置教程,发现几乎都是同时开三个虚拟机实现的三节点分布式环境,而我想用我的macbook作为master节点,并在此笔记本上开两个ubuntu虚拟机作为node1,node2节点,一番摸索下终于成功,特此写下此文章,以便不想完全用虚拟机作为分布式节点的同学分享交流。
参考链接:http://www.w2bc.com/Article/19645
环境
了解一些HDFS知识的同学应该清楚,从HDFS的角度来看,集群中的机器主要分为两种角色: NameNode和DataNode。此次配置的环境中,由macbook本身充当NameNode, 而两个虚拟机中运行的ubuntu系统分别充当两个DataNode。
- os x EI Capitan 10.11.5
- 虚拟机:Parallels Desktop
- ubuntukylin 14.04 64bit * 2
- hadoop 2.6.2
- os x上的jdk版本:1.8.0_73,ubuntu上的jdk版本:1.8.0_91(不同机器上的jdk版本不要求一样)
安装虚拟机
- 打开Parallels Desktop,点击右上角的“+”号添加虚拟机;
- 选择由现有的镜像文件添加系统还是自动下载,如图所示:
安装JDK
先检查在系统中是否安装有JDK,在控制台输入: java -version,如果出现如下提示,则证明本系统上已安装有JDK,否则需要自己手动安装。
mac系统上的JDK默认安装路径在:/Library/Java/JavaVirtualMachines/jdk1.8.0_73.jdk/Contents/Home,最好在ubuntu系统上也按如此路径存放JDK,如果对应的文件夹不存在,则自己在ubuntu上创建即可,不使用相同的路径也可,不过需要在各个ubuntu系统上的相关配置文件所有关于$JAVAHOME的位置更改为相应的JDK路径。
如果需要手动安装JDK,请自行搜索安装JDK的方法,同时配置好相应的环境变量。环境变量输入的位置在:/etc/profile下。
修改各自的hostname
为了方便起见,最好将三个系统上的hostname修改为:master(mac上)、node1(其中一个ubuntu系统上)、node2(另一个ubuntu系统)。
可以通过在控制台输入hostname来显示当前系统的hostname。
1. 在mac上设置hostname:在控制台输入
sudo scutil --set HostName master
2. ubuntu上设置hostname:
修改/etc/hostname文件,在其中把之前的名字删除,只留下node1(在另一个ubuntu上修改为node2)。
修改完hostname后,注销或重启一下系统,以使得新的hostname生效。之后可以通过在控制台输入 hostname
来验证hostname是否更改过来。
修改各个系统的hosts文件
此方法由于在Mac和ubuntu上步骤相同,所以统一说了,之后需要在每个机器上均执行此过程。
1. 使用ifconfig命令,查看各个系统的ip地址,并保证通过ping命令互相可以ping通,并记录各自的ip地址。或者,也可以通过手动方式指定各自系统的ip地址。
2. 修改/etc/hosts文件,在其中添加三条记录:master的IP地址 master,node1的IP地址 node1,node2的IP地址 node2。我自己的配置如下:
注意:此步骤需要在三个系统上均执行一遍,且填入的内容也相同。
安装及测试SSH
由于hadoop各个节点之间通过ssh方式进行通信,因此必须在各个系统上安装好ssh,并且为了避免每次登录均输入密码,还需要进行一定的配置实现ssh免密码登录。
1. 在控制台输入:ssh
,如果出现如下提示,则证明本系统上已安装好了ssh,无须再去安装。
2. mac系统上已经默认安装了openSSH,如果ubuntu上没有安装,可参考如下方式安装:在控制台输入 sudo apt-get install openssh-server
,安装完成后在控制台输入:sudo service ssh start
启动ssh服务。
3. 在控制台输入:ssh localhost
第一次登录会提示让你输入密码,最终显示Last login: ……表示登录成功。
配置ssh免密码登录
此过程在各个系统上均需要执行一遍。
1. 产生秘钥:
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
此时会在~/.ssh文件夹下出现如下两个文件:id_dsa id_dsa.pub
2. 导入authorized_keys:
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
#保证authorized_keys的chmod为600
3. 测试是否安装成功: