经过一天的努力,终于完成了openMPI的多节点安装,即小集群安装。本文使用的是openmpi-1.6.5,下载地址见:http://www.open-mpi.org/software/ompi/v1.6/

1.安装准备

1.1 首先肯定是需要安装GCC和G++编译器,这个直接apt-get就OK了;

sudo apt-get g++ gfortran

1.2 设置主机名

先在/etc/hosts中删除原来的hostname,然后 vi /etc/hostname改成你想要的,注意必须顶行写。然后使用hostname命令来重新得到hostname, logout一下再login就会改掉。

这里我用的是node1-ubuntu和node2-ubuntu。

1.3 修改hosts文件,修改如下:

 192.168.1.133    node1-ubuntu server
192.168.1.135 node2-ubuntu

1.4 配置自动ssh登录

这里主要是要各个机器之间能无密码访问,主要用到的就是SSH,因此需要一些设置。

首先,我们需要导出各个节点的公钥和私钥:

$ ssh-keygen -t rsa 

在运行过程中,会提示你输入这个输入那个,不用管那么多,直接回车就完了。等运行结束后,进入.ssh目录,你会看到公钥和私钥文件;

$ cd ~/.ssh
$ ls
id_rsa id_rsa.pub

其中id_rsa就是私钥,id_rsa.pub就是公钥,现在我们需要把各个节点上的公钥都集中发送到一个节点上,来制作授权文件(authorized_keys).

注意:在两台机器必须安装ssh(sudo apt-get install ssh openssh-server)而且必须设置root密码(sudo passwd root),才能远程登录

$ scp ~/.ssh/id_rsa.pub node1-ubuntu:~/.ssh/1.pub

在将node2-ubuntu拷贝到node1-ubuntu后,在node1-ubuntu进行如下处理:

$ cp ~/.ssh/id_rsa.pub authorized_keys
$ cat ~/.ssh/1.pub >> authorized_keys

在node1-ubuntu上制作好的authorized_keys拷贝到node2-ubuntu上:(node1-ubuntu使用scp)

$ scp ~/.ssh/authorized_keys node2-ubuntu:~/.ssh/

要想让这两台机器无密码登录,所以我们需要更改一下必要的文件的权限(所有节点都要更改):其实只要保证authorized_keys的文件权限为600或者644

$ chmod 755 ~
$ chmod 755 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/id_rsa
$ chmod 644 ~/.ssh/id_rsa.pub

至此,SSH配置就完成了。下面检验一下:

在一个主机上面SSH另一个主机:

$ ssh node1-ubuntu

2.安装openMPI

2.1  首先将下载的文件解压,下载的文件在当前用户目录里面的“下载”目录里面,我直接解压到当前目录:

$ tar xvfz openmpi-1.6.5.tar.gz  

2.2 安装官方文档配置的,可以查看解压后的README文档参考:由于是bash,因此选择以下命令,prefix指示安装路径,USERNAME就是当前用户的用户名,,

在此之前当然要建立安装openMPI的路径,也就是:

$ mkdir openmpi

运行shell程序configure对openmpi进行一些配置,关于configure选项,参见openmpi-1.6.5下的README文件。

$ ./configure --prefix=/home/<USERNAME>/openmpi  2>&1 | tee install1.log  

而且在之前的安装过程中,我发现如果不禁止fortran,安装会出问题,会导致openMPI安装不完全而出错,是因为没有安装fortran编译器,如果使用C/C++的话,这里建议禁用fortran。

接下来,编译和安装:

$ make all 2>&1 | tee make.log
$ make install 2>&1 | tee install2.log

安装完成后,会有如下情况:

至此,OpenMPI安装完成。

2.3 设置进程的配置环境

这里设置环境变量主要是将openmpi的安装目录加到系统环境变量中,这里我在/etc/environment中加入对应的路径:

用vim编辑器打开/etc/environment:

$ sudo vim /etc/environment

输入密码之后,将下面语句添加到最后一行:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/awy/openmpi/bin"
LD_LIBRARY_PATH=/home/awy/openmpi/lib

3.验证是否成功:

1 3 $ which mpicc
4 /home/awy/openmpi/bin/mpicc
5 $ which mpiexec
6 /home/awy/openmpi/bin/mpiexec
7 $ which mpirun
8 /home/awy/openmpi/bin/mpirun

这样就说明openmpi已经安装成功了。

运行安装目录中examples下的例子,在此之前,先编译下make:

mpiexec -np 2 ./openmpi-1.6.5/examples/hell_f90

4 配置机器数量以及进程数

用vim编辑一个文件命名为hosts:如果你想在一个节点上运行多个进程,那么hostfile 可以使用 "slots" 属性。如果没有指定"slots",那么将假设其数目为1.

node1-ubuntu
node2-ubuntu

或者

node1-ubuntu    slots=4
node2-ubuntu slots=2

让两个节点并行运行例子程序,如下所示:

$ mpiexec -hostfile hosts -np 8 ./openmpi-1.6.5/examples/hello_f90

5.安装过程中遇到的问题:

1.出现这种错误./openmpi-1.6.5/examples/hello_f90: error while loading shared libraries: libmpi_f77.so.1: cannot open shared object file: No such file or directory,或者

bash: orted: command not found
--------------------------------------------------------------------------
A daemon (pid 27974) died unexpectedly with status 127 while attempting
to launch so we are aborting. There may be more information reported by the environment (see above). This may be because the daemon was unable to find all the needed shared
libraries on the remote node. You may set your LD_LIBRARY_PATH to have the
location of the shared libraries on the remote nodes and this will
automatically be forwarded to the remote nodes.
--------------------------------------------------------------------------
--------------------------------------------------------------------------
mpirun noticed that the job aborted, but has no info as to the process
that caused that situation.
--------------------------------------------------------------------------
mpiexec: clean termination accomplished

