OS: CentOS 6.7
MPI:Mpich2-1.4.1
http://www.mcs.anl.gov/research/projects/mpich2/downloads/tarballs/1.4.1p1/mpich2-1.4.1p1.tar.gz
安装过程:
1. 事先安装GCC :
a) CentOS: sudo yum install gcc-c++
b) Ubuntu: sudo apt-get install g++
2. 设置ssh无密码登录:
a) 在每个节点上执行ssh-keygen -t rsa命令,在~/.ssh下生成秘钥id_sa和id_rsa.pub
b) 将每个节点上的id_rsa.pub文件追加到某一节点,假设131节点的~/.ssh/authorized_keys末尾,在这里假设那个节点的用户为hadoop
cat ~/.ssh/id_rsa.pub | ssh [email protected] "cat - >>~/.ssh/authorized_keys"
c) 在非192.168.253.131节点,将131上的authorized_keys文件复制到所有节点的 ~/.ssh目录下
scp [email protected]:~/.ssh/authorized_keys~/.ssh/
d) 将authorized_keys的权限改为644
chmod 644 ~/.ssh/authorized_keys
e) 可以尝试集群之间相互ssh登陆
3. 编译mpich2
tar zxvf mpich2-1.4.1p1.tar.gz
cd mpich2-1.4.1p1
./configure--prefix=/opt/mpich2-1.4.1p1 --with-pm=hydra:mpd --with-mpe
make
sudo make install
4. 对MPICH2进行配置。在每个节点上都必须配置。
a) 配置环境变量(~/.bashrc)
sudo gedit ~/.bashrc
b) 在 ~/.bashrc的底部添加下面几行:
如果安装路径修改此处也需要相应修改
export MPI_ROOT=/opt/mpich2-1.4.1p1
export PATH=$MPI_ROOT/bin:$PATH
export MANPATH=$MPI_ROOT/bin:$MANPATH
c) 执行下面命令使~/.bashrc生效:
source ~/.bashrc
d) 测试环境变量:
which mpd
which mpicc
which mpiexec
which mpirun
e) 创建配置文件.mpd.conf
root用户和普通用户的mpd.conf存储位置是不同的。
root用户在/etc路径下,创建文件名为"mpd.conf"文件。
普通用户在~/路径下,创建文件名为".mpd.conf "。
注意,文件名多了一个点。
mpd.conf或.mpd.conf的内容为secretword=myword
注意:各个节点上的mpd.conf文件必须相同
最后需要赋予相应权限
chmod 600 .mpd.conf
5. 创建配置文件mpd.hosts
路径:~/mpd.hosts
内容:mpd.hosts记录MPICH2集群上节点的机器名或IP地址
注意:如果是主机名需要先进行映射操作
在 Ubuntu/CentOS 7 中,我们在 Master 节点上执行如下命令修改主机名(即改为 Node1,注意是区分大小写的):
sudo vim /etc/hostname
如果是用 CentOS 6.x 系统,则是修改 /etc/sysconfig/network 文件,改为 HOSTNAME=Node1
然后执行如下命令修改自己所用节点的IP映射:
sudo vim /etc/hosts
192.168.1.121 Node1
192.168.1.122 Node2
我们在 /etc/hosts 中将该映射关系填写上去即可(一般该文件中只有一个 127.0.0.1,其对应名为 localhost,如果有多余的应删除,特别是不能有 “127.0.0.1 Node1” 这样的记录),CentOS 中的 /etc/hosts 配置则如下图所示:
修改完成后需要重启一下,重启后在终端中才会看到机器名的变化。
需要在所有节点上完成网络配置。
如上面讲的是 Node1节点的配置,而在其他的Node节点上,
也要对 /etc/hostname(修改为Node2、Node3等) 和 /etc/hosts(跟Node1的配置一样)这两个文件进行修改。
配置好后需要在各个节点上执行如下命令,测试是否相互 ping 得通,如果 ping 不通,后面就无法顺利配置成功:
ping Node2 –c 3
6. 启动单点mpi
mpd &
7. 执行mpdtrace
mpdtrace -l
8. 启动mpi集群准备
a) 首先需要关闭防火墙,CentOS 6.x 中,可以通过如下命令关闭防火墙:
sudo service iptables stop # 关闭防火墙服务
sudo chkconfig iptables off # 禁止防火墙开机自启
若用是 CentOS 7,需通过如下命令关闭(防火墙服务改成了 firewall):
systemctl stop firewalld.service # 关闭firewall
systemctl disable firewalld.service #禁止firewall开机启动
9. 启动集群:
MPI的多机并行是用mpdboot来管理启动的,是由参与计算的其中一台机器通过mpdboot同时启动其他机器上的mpd管理器并运行相应MPI程序。
# mpdboot –n process-num –f mpd.hosts
mpdboot -n 4 -f mpd.hosts –v
MPICH2采用mpd服务来对进程进行管理,使用mpiexec运行mpi程序。
10. 查看集群主机名和端口号:
mpdtrace –l
关闭mpd服务:
Mpdallexit
查看主机名:
mpdtrace