| 查看: 531 | 回复: 2 | ||
| 当前主题已经存档。 | ||
[资源]
【转帖】集群作业管理OpenPBS与OpenPBS Interface Library(IFL)
|
||
|
接了一个项目,要用到OpenPBS,完全没碰过的东西,上网找了找,好像资料也不多,没办法,自力更生-_-b... 一点点学,一点点记,肯定还要写很多,最后再整理。 有指正或问题请idleguy@263.net,谢谢。 OpenPBS & Interface Library OpenPBS安装 1、 必须用root登录 2、 创建安装路径,一般是:/usr/local/OpenPBS 3、 cp OpenPBS安装包到安装路径并释放 4、 进入释放的目录,例如:$>OpenPBS_2_3_16\ 5、 运行OpenPBS配置脚本: $>./configure –prefix=/usr/local/OpenPBS ./configure可以配置OpenPBS的环境,-prefix是一些安装目录的前缀,例如lib等,默认是/usr/local。可以./configure –help查看所有的参数。一般默认的就可以。 6、 编译OpenPBS:在释放的目录下make. 在make的过程中可能出现如下错误: make[4]: *** No rule to make target `'''', needed by `attr_atomic.o''''. Stop. make[4]: Leaving directory `/g/pbs/OpenPBS_2_3_16/src/lib/Libattr'''' make[3]: *** [all] Error 2 make[3]: Leaving directory `/g/pbs/OpenPBS_2_3_16/src/lib/Libattr'''' make[2]: *** [all] Error 2 make[2]: Leaving directory `/g/pbs/OpenPBS_2_3_16/src/lib'''' make[1]: *** [all] Error 2 make[1]: Leaving directory `/g/pbs/OpenPBS_2_3_16/src'''' make: *** [all] Error 2 这需要一个补丁来解决,参见附录 7、 安装OpenPBS:编译成功后,make install 8、 创建节点(node)文件 /usr/spool/PBS/server_priv/nodes 文件内容是节点的机器名。例如 node1 node2 …… 当然可以有更具体的设置. 包括机群系统中所有结点的描述,如主机名,属性和cpu的数目。结点文件的格式为:hostname [:ts] [property…] [np=NUMBER] 。 9、 建立MOM进程配置文件 在{PBS_HOME}/mom_priv目录下建立资源管理器守护进程的配置文件config。所谓{PBS_HOME}可以在安装的第一步./configure的时候指定,相关参数: --set-server-home={YOUR_PBS_HOME},一般不用指定,用默认值就好了。默认值为/usr/spool/PBS config文件的内容通常包括: $logevent 0x1ff $clienthost server_host 其中$logevent是为了设置记录作业执行事件日志的掩码,当其值设为0x1ff时,表示记录作业运行事件的所有日志信息;server_host是PBS服务器所在的主机名。 OpenPBS启动 1. 启动MOM进程 $> /usr/local/OpenPBS/sbin/pbs_mom 2. 启动OpenPBS服务器 $>/usr/local/OpenPBS/sbin/pbs_server –t create (第一次启动用户服务器时,需要“–t create”选项,以后启动不需要) 3. 启动调度器 $>/usr/local/OpenPBS/sbin/pbs_sched (建议在$HOME/.bash_profile中加入 OPENPBSDIR=/usr/local/OpenPBS PATH=$PATH:$OPENPBSDIR/bin: $OPENPBSDIR/sbin export OPENPBSDIR PATH 创建队列 用qmgr创建队列,例如: #创建队列,并命名为normal qmgr -c "c q normal" #设定队列的类型为Execution qmgr -c "s q normal queue_type=Execution" #设定该队列中任务最大运行时间为24小时(CPU时间) qmgr -c "s q normal resources_max.cput=24:00:00" #设定该队列中任务最小运行时间为1秒(CPU时间) qmgr -c "s q normal resources_min.cput=1" #设定该队列中任务默认运行时间为12分钟(CPU时间) qmgr -c "s q normal resources_default.cput=12:00" #enable queue qmgr -c "s q normal enabled=true" #start queue qmgr -c "s q normal started=true" #将normal队列设定为默认队列 qmgr -c "s s default_queue=normal" qmgr的参数中-c代表命令行,引号(“”)中的内容是要执行的命令。 其中c是create, s是set, q是queue,所以,上述命令可以写作: qmgr –c “set queue normal enabled=true” …… 提交任务可以用qsub,只有非root用户才可以提交任务。 OpenPBS Interface Library OpenPBS Interface Library(IFL)是OpenPBS提供的一组函数,完成OpenPBS的任务。 例如:pbs_connect,是连接服务器的函数。 编写程序调用这些函数需要以下两个头文件: #include #include 和一个静态链接库:libpbs.a(可以在/usr/local/lib/中找到这个库) 因为该库用C编写需要,如果用C++编写程序调用这些函数,则需要: extern “C” 下面是一个示例程序(subjob.cc),作用就是提交任务,如果成功返回该任务提交后在服务器上的任务标示,如果失败则返回错误代码: extern "C"//C 函数 { #include #include } #include int main(int argc,char** argv) { int Con=pbs_connect("server”); //连结服务器”server” printf("Con=%d\n",Con); char *Ret=pbs_submit(Con,0,argv[1],0,0);//提交任务 if (!Ret) { printf("ERR=%d\n",pbs_errno);//发生错误,打印错误代码 } else { printf("Ret=%s\n",Ret);//打印返回的任务标识 } delete Ret; return 1; } 编译该程序: $>g++ -o subjob subjob.cc –lpbs 附录 安装OpenPBS过程中make出错 如果遇到前文提到的错误,那么通过打补丁可以解决该问题。 该补丁可以通过以下方法得到: 1. 下载:http://www.webmo.net/support/patch/pbs.patch 2. 将下面内容(=包括中的内容,不包含=)存入pbs.patch(当然,任意文件名) ====================================================================== --- /buildutils/makedepend-sh.000 Wed Nov 17 11:32:52 1999 +++ /buildutils/makedepend-sh Thu Jul 10 13:35:43 2003 @@ -574,6 +574,12 @@ test "$verbose" -lt 2 && errout=''''2> /dev/null'''' eval $CPP $arg_cc $d/$s $errout | \ + sed \ + -e ''''1d'''' \ + -e ''''/^#.*/d'''' \ + -e ''''/^#.*/d'''' \ + -e ''''/^#.*/d'''' \ + -e ''''/^#.*/d'''' | \ sed -n -e "s;^\# [0-9][0-9 ]*\"\(.*\)\";$f: \1;p" | \ grep -v "$s\$" | \ sed -e ''''s;\([^ :]*: [^ ]*\).*;\1;'''' \ --- /src/lib/Liblog/pbs_log.c.000 Tue Dec 4 18:38:40 2001 +++ /src/lib/Liblog/pbs_log.c Thu Jul 10 13:39:45 2003 @@ -109,6 +109,7 @@ /* Global Data */ +#include extern int errno; char log_buffer[LOG_BUF_SIZE]; char log_directory[_POSIX_PATH_MAX/2]; --- /src/server/svr_connect.c.000 Tue Dec 4 18:39:23 2001 +++ /src/server/svr_connect.c Thu Jul 10 13:43:11 2003 @@ -113,6 +113,7 @@ struct connect_handle connection[PBS_NET_MAX_CONNECTIONS]; /* used by API */ +#include extern int errno; extern int pbs_errno; 将该文件cp到OpenPBS安装包的释放目录,打补丁: $>patch -pl -b < pbs.patch 然后就可以正常安装了 使用IFL发生编译错误 Q:提示找不到库libpbs.a。 A:确定正确安装OpenPBS,lib搜索路径中包含libpbs.a.确定编译选项是-lpbs Q:提示找不到函数,例如 undefined reference to `pbs_connect(char*)'''' A:在程序中这样包含头文件: extern "C" { #include #include } …… Q:已经像上面那样包含头文件,仍然找不到函数,不过这次看起来有点不一样,例如: undefined reference to `pbs_connect'''' A:编译的时候,要将libpbs.a的引用放在源文件后面,例如: $>g++ -o subjob subjob.cc –lpbs |
» 猜你喜欢
退学或坚持读
已经有28人回复
有时候真觉得大城市人没有县城人甚至个体户幸福
已经有7人回复
天津大学招2026.09的博士生,欢迎大家推荐交流(博导是本人)
已经有3人回复
面上项目申报
已经有3人回复
酰胺脱乙酰基
已经有9人回复
CSC & MSCA 博洛尼亚大学能源材料课题组博士/博士后招生|MSCA经费充足、排名优
已经有5人回复
博士延得我,科研能力直往上蹿
已经有7人回复
面上基金申报没有其他的参与者成吗
已经有5人回复
遇见不省心的家人很难过
已经有22人回复
2楼2009-05-26 10:46:35
3楼2009-05-26 10:58:50













回复此楼