说明是LD_LIBRARY_PATH为空,可以进行这样查看:

mpiexec -n 1 printenv | grep PATH

查看LD_LIBRARY_PATH,如果没有,则可以进行如下操作:

$    source /etc/environment
$ export LD_LIBRARY_PATH

如此,便可以成功了。

2.如果要在IPv6的环境下运行openMPI,则安装的时候要开启:即在./configure --prefix=/home/<username>/openmpi --enable-ipv6,这样便可以了。

openMPI小集群安装的更多相关文章

  1. 一脸懵逼学习基于CentOs的Hadoop集群安装与配置

    1:Hadoop分布式计算平台是由Apache软件基金会开发的一个开源分布式计算平台.以Hadoop分布式文件系统(HDFS)和MapReduce(Google MapReduce的开源实现)为核心的 ...

  2. 一脸懵逼学习基于CentOs的Hadoop集群安装与配置(三台机器跑集群)

    1:Hadoop分布式计算平台是由Apache软件基金会开发的一个开源分布式计算平台.以Hadoop分布式文件系统(HDFS)和MapReduce(Google MapReduce的开源实现)为核心的 ...

  3. hadoop-2.6.0.tar.gz的集群搭建(3节点)(不含zookeeper集群安装)

    前言 本人呕心沥血所写,经过好一段时间反复锤炼和整理修改.感谢所参考的博友们!同时,欢迎前来查阅赏脸的博友们收藏和转载,附上本人的链接http://www.cnblogs.com/zlslch/p/5 ...

  4. 【Oracle 集群】Oracle 11G RAC教程之集群安装(七)

    Oracle 11G RAC集群安装(七) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总. ...

  5. kafka集群安装部署

    kafka集群安装 使用的版本 系统:centos6.5 centos6.7 jdk:1.7.0_79 zookeeper:3.4.9 kafka:2.10-0.10.1.0 一.环境准备[只列,不具 ...

  6. CentOS下Hadoop-2.2.0集群安装配置

    对于一个刚开始学习Spark的人来说,当然首先需要把环境搭建好,再跑几个例子,目前比较流行的部署是Spark On Yarn,作为新手,我觉得有必要走一遍Hadoop的集群安装配置,而不仅仅停留在本地 ...

  7. Hadoop多节点集群安装配置

    目录: 1.集群部署介绍 1.1 Hadoop简介 1.2 环境说明 1.3 环境配置 1.4 所需软件 2.SSH无密码验证配置 2.1 SSH基本原理和用法 2.2 配置Master无密码登录所有 ...

  8. codis集群安装

    在网上找了很多codis的集群安装方法,看起来都是大同小异,本人结合了大多种方法完成了一套自己使用的codis的集群安装,可以供大家学习使用,如果有什么问题或者不懂的地方欢迎指正 1.集群规划: 三台 ...

  9. [bigdata] spark集群安装及测试

    在spark安装之前,应该已经安装了hadoop原生版或者cdh,因为spark基本要基于hdfs来进行计算. 1. 下载 spark:  http://mirrors.cnnic.cn/apache ...

随机推荐

  1. 由 char()函数返回的 ASCII字符集中的功能/控制字符

    如果在excel下的单元格写入公式:=“国际经济与贸易”&CHAR(10)&"401班"&CHAR(10)&"A组".则出现: ...

  2. Linux中查看进程的多线程pstree, ps -L

    Linux中查看进程的多线程 在SMP系统中,我们的应用程序经常使用多线程的技术,那么在Linux中如何查看某个进程的多个线程呢? 本文介绍3种命令来查看Linux系统中的线程(LWP)的情况:在我的 ...

  3. 「Poetize3」导弹防御塔

    描述 Description Freda控制着N座可以发射导弹的防御塔.每座塔都有足够数量的导弹,但是每座塔每次只能发射一枚.在发射导弹时,导弹需要T1秒才能从防御塔中射出,而在发射导弹后,发射这枚导 ...

  4. 动态规划(方案还原):SGU 104 Little shop of flowers

    花店橱窗布置问题 时间限制:3000 ms 问题描述(Problem)    假设你想以最美观的方式布置花店的橱窗,你有F束花,每束花的品种都不一样,同时,你至少有同样数量的花瓶,被按顺序摆成一行.花 ...

  5. HDOJ 2081 手机短号

    Problem Description 大家都知道,手机号是一个11位长的数字串,同时,作为学生,还可以申请加入校园网,如果加入成功,你将另外拥有一个短号.假设所有的短号都是是 6+手机号的后5位,比 ...

  6. UVa1349 Optimal Bus Route Design(二分图最佳完美匹配)

    UVA - 1349 Optimal Bus Route Design Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & ...

  7. Codeforces Round #326 (Div. 1) - C. Duff in the Army 树上倍增算法

    题意:一个n个点的数, m个人住在其中的某些点上, 每个人的标号1-m, 询问u-v 路径上标号前a个人,并输出标号,a < 10. 作法, 利用倍增, ID[j][i] 表示i到i的第2^j个 ...

  8. Threading Module源码概述(二)

    在threading 模块中,提供了列举当前所有子线程的操作.threading.enumerate.这个操作很简单,就是将_active和_limbo中维护的线程集合的信息输出. def enume ...

  9. ASP.NET MVC3 ModelState.IsValid为false的问题

    模型验证通常在submit后调用Action之前进行验证,eg: public class ZhengXing    {        [Key]        public int ZhengXin ...

  10. JAR WAR EAR包的区别

    jar包和war包的区别: war是一个web模块,其中需要包括WEB-INF,是可以直接运行的WEB模块.而jar一般只是包括一些class文件,在声明了Main_class之后是可以用java命令 ...