建立基于 Linux 和 MPICH2 的并行计算环境

http://www.ibm.com/developerworks/cn/linux/l-cn-mpich2/

张 阿鹏, 软件工程师, IBM

简介: 随着社交网络、移动互联网、物联网等技术的迅速发展,越来越多的数据呈现在我们面前。如何及时充分的对这些大数据进行分析,挖掘其中的商业价值成为各行各业面临的一大挑战。MPICH2 提供了在现有的软硬件架构下对大数据进行并行、分布式处理的一个平台。本文将介绍如何在 Linux 系统下建立基于 MPICH2 的高性能分布式并行计算环境。

MPI 和 MPICH2 简介

MPI(Message Passing Interface)是由 MPI 委员会制定的一个消息传递标准,其中定义了一系列用于分布式环境中进行进程间通信的编程接口,目前有 MPI-1 和 MPI-2 两个版本。MPICH2 就是对 MPI 的一个具体实现,MPICH2 在保证高性能的同时保持了高度的可移植性,支持包括 AIX、Linux(IA32 和 x86-64)、Mac OS/X(PowerPC 和 Intel)、Solaris(32 位和 64 位)和 Windows 在内的多种平台。MPICH2 是一个开放源代码的项目。

准备系统和网络环境

本文中用的软硬件系统如下:

  • 局域网中三台安装有 64 位的 Red Hat Enterprise Linux 5.5 的机器。
  • 三台机器的 hostname 分别是 s1、s2 和 s3。我们将会用 s1 作为 MPICH2 环境中的 Server,s2 和 s3 作为 MPICH2 环境中的 worker。
  • Linux 系统中已经安装了 Python2.6、SSH 服务、NFS 服务。

步骤 1 配置 SSH

MPICH2 提供了一系列的命令对分布式计算环境中的各个进程(这些进程可能是在不同的机器中运行)进行管理,这些工具在后台都是用 SSH 来进行操作,所以将 Server 和 Worker 之间配置成无密码的 SSH 登陆可以方便后边的操作。

在 s1 上执行如下命令:

 [root@s1 ~]# ssh-keygen -t rsa 
 [root@s1 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@s2 
 [root@s1 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@s3 

步骤 2 配置 NFS

MPICh2 并没有提供一个统一的文件系统,所以需要借助操作系统提供的共享文件系统在 Server 和多个 Worker 之间共享数据。这里以 NFS 为例。

首先在 Server s1 上建立 NFS 共享目录:

  1. 创建共享目录:
     [root@s1 ~]# mkdir /share 
    

  2. 将目录加入到 NFS 共享目录列表,在 /etc/exports 中添加如下配置:
     /share   *(sync,rw,no_root_squash) 
    

  3. 在 s1 上启动 NFS 服务:
     [root@s1 ~]# service nfs start 
    

然后在 Worker s2 和 s3 上 mount s1 共享的 NFS 目录:

 [root@s2 ~]# mkdir /share 
 [root@s2 ~]# mount s1:/share /share 
 [root@s3 ~]# mkdir /share 
 [root@s3 ~]# mount s1:/share /share 

安装和配置 MPICH2

首先从 MPICH2 官方网站下载 MPICH2 安装包,然后在 s1 上安装,配置 MPICH2 环境。


步骤 1 安装 MPICH2
				
 [root@s1 ~]# rpm -i mpich2-1.2.1p1-1.el5.x86_64.rpm 


步骤 2 创建配置文件 /etc/mpd.conf 并加入如下内容:
				
 secretword=behappy 

这里的 secretword 是各个机器中 MPICH2 守护进程进行通信的安全口令。

设置文件访问权限为 600:

 [root@s1 ~]# chmod 600 /etc/mpd.conf 

步骤 3 检查安装配置结果

  1. 启动 s1 上的 MPICH2 守护进程:
     [root@s1 ~]# mpdboot -n 1 
    

  2. 执行 mpdtrace 检查进程状态:
     [root@s1 ~]# mpdtrace -l 
    

    如果安装配置成功将会看到如下输出:

     s1_58077 (9.115.20.154) 
    

    其中 s1 是 s1 的机器名,58077 是 MPICH2 守护进程监听的端口号,9.115.20.154 是 s1 的 IP 地址。

  3. 执行 mpiexec 命令:
     [root@s1 ~]# mpiexec -l hostname 
    

    如果安装配置成功将会看到如下输出:

     0: s1 
    

    其中 s1 是 s1 的机器名

  4. 停止 MPICH2 守护进程:
     [root@s1 ~]# mpdallexit 
    

步骤 4 在 s2 和 s3 上分别执行步骤 1 到步骤 3 进行 MPICH2 的安装,配置和检查

这里有三点需要注意 :

  1. s1,s2 和 s3 上 /etc/mpd.conf 中的 secretword 必须设置成同样的值。
  2. /etc/mpd.conf 必须设置成 600 的访问权限,否则无法启动 MPICH2 守护进程。
  3. 如果用非 root 用户来建立环境,步骤 2 中创建的配置文件是 ~/.mpd.conf。

步骤 5 在 s1 上配置 MPICH2 环境中的 Server 和 Worker 机器信息:

在 s1 创建 mpd.hosts 文件并加入各个机器的机器名或者 ip 地址:

 s1 
 s2 
 s3 

管理 MPICH2 计算环境

MPICH2 提供了多个命令行工具(Python 脚本)来对 MPICH2 的计算环境进行管理:

  • 首先使用 mpdboot 启动三台机器中的 MPICH2 守护进程:
     [root@s1 ~]# mpdboot -n 3 -f ./mpd.hosts 
    

    -n 用来指定要启动的进程个数,这里我们启动 3 个。

    -f 用来指定存放 MPICH2 环境中的 Server 和 Worker 机器信息的文件。

  • 然后使用 mpdtrace 查看 MPICH2 计算环境中各个进程的状态:
     [root@s1 ~]# mpdtrace -l 
     s1_60067 (9.115.20.154) 
     s3_45743 (9.115.20.217) 
     s2_46584 (9.115.20.139) 
    

    mpdtrace 输出的格式是:hostname_ 端口号 (ip 地址 )

    从输出可以看到我们已经在三台机器上启动了 MPICH2 守护进程。

  • 真正利用 MPICH2 计算环境来启动外部程序进行计算需要用到 mpiexec 命令,这里以 hostname 命令为例:
     [root@s1 ~]# mpiexec -l -n 3 hostname 
     1: s3 
     0: s1 
     2: s2 
    

    从输出可以看出来我们已经在三台机器中执行了 hostname 这一命令。

  • 如果需要停止整个 MPICH2 环境中所有的 MPICH2 守护进程,可以在 s1 上执行 mpdallexit 命令。
     [root@s1 ~]# mpdallexit 
    

  • 注意以上这些命令都是在 MPICH2 环境中的 Server s1 中执行的。
  • 除了以上介绍的命令外,MPICH2 还提供了 mpdcheck、mpdkilljob、mpdlistjobs、mpd 等其他命令,通过执行 mpdhelp 可以查看其详细信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值