HOD服务集群 torque maui

前言
本文的目的在于从无到有的搭建一套HOD服务集群。在参考本文之前假设读者已经对hadoop系统及其下面 DFSShell,HDFS,MapReduce等已经有了相当的了解。由于Hadoop docs中关于HOD如何搭建和使用的介绍比较少,并且涉及到底层Torque集群组件的结合,在搭建和使用上难免会碰到一系列的问题。希望通过本文的分 享,能够能帮助使用者少走弯路,节省时间。
 
1.HOD框架概述
Hadoop On Demand(HOD)是一个能在大型物理集群上供应虚拟hadoo前言
本文的目的在于从无到有的搭建一套HOD服务集群。在参考本文之前假设读者已经对hadoop系统及其下面 DFSShell,HDFS,MapReduce等已经有了相当的了解。由于Hadoop docs中关于HOD如何搭建和使用的介绍比较少,并且涉及到底层Torque集群组件的结合,在搭建和使用上难免会碰到一系列的问题。希望通过本文的分 享,能够能帮助使用者少走弯路,节省时间。
 
1.HOD框架概述
Hadoop On Demand(HOD)是一个能在大型物理集群上供应虚拟hadoop集群的系 统 。它使用Torque资源管 理器分配节点。它可以在分配的节点上启动 Hadoop Map/Reduce和HDFS的守护进程。它会自动为Hadoop守护进程和客户端生成合适的配置文 件 (hadoop-site.xml)。HOD还可以将Hadoop分发到它分配出来的虚拟Hadoop集群的节点 上。简而言之,HOD使管理员和用户 轻松地快速搭建和 使用hadoop。它也是 Hadoop开发人员和测试人员非常有用的一个工具,他们可以使用HOD共享一个物理集群来测试各自的Hadoop版本。
HOD 依赖资源管理器(RM)来分配节点,这些节点被用来在之上运行hadoop实例。目前,HOD采用的是Torque资源管理器。
 
基本的 HOD系统架构包含的下列组件:

一个资源管理器(可能同时附带一个调度程序scheduler)
各种HOD的组件
Hadoop Map/Reduce和HDFS守护进程
通过与以上组件交互,HOD在给定的集群上供应和维护Hadoop Map/Reduce实例,或者HDFS实例。集群中的节点可看作由两组节点构成:
提交节点(Submit nodes):用户通过HOD客户端在这些节点上申请集群,之后通过Hadoop客户端提交Hadoop作业。
计算节点(Compute nodes):利用资源管理器,HOD组件在这些节点上运行以供应Hadoop守护进程。之后,Hadoop作业在这些节点上运行。

下面 是对申请集群及在之上运行作业所需操作步骤的简要描述。
1.         用户在提交节点上用HOD客户端分配所需数目节点的集群,在上面run一个Hadoop。
2.         HOD客户端利用资源管理器接口(在Torque中是qsub)提交一个被称为RingMaster的HOD进程作为一个资源管理器作业,申请理想数目的 节点。这个作业被提交到资源管理器的中央服 务 器上(在Torque中叫pbs_server)。
3.         在计算节点上,资源管理器的从守护程序(slave ,Torque中的pbs_mom进程)接受并处理中央服务器(Torque 中的 pbs_server)分配的作业。RingMaster进程在其中一个计算节点(Torque中的mother superior)上开始运行。
4.         之后,Ringmaster通过资源管理器的另外一个接口(在Torque中是pbsdsh)在所有分配到的计算节点上运行第二个HOD组件 HodRing,即分布式任务。
5.         HodRing初始化之后会与RingMaster通信获取Hadoop指令,并遵照执行。一旦Hadoop的命令 开始启动,它们会向RingMaster登记,提供关于 守护进程的信息。
6.         Hadoop实例所需的配置文件全部由HOD自己生成,有一些来自于用户在配置文件设置 的选项。
7.         HOD客户端保持和RingMaster的通信,找出JobTracker和HDFS守护进程的位置所在。
以上便是HOD的概述和通过hod接口 申请动态集群的简述,接下来将分别详细介绍其中涉及到的各个组件的搭建和运行细节。
 
2.Torque资源管理器介绍

 

HOD 要实现自己的功能 ,需要依赖一个资源 管理器来为它分配和回收节点,管理各节点上的作业运行的情况,如监控作业的运行,作业队列的运行状态等等,HOD会在资源管理器所分配的节点上运行 Hadoop守护进程和Map-Reduce作业。HOD依赖资源管理器(RM)来分配节点,hadoop实例就运行在这些节点之上。目前,HOD采用的 是RM是Torque资源管理器。Torque是一个开源的资源管理器,来自于Cluster Resources,是一个社区基于PBS项目努力的结晶。它提供对批处理作业和分散的计算节点(Compute nodes)的控制。你可以自由地从此处下载Torque。
Torque相关的文档非常的多,涉及到的组件以及管理和运行手册页相当的多,所有 torque相关的文档可以在这儿的TORQUE Resource Manager一节找到。在这里 可以看到wiki文档。如果想订阅TORQUE的邮件列表或查看问题存档,访问这里 。为了节约大家重新学 习 和掌握Torque的时间,我们在这里 把所掌握的一些关于Torque的经验做一个介绍。
 
2.1 Torque的系统架构

一个torque集群由一个头节点(headnode)和许多个计算节点(compute node)组成,其中头节点上运行了一个pbs_server的守护进程,计算节点上都运行着pbs_mom守护进程。对于job进行提交和管理的客户端 命令可以被安装在任一台机器上(包括没有运行pbs_server和pbs_mom的机器)
头节点还会进行一个调度守护进程(schedule damon),该守护进程会和pbs_server进行通信,以此来决定对资源的使用和任务节点分配的本地策略。在torque的资源分布中包含了一个简 单的fifo调度器和其他的几个更高级的scheduler的源码。目前我们掌握了两种scheduler的使用,一种是torque中默认自带的 pbs_sched任务调度器,它就是上面提到的一个简单的fifo调度器,另一种就是Maui任务调度器,它提供了一些更高级的人物调度算法和策略。 Torque中的任务调度器是可以更换的,也就是说我们可以在某一段时间使用这个任务调度器,然后在另一端时间使用另外一个,而不用停止 pbs_server和各运算节点上的pbs_mom进程,只需要对任务调度器进行相关的配置即可。
[注意:]在使用torque的过程中发现, 如果pbs_sched调度进程没有启动,即使在pbs_server上成功的分配了节点并提交任务,任务也无法正常运行。所以一定要把 pbs_server和pbs_sched同时起来才行。
 
用户通过使用qsub命令来向pbs_server提交任务。当 pbs_server接收到命令后,知会scheduler,若scheduler发现了该job的节点,就会向pbs_server发送节点列表和运行 该job所需的其他资源,pbs_server会向节点列表中的第一个节点发送job,该第一个节点就成了“execution host”或者叫做“Mother Superior”,它将运行之后HOD发送过来的ringmaster进程,job中的其他节点被称作“sister moms”,他们将运行之后HOD发送过来的hodring进程。Torque中的各组件运行情况如下图所示:
 

图2.1 Torque运行框架示意图
 
上图是一个Torque集群的运行示意图,在集群中肯定会有某一台机器上运行了pbs_server守护 进程,它就是这个物理集群中的 headnode(这里 所说的headnode是指对Torque层面而言的,跟hadoop中 的namenode以及datanode无关)。所有要对这个物理集群上进行动态子集群分配的任务,都是由pbs_server来接管。 Pbs_server中通常会初始化一个到多个任务队列(上图中的 queue1,2,3),当外部节点申请到了某个动态子集群后,会向该子集群中提交自己的运算任务,这些任务都是首先提交到pbs_server中的某个 queue中,以供任务调度器来进行调度。因此物理集群中通常还会同时存在着一个任务调度器进程,在这里 是简单 的fifo调度器pbs_sched,这个进程可以运行在集群中的任何一台机器上,但通常是选择将其run在pbs_server的同一台机器上,这样可 以节省网络 带宽。集群中其他的 节点都叫做计算节点(Compute Node),在每个计算节点上都运行了一个pbs_mom守护进程,headnode在分配子集群的时候就是通过和这个pbs_mom进程通信来决定哪台 机器是可分配的,哪台机器当前的运行状况如何等等。
如上如图2.1所示,外部节点通过qsub接口向物理集群中提交一个申请,要求分配4台机器, 该申请被pbs_server接管,并检查物理集群中是否有 4台当前可用的计算节点可供分配,如果有,则分配四台计算节点,然后外部节点就可以向该动态集群提交自己的计算任务,计算任务被提交到 pbs_server的某个任务队列中,供任务调度器进行调度。当计算任务运行完成后,pbs_server负责将这4台计算节点的机器回收,以供以后的 其他人使用。这就是Torque cluster系统的运行概况。
 
2.2安装Torque

Torque的安装有多种方 式,这里 仅介绍最简单的一种,更多的方式可以参见clustersource的网站介绍。
http://clusterresources.com/downloads/torque 上 下载Torque的最新版本
在将要作为“Torque Server”机器上解压并build该torque包,这台机器将会通过在其上运行的pbs_server守护程序来控制和监控所有的计算节点。具体步 骤如下:
   $ tar -xzvf torqueXXX.tar.gz
   $ cd torqueXXX
   $ ./configure
   $ make
   $ make install
[注意:]默认的binary程序安装路径通常会 在/usr/local/bin和/usr/local/sbin下 以上./configure这个步骤中可以加入很多其他自定义的参数,不同参数的含义请参阅:这里 常用的 几个config参数有:
 --enable-docs    默认情况下Torque的是不会安装Torque的manual手册的,使用了这个配置选项后就会安装manual手册了
--with-scp       默认状况下,torque是使用rcp来拷贝文件的,但scp更推荐使用
--enable-syslog 默认状况下,torque是不会使用syslog的,使用该配置选项将syslog打开
    Torque安装中其他的安装后的文件会默认保存在/var/spool/torque目录下,这个目录中保存了Torque运行中所有的关键的配置文 件。
[推荐:]根据这种安装的方式,会将pbs_server,pbs_mom,pbs_sched以及torque中的各种管理接口都安装起 来。但这是我们推荐的方式,因为即使安装了这些组件,也并非一定要运行,可以在某个时刻让这台机器运行pbs_server,也可以在将来的某个时刻运行 pbs_mom 作为计算节点,并且pbs_server的节点同时也可以作为计算节点,而且这种方式可以在将来通过配置的方式来让集群中任何一台机器上都拥有管理整个集 群的接口,非常的方便。若要定制的个性化安装,如只安装torque的客户端或者pbs_mom组件,也是可以的。详情请参见clustersource 的网站。
      
2.3初始化和配置pbs_server

当把torque安装好以后,就需要在头节点上初始化和 配置pbs_server,这个配置至关重要,将会直接影响到pbs_server的运行参数,左右它的运行方式。其中包括对物理集群的管理帐户,操作帐 户,queue的初始化及命名,queue的运行状态,是否是可调度的,默认的queue是哪个,节点的回收时间等等。这些pbs_server的运行参 数都是可以配置的。在pbs_server守护进程运行起来之前,必须要对它进行合理的设置。最简单的方式是在torque包解压出来的根目录中运行命 令:
$> torque.setup <USER>    其中<USER>指的是将要作为torque管理员的用户的用户名
这个脚本将会帮助我们建立一个基本的batch queue,并作了一系列的默认配置,具体的操作如下:
set server perators = <USER>@headnode
set server operators += username@headnode
create queue batch
set queue batch queue_type = Execution
set queue batch started = True
set queue batch enabled = True
set server default_queue = batch
set server resources_default.nodes = 1
set server scheduling = True
如上所示:该默认配置为我们设置了默认的集群管理员的帐户,建立一个queue,命名为 batch,将该queue设置为启动,并enable,然后设置了该queue中的任务都是可执行的等等。通常对pbs_server的配置刚开始的时 候做这些默认的配置就够了,因为在运行的过程中torque提供了管理接口(qmgr,下文将会提到)让我们动态的修改pbs_server的属性。
 
2.4 指定计算节点

以上做的一系列的配置都是只对pbs_server的运行参数进行设置,但是pbs_server要怎么知道都有哪些计算节 点,该跟那些机器通信还不知道,这就需要我们通过配置告诉pbs_server,指定计算节点。为了能让pbs_server能够和所有的计算节点进行通 信,那么pbs_server就必须知道物理集群中都有多少计算节点。这需要在torque的 pbs_server这台机器上的nodes配置文件中指定每一台计算节点。这个文件的位置是在${TORQUECFG}/server_priv /nodes,其中${TORQUECFG}的位置默认是在/var/spool/torque目录下。在这个文件中以每一行一台机器的地址或者机器名的 方式来指定计算节点,例如:
 node6.yourhost.com
 node7.yourhost.com
 node8.yourhost.com
如 果计算节点上有多个处理器,可以指定该机器上的处理器个数,例如:
node6.yourhost.com np=2
node7.yourhost.com np=4
更多关于nodes文件的设置可以参阅这里 。
 
2.5初始化和配置计算节点

在pbs_server这台机器上的配置 完成以后,接下来就可以在各个计算节点上安装和配置计算节点的运行设置(pbs_mom)。如果是使用的torque的自解压包进行的安装,并且默认的对 计算节点的配置可以接受,那么就不需要进行额外的配置,这一节可以跳过去。如果是手动的进行的安装,并且需要进行一些自定义的配置,那么就要在运行 pbs_mom守护进程前对$(TORQUECFG)/mom_priv /config文件在每一台计算节点上进行配置,例如如下推荐配置:
$pbsserver      headnode          # note: hostname running pbs_server
$logevent       255               # bitmap of which events to log
另外,每一台计算节点上都需要通过 在$(TORQUECFG)/server_name配置文件告诉每一台计算节点谁是pbs_server节点
[Tips]:由于每一台计算节点 上的这个文件都是一样的配置,所以可以在一台机器上编辑好,然后scp到所有的计算节点上 更多计算节点的配置参见这里 。
 
2.6最后的配置

当pbs_server上的所有的配置都弄好了 (server_priv/nodes文件的配置),并且所有的计算节点上的配置也弄好了,就可以在pbs_server这台机器上运行如下命令重启资源 管理器:
$> qterm -t quick
$> sudo pbs_server
并在所有的计算节点上运行:
  $> sudo pbs_mom

[注意:] pbs_server和pbs_mom两个守护进程可以运行在同一台机器上,这样这台机器即是headnode,又是计算节点,互相之间不会干扰。这样可 以多出来一台机器做贡献。


3.Torque资源管理器命令

qterm  -t quick 关闭pbs_server守护进程
qstat -q 确认所有的提交到任务队列的都被正确的配置
   -f 显示目前队列的所有详细信息
   -a “All” 所有的队列信息都会以表格的形式显示在stdout上,其中显示了队列中各任务的状态
   队列的状态信息包括:
      C -  Job is completed after having run/
      E -  Job is exiting after having run.
      H -  Job is held.
      Q -  job is queued, eligible to run or routed.
      R -  job is running.
      T -  job is being moved to new location.
      W -  job is waiting for its execution time(-a option) to be reached.
      S -  (Unicos only) job is suspend.
qdel <jobid>  清楚job队列中id为jobid的任务
qmgr -c 'p s'  查看pbs_server的各种信息
pbsnodes -a  查看所有从节点的运行状态
qsub 提交作业
pbs_sched   运行调度守护进程

[注意:]若该进程没有运行起来,则即使torque成功的分配了资源,提交节点成功的提交了作业,作业也没有办法运 行,通常需要将它同pbs_server同时运行起来
更多torque管理接口命令,请参见clustersource网站介绍。

 

4. 手动配置pbs_server

4.1 pbs_server手动初始化

当pbs_server运行以后,肯定会存在某些 时刻我们需要对pbs_server的运行属性进行修改。 Torque中提供了一个管理接口qmgr,来对pbs_server进行管理和设置。如果需要手动的初始化和配置pbs_server的属性及运行在其 上的queue的属性等,需要手动通过qmgr命令的方式来设置。在一个全新安装的 pbs_server机器上,首先需要运行 pbs_server -t create 命令来初始化,这一步完成以后,需要进行一些基本的配置来构建起基本的queue,并enable任务调度接口,一下是一个最基本的对一个队列进行配置的 命令流程:
pbs_server -t create
qmgr -c "set server scheduling=true"              允许任务调度程序接收job和node的信息,然后根据这些信息进行调度,达到更高的响应性
qmgr -c "create queue batch queue_type=execution"  构建一个queue并制定queue的type,在PBS中,queue的type只能是execution
qmgr -c "set queue batch started=true"
qmgr -c "set queue batch enabled=true"
qmgr -c "set queue batch resources_default.nodes=1"           以下两个选项是可选的,设置默认的node数qmgr -c "set queue batch resources_default.walltime=3600"   指定默认的queue为名叫batch的queue
qmgr -c "set server default_queue=batch"     
[注意:]这些命令需要用Torque管理员来运行的用户来运行。
 

4.2 手动设置node property
 
TORQUE可以通过在各node上关联属性来协助系统识别那些节点是同类型的节点组。这个特点 通常可以帮助我们来协同许多的异构系统。为了识别不同的节点集,可以为每个节点都设置property属性,用这些属性来区分哪些机器属于哪个集合。例 如,有一组性能非常高的机器可以在集群中被定义为“高性能子集群”。Torque可以动态的设置,修改和删除各个节点的properties,也可以通过 手工编辑nodes配置文件来静态的修改。
例如:torque可以动态的通过qmgr命令修改某个节点的属性:
$> qmgr -c "set node node001 properties = bigmem"
$> qmgr -c "set node node001 properties += dualcore"
若要放弃一个属性,可以用“-=”符号
若要通过修改配置文件的方式来静 态的修改节点属性,可以编辑$TORQUEHOME/server_priv/nodes下的nodes文件:
node001 bigmem dualcore
node002 np=4 bigmem matlab
[注意:]这个特点在HOD中可以有很好的作用。比如可以将物理 集群中所有的节点通过properties定义的方式设定几组小的集合,然后在运行 HOD动态的分配集群节点的时候,可以通过HOD命令或者配置文件的方式指定该动态hadoop要运行在哪些子节点集合上。
 
4.3 在torque中动态的增加和删除节点

TORQUE可以通过qmgr命令动态的增加和删除节点,例如,若想动态的增加node003到集 群中,可以:
$> qmgr -c "create node node003"
这个命令将会 在$TORQUE_HOME/server_priv/nodes配置文件中新添加一行
节点也可以使用qmgr命令删除:
$> qmgr -c "delete node node003"
 
4.4 动态的改变node的状态

在物理集群中,如果想 要在运行一个job之前明确的告诉系统不要分配哪个节点,可以用用命令:
 $> pbsnodes -o nodename
来实 现。这样,这个节点就被打上了“不可使用”的标志。调度器就不会将该节点分配为动态集群。若该节点机器某个时刻恢复了正常,就可以使用:
$> pbsnodes -c nodename
来告诉系统这个节点又重新可用了。 同时还可以使用
$> pbsnodes -l   
命令来list所有的节点,并附带有一些很直观的节点信息, 如"active","all","busy","down","free","offline","unknown","up"等等。这样就提供了我们 一种很快捷的方式来查看哪些节点存在问题,哪些节点可用。

 

5.HOD的安装和使用

5.1 HOD安装和使用的前提条件

要使用HOD,你的系统应包含下列的硬件和软件
硬件:
操作系统 : HOD目前在RHEL4上测试通过。
节点:HOD至少需要3个由资源管理器配置的节点
软件:
在使用HOD之前,以下组件必须被 安装到所有节点上:
Torque:资源管理器
Python:HOD要求Python 2.5.1
下列组件是可选的,你可以安装以 获取HOD更好的功能:
Twisted Python:这个可以用来提升HOD的可扩展性。如果检测到这个模块已安装,HOD就用它,否则就使用默认的模块。
Hadoop:HOD能自动 将Hadoop分发到集群的所有节点上。不过,如果Hadoop在所有节点上已经可用,HOD也可以使用已经安装好的Hadoop。HOD目前支持 Hadoop 0.15和其后续版本。
注释: HOD的配置需要以上这些组件的安装位置在集群所有节点上保持一致。如果在提交节点上的安装位置也相同,配置起来会更简单。
 
5.2 安装HOD

现在资源管理器已经安装好了,接着就是下载并安装HOD。跟hadoop一样,HOD的安装只需要将HOD的原始文件拷贝到特 定的目录就可以了。
如果你想从Hadoop tar包中获取HOD,它在'contrib'下的'hod'的根目录下。
如果你从编译源 码,可以在Hadoop根目录下的运行ant tar, 生成Hadoop tar包。然后从获取HOD,参照上面。
把这个目录下的所有文件分发 到集群的所有节点上。注意文件拷贝的位置应在所有节点上保持一致。
[注意:]编译hadoop时会创建HOD,同时会正确地设置所有HOD必须的 脚本文件的权限。并且请一定要注意,HOD的安装目录在集群中每一台机器上都应该是一致的。
 
5.3 配置HOD

为运行 HOD,以下的最小配置是必须要做的:
在你想要运行hod的节点上,编辑<install dir>/conf目录下的hodrc文件。这个文件包含了运行hod所必需的最少量的设置。
为这个配置文件中的定义的变量指定适合你环境 的值。注意,有些变量在文件中出现了不止一次。
${JAVA_HOME}:Hadoop的Java 的 安装位置。Hadoop支持Sun JDK 1.5.x及以上版本。
${CLUSTER_NAME}:集群名称,由'node property'指定,在资源管理器配置中曾提到过。
${HADOOP_HOME}:Hadoop在计算节点和提交节点上的安装位置。
${RM_QUEUE}: 在资源管理器配置中设置的作业提交队列。
${RM_HOME}:资源管理器在计算节点和提交节点的安装位置。
以下环境变量可能需要设置, 取决于你的系统环境。在你运行HOD客户端的地方这些变量必须被定义,也必须在HOD配置文件中通过设定resource_manager.env- vars的值指定。多个变量可指定为用逗号分隔的key=value对组成的列表。
HOD_PYTHON_HOME:如果python安装在计算 节点或提交节点的非默认位置,那么这个值必须设定为python的可执行文件的实际位置。
高级配置
你可以检查和修改其它配置选项来满足你 的特定需要。关于HOD配置的更多信息,请参考配置指 南 

 
5.3.1 配置HOD的conf/hodrc文件

HOD的 conf/hodrc 配置文件中,[resource_manager]的配置段中,batch-home指的是一个目录,要求该目录下有一个bin子目录,而资源管理器的可 执行文件(如pbs_server,pbs_mom,pbs_sched等)都在这个bin目录下能找到。所以通常应为/usr/local,切忌不要把 这个配置选项写成了/usr/local/bin。另外,在hodrc中会有几个特殊的配置项,它们的设置将直接影响到hod的不同的运行效果
${JAVA_HOME}:Hadoop 的Java的安装位置。Hadoop支持Sun JDK 1.5.x及以上版本。
${CLUSTER_NAME}:集群名称,由'node property'指定,在资源管理器配置中曾提到过。在hodrc配置文件中对应cluster配置项。
${HADOOP_HOME}:Hadoop 在计算节点和提交节点上的安装位置。
${RM_QUEUE}:在资源管理器配置中设置的作业提交队列。在hodrc配置文件中对应queue配置 项。
${RM_HOME}:资源管理器在计算节点和提交节点的安装位置。在hodrc配置文件中对应batch-home配置项。
 
5.3.2 HOD动态搭建的hadoop运行环境中使用外部的HDFS

在典型的HOD应用中,通常HDFS和MapReduce都会随着HOD的 hadoop动态的运行,但是这存在一个问题,那就是当HOD的资源被回收后,在这套hadoop系统HDFS中的文件很难再获得了,所以HOD支持将动 态的运行在HOD上的Hadoop中的文件写入到外部已有的HDFS中去。只需要在hodrc配置文件中[gridservice-hdfs]配置段下设 置以下选项:
external = true
host = HDFS NameNode主机名
fs_port = HDFS NameNode端口
info_port = HDFS NameNode web UI的端口
或者也可以用命令的方式来实现:
$ hod allocate -d cluster_dir -n number_of_nodes --gridservice-hdfs.external
如果需要,HOD即可以使用静态HDFS集群也可以静态的Map/Reduce的集群。 这需要设置hodrc中的gridservice-hdfs部分的相同配置项即可。如果申请动态集群时不需要静态的HDFS或者Map/Reduce集 群,只需要在[gridservice-hdfs]和 [gridservice-mapred]下巴external配置项设置成false即可。
 
5.4 运行hod

通过HOD接口动态申请集群的接口通常就是hod,它其实是一个命令行工具,位置在${HOD_HOME}/bin /hod,用来在物理集群中动态的分配小集群,它的命令接口为:
$ hod <operation> [ARGS] [OPTIONS]
目前可用的hod operation包括:allocate,deallocate,info,list,script,help
其中各个operation的含 义为:
Allocate:申请分配动态集群
Deallocate:释放先前申请的集群,以供其他用户使用
Info:查看某个动态 集群的运行信息,包括Namenode,JobTrakcer,动态生成的hadoop-site.xml文件的保存位置等信息
List:列出目 前当前用户申请了几个集群
Script:hod还支持通过脚本的方式来申请动态集群,script表示就是这种操作,需要用户自己提供脚本文件
Help:hod 帮助信息
 
5.4.1 allocate

Allocate operation用来申请分配动态集群,命令接口如下:
$ hod allocate –d <clusterdir> -n <nodecount> -c <config_file> -s <script_file> -t <tarball>
其中的各参数表 示的意思为:
-d:指定一个本地目录,hod会在申请动态集群后在其上面部署一个hadoop运行环境,这个hadoop运行环境的 hadoop-site.xml文件是由 hod生成的,这个目录就是用来保存该hadoop-site.xml的。命令运行前该目录必须存在,hod不会自己创建这个目录
-n: 后面接一个数字,告诉hod要申请多少个节点
-c: 指定hod分配的动态集群的配置文件,就是上面提到的hodrc配置文件,这个文件至关重要,将决定这个动态集群的运行状况
-t:后面接一个 tarball名(在本地文件系统中),这个tarball中包含了一个hadoop,这种方式可以通过tarball的方式将hadoop部署到申请的 动态集群上去,这里 要注意到是:tarball中千万不要包含conf/hadoop-site.xml和conf/hadoop- env.sh,并且尽量不要包含文档和源码,只包含需要的binary file,以提高部署的性能。
 
5.4.2 运行hadoop任务

动态集群allocate以后,hod就会在这个动态集群上部署好hadoop,然后就可以使用这个动态的 hadoop来运行我们自己的hadoop任务,和平时在静态的hadoop集群上的运行方式很相似。运行命令如:
hadoop --config <clusterdir> [OPTIONS]
该命令同一般的hadoop命令几乎一样,只是在hadoop后加 了一个—config <clusterdir>参数,这个参数告诉hadoop使用的是动态集群,并且该动态集群的hadoop-site.xml文件保存 在<clusterdir>目录下,hod会根据这个hadoop-site.xml中的记录在动态集群上run的hadoop上运行 hadoop命令。如要在该动态集群中运行一个wordcount的MapReduce任务,就可以:
又如要将本地文件系统的文件(夹)拷贝到 HDFS上去,可以使用:
$> hadoop –config tmp/cluster dfs –put <local> <hdfs_directory>
可以看出,命令几乎和普通的hadoop命令一样,只是加了—config <somedir>来公司hadoop这个hadoop是运行在hod的动态集群上的。
 
5.4.3 De-allocate cluster

动态集群使用完了以后,就可以通过deallocate操作释放该动态集群,以便其他用户使用。 释放集群的operation是deallocate,方式如下:
$ hod deallocate –d <clusterdir>
只要告诉hod该动态集群的运行hadoop-site.xml文件在哪就可以了。
[注意:]通过 deallocate释放了集群节点以后,只是在hod层面注销了这个动态集群,实际上在Torque中集群节点并没有立刻释放,有一段时间的延迟。
 
5.4.4 Managing clusters

可以通过list和info两个operation来查看动态集群的信息。List是列出了当前用 户申请的动态集群都有哪几个,info是查看某个动态集群的信息。
Example:
可以看到该用户申请了两个动态集群,并且都是处在 alive的状态,在torque队列中的任务号分别是6和5,保存hadoop-site.xml的目录分别在/home/luoli/tmp /second和/home/luoli/tmp/cluster_dir目录下。
又如:
hod info 操作可以用来查看某个动态集群的信息,如HDFS http UI的地址,Mapreduce UI的http地址等。
 
5.4.5 Script. Command

由于通常申请了动态集群,运行完任务之后,常常用户忘记回收集群,造成资源的浪费,前面提到了可以通过 script的方式来让hod工作,这样就可以在script中完成集群的分配,任务的运行,集群的回收等一系列的操作,只要在script中将运行过程 写好就行了,如下script例:
hadoop --config tmp/cluster_dir/   dfs   -put hadoop-0.18.1/javaSrc/ javaSrc
hadoop --config tmp/cluster_dir/   jar   hadoop-0.18.1/hadoop-0.18.1-examples.jar   wordcount   javaSrc   output
hadoop --config   tmp/cluster_dir/   dfs   -get output wc_output
hod deallocate -d   tmp/cluster_dir
然后在hod的命令中通过-s 指定该script文件,如:
$ hod script. -d tmp/cluster_dir/ -n 4 -s script_file
这 样hod就会在运行完自己的job以后自动的回收集群。
 
6.HOD常见问题
 
6.1运行hod命令时出现脚本语法错误
 
在 0.18.1版本中运行hod命令时hod脚本会报一个脚本语法错误
 File "hod", line 556
   finally:

      ^
 SyntaxError: invalid syntax
目前这个问题的解 决 之道是直接将finally这一行给注掉,以后一切运行正常。
 
6.2 -d指定的目录不存在或者没有权限
 
error: /home/luoli/.hod/hodrc not found. Specify the path to the HOD configuration file, or define the environment variable HOD_CONF_DIR under which a file named hodrc can be found.
在运行hod命令时,-d选项紧接的参数应该是一个目录,这个目录会在hod动态分配节点时用来保存临时产生的hadoop- site.xml文件,运行hod命令时这个目录一定要存在,且运行命令的用户一定要在该目录下有写权限。

 

6.3 hodrc文件的配置出现问题

hodrc的配置非常关键,任何一个对方的配置错误都会导致hod运行不正常或者失败。以下几个配置项是非 常重要的几个,需要用户自己手动的修改: ${JAVA_HOME}:Hadoop的Java的安装位置。Hadoop支持Sun JDK 1.5.x及以上版本。
${CLUSTER_NAME}:集群名称,由'node property'指定,在资源管理器配置中曾提到过。在hodrc配置文件中对应cluster配置项
${HADOOP_HOME}:Hadoop 在计算节点和提交节点上的安装位置。
${RM_QUEUE}:在资源管理器配置中设置的作业提交队列。在hodrc配置文件中对应queue配置 项
${RM_HOME}:资源管理器在计算节点和提交节点的安装位置。在hodrc配置文件中对应batch-home配置项
batch- home指的是一个目录,要求该目录下有一个bin子目录,而资源管理器的可执行文件(如 pbs_server,pbs_mom,pbs_sched等)都在这个bin目录下能找到。所以通常应为/usr/local,切忌不要把这个配置选项 写成了/usr/local/bin。
p集群的系 统 。它使用Torque资源管 理器分配节点。它可以在分配的节点上启动 Hadoop Map/Reduce和HDFS的守护进程。它会自动为Hadoop守护进程和客户端生成合适的配置文 件 (hadoop-site.xml)。HOD还可以将Hadoop分发到它分配出来的虚拟Hadoop集群的节点 上。简而言之,HOD使管理员和用户 轻松地快速搭建和 使用hadoop。它也是 Hadoop开发人员和测试人员非常有用的一个工具,他们可以使用HOD共享一个物理集群来测试各自的Hadoop版本。
HOD 依赖资源管理器(RM)来分配节点,这些节点被用来在之上运行hadoop实例。目前,HOD采用的是Torque资源管理器。
 
基本的 HOD系统架构包含的下列组件:

一个资源管理器(可能同时附带一个调度程序scheduler)
各种HOD的组件
Hadoop Map/Reduce和HDFS守护进程
通过与以上组件交互,HOD在给定的集群上供应和维护Hadoop Map/Reduce实例,或者HDFS实例。集群中的节点可看作由两组节点构成:
提交节点(Submit nodes):用户通过HOD客户端在这些节点上申请集群,之后通过Hadoop客户端提交Hadoop作业。
计算节点(Compute nodes):利用资源管理器,HOD组件在这些节点上运行以供应Hadoop守护进程。之后,Hadoop作业在这些节点上运行。

下面 是对申请集群及在之上运行作业所需操作步骤的简要描述。
1.         用户在提交节点上用HOD客户端分配所需数目节点的集群,在上面run一个Hadoop。
2.         HOD客户端利用资源管理器接口(在Torque中是qsub)提交一个被称为RingMaster的HOD进程作为一个资源管理器作业,申请理想数目的 节点。这个作业被提交到资源管理器的中央服 务 器上(在Torque中叫pbs_server)。
3.         在计算节点上,资源管理器的从守护程序(slave ,Torque中的pbs_mom进程)接受并处理中央服务器(Torque 中的 pbs_server)分配的作业。RingMaster进程在其中一个计算节点(Torque中的mother superior)上开始运行。
4.         之后,Ringmaster通过资源管理器的另外一个接口(在Torque中是pbsdsh)在所有分配到的计算节点上运行第二个HOD组件 HodRing,即分布式任务。
5.         HodRing初始化之后会与RingMaster通信获取Hadoop指令,并遵照执行。一旦Hadoop的命令 开始启动,它们会向RingMaster登记,提供关于 守护进程的信息。
6.         Hadoop实例所需的配置文件全部由HOD自己生成,有一些来自于用户在配置文件设置 的选项。
7.         HOD客户端保持和RingMaster的通信,找出JobTracker和HDFS守护进程的位置所在。
以上便是HOD的概述和通过hod接口 申请动态集群的简述,接下来将分别详细介绍其中涉及到的各个组件的搭建和运行细节。
 
2.Torque资源管理器介绍

 

HOD 要实现自己的功能 ,需要依赖一个资源 管理器来为它分配和回收节点,管理各节点上的作业运行的情况,如监控作业的运行,作业队列的运行状态等等,HOD会在资源管理器所分配的节点上运行 Hadoop守护进程和Map-Reduce作业。HOD依赖资源管理器(RM)来分配节点,hadoop实例就运行在这些节点之上。目前,HOD采用的 是RM是Torque资源管理器。Torque是一个开源的资源管理器,来自于Cluster Resources,是一个社区基于PBS项目努力的结晶。它提供对批处理作业和分散的计算节点(Compute nodes)的控制。你可以自由地从此处下载Torque。
Torque相关的文档非常的多,涉及到的组件以及管理和运行手册页相当的多,所有 torque相关的文档可以在这儿的TORQUE Resource Manager一节找到。在这里 可以看到wiki文档。如果想订阅TORQUE的邮件列表或查看问题存档,访问这里 。为了节约大家重新学 习 和掌握Torque的时间,我们在这里 把所掌握的一些关于Torque的经验做一个介绍。
 
2.1 Torque的系统架构

一个torque集群由一个头节点(headnode)和许多个计算节点(compute node)组成,其中头节点上运行了一个pbs_server的守护进程,计算节点上都运行着pbs_mom守护进程。对于job进行提交和管理的客户端 命令可以被安装在任一台机器上(包括没有运行pbs_server和pbs_mom的机器)
头节点还会进行一个调度守护进程(schedule damon),该守护进程会和pbs_server进行通信,以此来决定对资源的使用和任务节点分配的本地策略。在torque的资源分布中包含了一个简 单的fifo调度器和其他的几个更高级的scheduler的源码。目前我们掌握了两种scheduler的使用,一种是torque中默认自带的 pbs_sched任务调度器,它就是上面提到的一个简单的fifo调度器,另一种就是Maui任务调度器,它提供了一些更高级的人物调度算法和策略。 Torque中的任务调度器是可以更换的,也就是说我们可以在某一段时间使用这个任务调度器,然后在另一端时间使用另外一个,而不用停止 pbs_server和各运算节点上的pbs_mom进程,只需要对任务调度器进行相关的配置即可。
[注意:]在使用torque的过程中发现, 如果pbs_sched调度进程没有启动,即使在pbs_server上成功的分配了节点并提交任务,任务也无法正常运行。所以一定要把 pbs_server和pbs_sched同时起来才行。
 
用户通过使用qsub命令来向pbs_server提交任务。当 pbs_server接收到命令后,知会scheduler,若scheduler发现了该job的节点,就会向pbs_server发送节点列表和运行 该job所需的其他资源,pbs_server会向节点列表中的第一个节点发送job,该第一个节点就成了“execution host”或者叫做“Mother Superior”,它将运行之后HOD发送过来的ringmaster进程,job中的其他节点被称作“sister moms”,他们将运行之后HOD发送过来的hodring进程。Torque中的各组件运行情况如下图所示:
 

图2.1 Torque运行框架示意图
 
上图是一个Torque集群的运行示意图,在集群中肯定会有某一台机器上运行了pbs_server守护 进程,它就是这个物理集群中的 headnode(这里 所说的headnode是指对Torque层面而言的,跟hadoop中 的namenode以及datanode无关)。所有要对这个物理集群上进行动态子集群分配的任务,都是由pbs_server来接管。 Pbs_server中通常会初始化一个到多个任务队列(上图中的 queue1,2,3),当外部节点申请到了某个动态子集群后,会向该子集群中提交自己的运算任务,这些任务都是首先提交到pbs_server中的某个 queue中,以供任务调度器来进行调度。因此物理集群中通常还会同时存在着一个任务调度器进程,在这里 是简单 的fifo调度器pbs_sched,这个进程可以运行在集群中的任何一台机器上,但通常是选择将其run在pbs_server的同一台机器上,这样可 以节省网络 带宽。集群中其他的 节点都叫做计算节点(Compute Node),在每个计算节点上都运行了一个pbs_mom守护进程,headnode在分配子集群的时候就是通过和这个pbs_mom进程通信来决定哪台 机器是可分配的,哪台机器当前的运行状况如何等等。
如上如图2.1所示,外部节点通过qsub接口向物理集群中提交一个申请,要求分配4台机器, 该申请被pbs_server接管,并检查物理集群中是否有 4台当前可用的计算节点可供分配,如果有,则分配四台计算节点,然后外部节点就可以向该动态集群提交自己的计算任务,计算任务被提交到 pbs_server的某个任务队列中,供任务调度器进行调度。当计算任务运行完成后,pbs_server负责将这4台计算节点的机器回收,以供以后的 其他人使用。这就是Torque cluster系统的运行概况。
 
2.2安装Torque

Torque的安装有多种方 式,这里 仅介绍最简单的一种,更多的方式可以参见clustersource的网站介绍。
http://clusterresources.com/downloads/torque 上 下载Torque的最新版本
在将要作为“Torque Server”机器上解压并build该torque包,这台机器将会通过在其上运行的pbs_server守护程序来控制和监控所有的计算节点。具体步 骤如下:
   $ tar -xzvf torqueXXX.tar.gz
   $ cd torqueXXX
   $ ./configure
   $ make
   $ make install
[注意:]默认的binary程序安装路径通常会 在/usr/local/bin和/usr/local/sbin下 以上./configure这个步骤中可以加入很多其他自定义的参数,不同参数的含义请参阅:这里 常用的 几个config参数有:
 --enable-docs    默认情况下Torque的是不会安装Torque的manual手册的,使用了这个配置选项后就会安装manual手册了
--with-scp       默认状况下,torque是使用rcp来拷贝文件的,但scp更推荐使用
--enable-syslog 默认状况下,torque是不会使用syslog的,使用该配置选项将syslog打开
    Torque安装中其他的安装后的文件会默认保存在/var/spool/torque目录下,这个目录中保存了Torque运行中所有的关键的配置文 件。
[推荐:]根据这种安装的方式,会将pbs_server,pbs_mom,pbs_sched以及torque中的各种管理接口都安装起 来。但这是我们推荐的方式,因为即使安装了这些组件,也并非一定要运行,可以在某个时刻让这台机器运行pbs_server,也可以在将来的某个时刻运行 pbs_mom 作为计算节点,并且pbs_server的节点同时也可以作为计算节点,而且这种方式可以在将来通过配置的方式来让集群中任何一台机器上都拥有管理整个集 群的接口,非常的方便。若要定制的个性化安装,如只安装torque的客户端或者pbs_mom组件,也是可以的。详情请参见clustersource 的网站。
      
2.3初始化和配置pbs_server

当把torque安装好以后,就需要在头节点上初始化和 配置pbs_server,这个配置至关重要,将会直接影响到pbs_server的运行参数,左右它的运行方式。其中包括对物理集群的管理帐户,操作帐 户,queue的初始化及命名,queue的运行状态,是否是可调度的,默认的queue是哪个,节点的回收时间等等。这些pbs_server的运行参 数都是可以配置的。在pbs_server守护进程运行起来之前,必须要对它进行合理的设置。最简单的方式是在torque包解压出来的根目录中运行命 令:
$> torque.setup <USER>    其中<USER>指的是将要作为torque管理员的用户的用户名
这个脚本将会帮助我们建立一个基本的batch queue,并作了一系列的默认配置,具体的操作如下:
set server perators = <USER>@headnode
set server operators += username@headnode
create queue batch
set queue batch queue_type = Execution
set queue batch started = True
set queue batch enabled = True
set server default_queue = batch
set server resources_default.nodes = 1
set server scheduling = True
如上所示:该默认配置为我们设置了默认的集群管理员的帐户,建立一个queue,命名为 batch,将该queue设置为启动,并enable,然后设置了该queue中的任务都是可执行的等等。通常对pbs_server的配置刚开始的时 候做这些默认的配置就够了,因为在运行的过程中torque提供了管理接口(qmgr,下文将会提到)让我们动态的修改pbs_server的属性。
 
2.4 指定计算节点

以上做的一系列的配置都是只对pbs_server的运行参数进行设置,但是pbs_server要怎么知道都有哪些计算节 点,该跟那些机器通信还不知道,这就需要我们通过配置告诉pbs_server,指定计算节点。为了能让pbs_server能够和所有的计算节点进行通 信,那么pbs_server就必须知道物理集群中都有多少计算节点。这需要在torque的 pbs_server这台机器上的nodes配置文件中指定每一台计算节点。这个文件的位置是在${TORQUECFG}/server_priv /nodes,其中${TORQUECFG}的位置默认是在/var/spool/torque目录下。在这个文件中以每一行一台机器的地址或者机器名的 方式来指定计算节点,例如:
 node6.yourhost.com
 node7.yourhost.com
 node8.yourhost.com
如 果计算节点上有多个处理器,可以指定该机器上的处理器个数,例如:
node6.yourhost.com np=2
node7.yourhost.com np=4
更多关于nodes文件的设置可以参阅这里 。
 
2.5初始化和配置计算节点

在pbs_server这台机器上的配置 完成以后,接下来就可以在各个计算节点上安装和配置计算节点的运行设置(pbs_mom)。如果是使用的torque的自解压包进行的安装,并且默认的对 计算节点的配置可以接受,那么就不需要进行额外的配置,这一节可以跳过去。如果是手动的进行的安装,并且需要进行一些自定义的配置,那么就要在运行 pbs_mom守护进程前对$(TORQUECFG)/mom_priv /config文件在每一台计算节点上进行配置,例如如下推荐配置:
$pbsserver      headnode          # note: hostname running pbs_server
$logevent       255               # bitmap of which events to log
另外,每一台计算节点上都需要通过 在$(TORQUECFG)/server_name配置文件告诉每一台计算节点谁是pbs_server节点
[Tips]:由于每一台计算节点 上的这个文件都是一样的配置,所以可以在一台机器上编辑好,然后scp到所有的计算节点上 更多计算节点的配置参见这里 。
 
2.6最后的配置

当pbs_server上的所有的配置都弄好了 (server_priv/nodes文件的配置),并且所有的计算节点上的配置也弄好了,就可以在pbs_server这台机器上运行如下命令重启资源 管理器:
$> qterm -t quick
$> sudo pbs_server
并在所有的计算节点上运行:
  $> sudo pbs_mom

[注意:] pbs_server和pbs_mom两个守护进程可以运行在同一台机器上,这样这台机器即是headnode,又是计算节点,互相之间不会干扰。这样可 以多出来一台机器做贡献。


3.Torque资源管理器命令

qterm  -t quick 关闭pbs_server守护进程
qstat -q 确认所有的提交到任务队列的都被正确的配置
   -f 显示目前队列的所有详细信息
   -a “All” 所有的队列信息都会以表格的形式显示在stdout上,其中显示了队列中各任务的状态
   队列的状态信息包括:
      C -  Job is completed after having run/
      E -  Job is exiting after having run.
      H -  Job is held.
      Q -  job is queued, eligible to run or routed.
      R -  job is running.
      T -  job is being moved to new location.
      W -  job is waiting for its execution time(-a option) to be reached.
      S -  (Unicos only) job is suspend.
qdel <jobid>  清楚job队列中id为jobid的任务
qmgr -c 'p s'  查看pbs_server的各种信息
pbsnodes -a  查看所有从节点的运行状态
qsub 提交作业
pbs_sched   运行调度守护进程

[注意:]若该进程没有运行起来,则即使torque成功的分配了资源,提交节点成功的提交了作业,作业也没有办法运 行,通常需要将它同pbs_server同时运行起来
更多torque管理接口命令,请参见clustersource网站介绍。

 

4. 手动配置pbs_server

4.1 pbs_server手动初始化

当pbs_server运行以后,肯定会存在某些 时刻我们需要对pbs_server的运行属性进行修改。 Torque中提供了一个管理接口qmgr,来对pbs_server进行管理和设置。如果需要手动的初始化和配置pbs_server的属性及运行在其 上的queue的属性等,需要手动通过qmgr命令的方式来设置。在一个全新安装的 pbs_server机器上,首先需要运行 pbs_server -t create 命令来初始化,这一步完成以后,需要进行一些基本的配置来构建起基本的queue,并enable任务调度接口,一下是一个最基本的对一个队列进行配置的 命令流程:
pbs_server -t create
qmgr -c "set server scheduling=true"              允许任务调度程序接收job和node的信息,然后根据这些信息进行调度,达到更高的响应性
qmgr -c "create queue batch queue_type=execution"  构建一个queue并制定queue的type,在PBS中,queue的type只能是execution
qmgr -c "set queue batch started=true"
qmgr -c "set queue batch enabled=true"
qmgr -c "set queue batch resources_default.nodes=1"           以下两个选项是可选的,设置默认的node数qmgr -c "set queue batch resources_default.walltime=3600"   指定默认的queue为名叫batch的queue
qmgr -c "set server default_queue=batch"     
[注意:]这些命令需要用Torque管理员来运行的用户来运行。
 

4.2 手动设置node property
 
TORQUE可以通过在各node上关联属性来协助系统识别那些节点是同类型的节点组。这个特点 通常可以帮助我们来协同许多的异构系统。为了识别不同的节点集,可以为每个节点都设置property属性,用这些属性来区分哪些机器属于哪个集合。例 如,有一组性能非常高的机器可以在集群中被定义为“高性能子集群”。Torque可以动态的设置,修改和删除各个节点的properties,也可以通过 手工编辑nodes配置文件来静态的修改。
例如:torque可以动态的通过qmgr命令修改某个节点的属性:
$> qmgr -c "set node node001 properties = bigmem"
$> qmgr -c "set node node001 properties += dualcore"
若要放弃一个属性,可以用“-=”符号
若要通过修改配置文件的方式来静 态的修改节点属性,可以编辑$TORQUEHOME/server_priv/nodes下的nodes文件:
node001 bigmem dualcore
node002 np=4 bigmem matlab
[注意:]这个特点在HOD中可以有很好的作用。比如可以将物理 集群中所有的节点通过properties定义的方式设定几组小的集合,然后在运行 HOD动态的分配集群节点的时候,可以通过HOD命令或者配置文件的方式指定该动态hadoop要运行在哪些子节点集合上。
 
4.3 在torque中动态的增加和删除节点

TORQUE可以通过qmgr命令动态的增加和删除节点,例如,若想动态的增加node003到集 群中,可以:
$> qmgr -c "create node node003"
这个命令将会 在$TORQUE_HOME/server_priv/nodes配置文件中新添加一行
节点也可以使用qmgr命令删除:
$> qmgr -c "delete node node003"
 
4.4 动态的改变node的状态

在物理集群中,如果想 要在运行一个job之前明确的告诉系统不要分配哪个节点,可以用用命令:
 $> pbsnodes -o nodename
来实 现。这样,这个节点就被打上了“不可使用”的标志。调度器就不会将该节点分配为动态集群。若该节点机器某个时刻恢复了正常,就可以使用:
$> pbsnodes -c nodename
来告诉系统这个节点又重新可用了。 同时还可以使用
$> pbsnodes -l   
命令来list所有的节点,并附带有一些很直观的节点信息, 如"active","all","busy","down","free","offline","unknown","up"等等。这样就提供了我们 一种很快捷的方式来查看哪些节点存在问题,哪些节点可用。

 

5.HOD的安装和使用

5.1 HOD安装和使用的前提条件

要使用HOD,你的系统应包含下列的硬件和软件
硬件:
操作系统 : HOD目前在RHEL4上测试通过。
节点:HOD至少需要3个由资源管理器配置的节点
软件:
在使用HOD之前,以下组件必须被 安装到所有节点上:
Torque:资源管理器
Python:HOD要求Python 2.5.1
下列组件是可选的,你可以安装以 获取HOD更好的功能:
Twisted Python:这个可以用来提升HOD的可扩展性。如果检测到这个模块已安装,HOD就用它,否则就使用默认的模块。
Hadoop:HOD能自动 将Hadoop分发到集群的所有节点上。不过,如果Hadoop在所有节点上已经可用,HOD也可以使用已经安装好的Hadoop。HOD目前支持 Hadoop 0.15和其后续版本。
注释: HOD的配置需要以上这些组件的安装位置在集群所有节点上保持一致。如果在提交节点上的安装位置也相同,配置起来会更简单。
 
5.2 安装HOD

现在资源管理器已经安装好了,接着就是下载并安装HOD。跟hadoop一样,HOD的安装只需要将HOD的原始文件拷贝到特 定的目录就可以了。
如果你想从Hadoop tar包中获取HOD,它在'contrib'下的'hod'的根目录下。
如果你从编译源 码,可以在Hadoop根目录下的运行ant tar, 生成Hadoop tar包。然后从获取HOD,参照上面。
把这个目录下的所有文件分发 到集群的所有节点上。注意文件拷贝的位置应在所有节点上保持一致。
[注意:]编译hadoop时会创建HOD,同时会正确地设置所有HOD必须的 脚本文件的权限。并且请一定要注意,HOD的安装目录在集群中每一台机器上都应该是一致的。
 
5.3 配置HOD

为运行 HOD,以下的最小配置是必须要做的:
在你想要运行hod的节点上,编辑<install dir>/conf目录下的hodrc文件。这个文件包含了运行hod所必需的最少量的设置。
为这个配置文件中的定义的变量指定适合你环境 的值。注意,有些变量在文件中出现了不止一次。
${JAVA_HOME}:Hadoop的Java 的 安装位置。Hadoop支持Sun JDK 1.5.x及以上版本。
${CLUSTER_NAME}:集群名称,由'node property'指定,在资源管理器配置中曾提到过。
${HADOOP_HOME}:Hadoop在计算节点和提交节点上的安装位置。
${RM_QUEUE}: 在资源管理器配置中设置的作业提交队列。
${RM_HOME}:资源管理器在计算节点和提交节点的安装位置。
以下环境变量可能需要设置, 取决于你的系统环境。在你运行HOD客户端的地方这些变量必须被定义,也必须在HOD配置文件中通过设定resource_manager.env- vars的值指定。多个变量可指定为用逗号分隔的key=value对组成的列表。
HOD_PYTHON_HOME:如果python安装在计算 节点或提交节点的非默认位置,那么这个值必须设定为python的可执行文件的实际位置。
高级配置
你可以检查和修改其它配置选项来满足你 的特定需要。关于HOD配置的更多信息,请参考配置指 南 

 
5.3.1 配置HOD的conf/hodrc文件

HOD的 conf/hodrc 配置文件中,[resource_manager]的配置段中,batch-home指的是一个目录,要求该目录下有一个bin子目录,而资源管理器的可 执行文件(如pbs_server,pbs_mom,pbs_sched等)都在这个bin目录下能找到。所以通常应为/usr/local,切忌不要把 这个配置选项写成了/usr/local/bin。另外,在hodrc中会有几个特殊的配置项,它们的设置将直接影响到hod的不同的运行效果
${JAVA_HOME}:Hadoop 的Java的安装位置。Hadoop支持Sun JDK 1.5.x及以上版本。
${CLUSTER_NAME}:集群名称,由'node property'指定,在资源管理器配置中曾提到过。在hodrc配置文件中对应cluster配置项。
${HADOOP_HOME}:Hadoop 在计算节点和提交节点上的安装位置。
${RM_QUEUE}:在资源管理器配置中设置的作业提交队列。在hodrc配置文件中对应queue配置 项。
${RM_HOME}:资源管理器在计算节点和提交节点的安装位置。在hodrc配置文件中对应batch-home配置项。
 
5.3.2 HOD动态搭建的hadoop运行环境中使用外部的HDFS

在典型的HOD应用中,通常HDFS和MapReduce都会随着HOD的 hadoop动态的运行,但是这存在一个问题,那就是当HOD的资源被回收后,在这套hadoop系统HDFS中的文件很难再获得了,所以HOD支持将动 态的运行在HOD上的Hadoop中的文件写入到外部已有的HDFS中去。只需要在hodrc配置文件中[gridservice-hdfs]配置段下设 置以下选项:
external = true
host = HDFS NameNode主机名
fs_port = HDFS NameNode端口
info_port = HDFS NameNode web UI的端口
或者也可以用命令的方式来实现:
$ hod allocate -d cluster_dir -n number_of_nodes --gridservice-hdfs.external
如果需要,HOD即可以使用静态HDFS集群也可以静态的Map/Reduce的集群。 这需要设置hodrc中的gridservice-hdfs部分的相同配置项即可。如果申请动态集群时不需要静态的HDFS或者Map/Reduce集 群,只需要在[gridservice-hdfs]和 [gridservice-mapred]下巴external配置项设置成false即可。
 
5.4 运行hod

通过HOD接口动态申请集群的接口通常就是hod,它其实是一个命令行工具,位置在${HOD_HOME}/bin /hod,用来在物理集群中动态的分配小集群,它的命令接口为:
$ hod <operation> [ARGS] [OPTIONS]
目前可用的hod operation包括:allocate,deallocate,info,list,script,help
其中各个operation的含 义为:
Allocate:申请分配动态集群
Deallocate:释放先前申请的集群,以供其他用户使用
Info:查看某个动态 集群的运行信息,包括Namenode,JobTrakcer,动态生成的hadoop-site.xml文件的保存位置等信息
List:列出目 前当前用户申请了几个集群
Script:hod还支持通过脚本的方式来申请动态集群,script表示就是这种操作,需要用户自己提供脚本文件
Help:hod 帮助信息
 
5.4.1 allocate

Allocate operation用来申请分配动态集群,命令接口如下:
$ hod allocate –d <clusterdir> -n <nodecount> -c <config_file> -s <script_file> -t <tarball>
其中的各参数表 示的意思为:
-d:指定一个本地目录,hod会在申请动态集群后在其上面部署一个hadoop运行环境,这个hadoop运行环境的 hadoop-site.xml文件是由 hod生成的,这个目录就是用来保存该hadoop-site.xml的。命令运行前该目录必须存在,hod不会自己创建这个目录
-n: 后面接一个数字,告诉hod要申请多少个节点
-c: 指定hod分配的动态集群的配置文件,就是上面提到的hodrc配置文件,这个文件至关重要,将决定这个动态集群的运行状况
-t:后面接一个 tarball名(在本地文件系统中),这个tarball中包含了一个hadoop,这种方式可以通过tarball的方式将hadoop部署到申请的 动态集群上去,这里 要注意到是:tarball中千万不要包含conf/hadoop-site.xml和conf/hadoop- env.sh,并且尽量不要包含文档和源码,只包含需要的binary file,以提高部署的性能。
 
5.4.2 运行hadoop任务

动态集群allocate以后,hod就会在这个动态集群上部署好hadoop,然后就可以使用这个动态的 hadoop来运行我们自己的hadoop任务,和平时在静态的hadoop集群上的运行方式很相似。运行命令如:
hadoop --config <clusterdir> [OPTIONS]
该命令同一般的hadoop命令几乎一样,只是在hadoop后加 了一个—config <clusterdir>参数,这个参数告诉hadoop使用的是动态集群,并且该动态集群的hadoop-site.xml文件保存 在<clusterdir>目录下,hod会根据这个hadoop-site.xml中的记录在动态集群上run的hadoop上运行 hadoop命令。如要在该动态集群中运行一个wordcount的MapReduce任务,就可以:
又如要将本地文件系统的文件(夹)拷贝到 HDFS上去,可以使用:
$> hadoop –config tmp/cluster dfs –put <local> <hdfs_directory>
可以看出,命令几乎和普通的hadoop命令一样,只是加了—config <somedir>来公司hadoop这个hadoop是运行在hod的动态集群上的。
 
5.4.3 De-allocate cluster

动态集群使用完了以后,就可以通过deallocate操作释放该动态集群,以便其他用户使用。 释放集群的operation是deallocate,方式如下:
$ hod deallocate –d <clusterdir>
只要告诉hod该动态集群的运行hadoop-site.xml文件在哪就可以了。
[注意:]通过 deallocate释放了集群节点以后,只是在hod层面注销了这个动态集群,实际上在Torque中集群节点并没有立刻释放,有一段时间的延迟。
 
5.4.4 Managing clusters

可以通过list和info两个operation来查看动态集群的信息。List是列出了当前用 户申请的动态集群都有哪几个,info是查看某个动态集群的信息。
Example:
可以看到该用户申请了两个动态集群,并且都是处在 alive的状态,在torque队列中的任务号分别是6和5,保存hadoop-site.xml的目录分别在/home/luoli/tmp /second和/home/luoli/tmp/cluster_dir目录下。
又如:
hod info 操作可以用来查看某个动态集群的信息,如HDFS http UI的地址,Mapreduce UI的http地址等。
 
5.4.5 Script. Command

由于通常申请了动态集群,运行完任务之后,常常用户忘记回收集群,造成资源的浪费,前面提到了可以通过 script的方式来让hod工作,这样就可以在script中完成集群的分配,任务的运行,集群的回收等一系列的操作,只要在script中将运行过程 写好就行了,如下script例:
hadoop --config tmp/cluster_dir/   dfs   -put hadoop-0.18.1/javaSrc/ javaSrc
hadoop --config tmp/cluster_dir/   jar   hadoop-0.18.1/hadoop-0.18.1-examples.jar   wordcount   javaSrc   output
hadoop --config   tmp/cluster_dir/   dfs   -get output wc_output
hod deallocate -d   tmp/cluster_dir
然后在hod的命令中通过-s 指定该script文件,如:
$ hod script. -d tmp/cluster_dir/ -n 4 -s script_file
这 样hod就会在运行完自己的job以后自动的回收集群。
 
6.HOD常见问题
 
6.1运行hod命令时出现脚本语法错误
 
在 0.18.1版本中运行hod命令时hod脚本会报一个脚本语法错误
 File "hod", line 556
   finally:

      ^
 SyntaxError: invalid syntax
目前这个问题的解 决 之道是直接将finally这一行给注掉,以后一切运行正常。
 
6.2 -d指定的目录不存在或者没有权限
 
error: /home/luoli/.hod/hodrc not found. Specify the path to the HOD configuration file, or define the environment variable HOD_CONF_DIR under which a file named hodrc can be found.
在运行hod命令时,-d选项紧接的参数应该是一个目录,这个目录会在hod动态分配节点时用来保存临时产生的hadoop- site.xml文件,运行hod命令时这个目录一定要存在,且运行命令的用户一定要在该目录下有写权限。

 

6.3 hodrc文件的配置出现问题

hodrc的配置非常关键,任何一个对方的配置错误都会导致hod运行不正常或者失败。以下几个配置项是非 常重要的几个,需要用户自己手动的修改: ${JAVA_HOME}:Hadoop的Java的安装位置。Hadoop支持Sun JDK 1.5.x及以上版本。
${CLUSTER_NAME}:集群名称,由'node property'指定,在资源管理器配置中曾提到过。在hodrc配置文件中对应cluster配置项
${HADOOP_HOME}:Hadoop 在计算节点和提交节点上的安装位置。
${RM_QUEUE}:在资源管理器配置中设置的作业提交队列。在hodrc配置文件中对应queue配置 项
${RM_HOME}:资源管理器在计算节点和提交节点的安装位置。在hodrc配置文件中对应batch-home配置项

batch- home指的是一个目录,要求该目录下有一个bin子目录,而资源管理器的可执行文件(如 pbs_server,pbs_mom,pbs_sched等)都在这个bin目录下能找到。所以通常应为/usr/local,切忌不要把这个配置选项 写成了/usr/local/bin。

http://blog.csdn.net/clouderyu/article/details/6646546


Torque + Maui配置手册之抛砖引玉篇

    本文将以应用于实际案例(南航理学院、复旦大学物理系、宁波气象局)中的作业调度系统为例,简单介绍一下免费开源又好用的Torque+Maui如何在曙光服务器上进行安装和配置,以及针对用户特定需求的常用调度策略的设定情况,以便可以起到抛砖引玉的作用,使更多的人关注MAUI这个功能强大的集群调度器(后期将推出SGE+MAUI版本)。本文中的涉及的软件版本Torque 版本: 2.1.7  maui版本:3.2.6p17。

1.   集群资源管理器Torque

1.1.   从源代码安装Torque

其中pbs_server安装在node33上,TORQUE有两个主要的可执行文件,一个是主节点上的pbs_server,一个是计算节点上的pbs_mom,机群中每一个计算节点(node1~node16)都有一个pbs_mom负责与pbs_server通信,告诉pbs_server该节点上的可用资源数以及作业的状态。机群的NFS共享存储位置为/home,所有用户目录都在该目录下。

1.1.1.     解压源文件包

在共享目录下解压缩torque

# tar -zxftorque-2.1.17.tar.gz

假设解压的文件夹名字为: /home/dawning/torque-2.1.7

1.1.2.     编译设置

#./configure  --enable-docs --with-scp --enable-syslog

其中,

默认情况下,TORQUE将可执行文件安装在/usr/local/bin和/usr/local/sbin下。其余的配置文件将安装在/var/spool/torque下

默认情况下,TORQUE不安装管理员手册,这里指定要安装。

默认情况下,TORQUE使用rcp来copy数据文件,官方强烈推荐使用scp,所以这里设定--with-scp.

默认情况下,TORQUE不允许使用syslog,我们这里使用syslog。

1.1.3.     编译安装

# make

# make install

 

Server端安装设置:

在torque的安装源文件根目录中,执行

#./torque.setup root

以root作为torque的管理员账号创建作业队列。

 

计算节点(Client端)的安装:

由于计算节点节点系统相同,因而可以用如下SHELL script (脚本名字为torque.install.sh)在其余计算节点上安装:

创建torque.install.sh脚本

#vi torque.install.sh

#!/bin/sh

cd /home/dawning/torque-2.1.7

make install

使用如下命令:npssh -onnode1..32  sh/home/dawning/torque.install.sh  将在每个节点上安装TORQUE。

 

1.1.4.      TORQUE配置

1.1.4.1 在计算节点上配置TORQUE:

在每个计算节点,必须配置MOMdaemon信任pbs_serverdaemon,可以通过编辑/var/spool/torque/server_name来实现,把node33写入该文件即可。

#cat /var/spool/torque/server_name

node33

其余的配置参数写入/var/spool/torque/mom_priv/config文件。

 

配置计算节点的数据管理,数据管理允许作业的数据在计算节点和PBS_Server之间传递。对于共享文件系统,如NFS,可以通过在mom_priv/config中用$usecp参数来指定如何映射用户的根目录。

$usecp *:/home /home

 

这里集群的mom_priv/config内容如下:

# MOM server configuration file

# if more than one value, separate

## rule is defined by the name

 

## host allowed to connect to mom server onprivileged port

# note: IP address of host runningpbs_server it by comma.

$pbsserver      10.0.68.33

$clienthost      node33

#ideal processor load and max processorload

$ideal_load 7

$max_load 8

## host allowed to connect to Mom server onunprivileged port

#Specifies hosts which can be trusted toaccess mom services as non-root.

#By default, no hosts are trusted to accessmom services as non-root.

$restricted *.node33

## Log event :

# 0x1ff : log all events + debug events

# 0x0ff : just all events

$logevent 0x0ff

## alarm if the script hang or take verylong time to execute

$prologalarm 30

## Specifies which directories should bestaged

$usecp *:/home /home

 

Server端资源管理配置

指定计算节点

为了让pbs_server与每个计算节点进行通信,它需要知道要和那些机器联络,集群中的每个计算节点都必须在nodes文件中指定,一个1行。

#rsh node33

#cd/var/spool/torque/server_priv

#for i in `seq 1 32`;do echo node$inp=2;done > nodes

#catnodes

node1 np=8

node2 np=8

node3 np=8

node4 np=8

node5 np=8

node6 np=8

node7 np=8

node8 np=8

node9 np=8

node10 np=8

node11 np=8

node12 np=8

node13 np=8

node14 np=8

node15 np=8

node16 np=8

node17 np=8

node18 np=8

node19 np=8

node20 np=8

node21 np=8

node22 np=8

node23 np=8

node24 np=8

node25 np=8

node26 np=8

node27 np=8

node28 np=8

node29 np=8

node30 np=8

node31 np=8

node32 np=8

np=8是说每个节点有8个CPU(其余的以线程来跑)。

 

指定作业的提交节点为node33,node34,node35:

[root@node33 ~]# qmgr-c 'set server submit_hosts = node33'

[root@node33 ~]# qmgr-c 'set server submit_hosts += node34'

[root@node33 ~]# qmgr-c 'set server submit_hosts += node35'

 

1.1.5.     系统自动启动脚本

1.        Server的系统启动脚本/etc/init.d/pbs_server

该脚本单独启动/重新启动/暂停/查看状态TORQUE中Server的守护进程

#cp contrib/init.d/pbs_server /etc/init.d/

编辑pbs_server:

#vi /etc/init.d/pbs_server

PBS_DAEMON=/usr/local/sbin/pbs_server

PBS_HOME=/var/spool/torque

要确保这两个变量设定正确。

 

2.        Mom系统启动脚本/etc/init.d/pbs_mom,在计算节点执行。

该脚本单独启动/重新启动/暂停/查看状态TORQUE中Mom的守护进程。

#cp contrib/init.d/pbs_mom /etc/init.d/

#vi /etc/init.d/pbs_mom

PBS_DAEMON=/usr/local/sbin/pbs_mom

PBS_HOME=/var/spool/torque

 

PBS_SERVER端测试:

重启pbs_server,使刚才的配置生效。

>/etc/init.d/pbs_server restart

# verify allqueues are properly configured

> qstat -q

# viewadditional server configuration

> qmgr -c 'p s'

# verify allnodes are correctly reporting

>pbsnodes -a

# submit a basicjob - DO NOT RUN AS ROOT

> su -testuser

>qstat

 

2.   调度器系统MAUI的安装配置

2.1.1.      在共享目录下解压缩MAUI

# tar -zxf maui-3.2.6p17.tar.gz

假设解压的文件夹名字为: /home/dawning/maui-3.2.6p17

 

2.1.2.      编译

要是MAUI和TORQUE无缝的结合在一起,确保管理节点(PBS SERVER)上TORQUE的路径设置正确,

#./configure --with-pbs=/usr/local

#make

#make install

 

2.1.3.      MAUI自启动脚本

[root@node33maui-3.2.6p17]# cp etc/maui.d /etc/init.d/

[root@node33maui-3.2.6p17]# vi /etc/init.d/maui.d

#!/bin/sh

#

# maui  Thisscript will start and stop the MAUI Scheduler

#

# chkconfig: 345 85 85

# description: maui

#

ulimit -n 32768

# Source the library functions

. /etc/rc.d/init.d/functions

 

MAUI_PREFIX=/usr/local/maui

 

# let see how we were called

case "$1" in

        start)

               echo -n "Starting MAUI Scheduler: "

               daemon $MAUI_PREFIX/sbin/maui

               echo

               ;;

        stop)

               echo -n "Shutting down MAUI Scheduler: "

               killproc maui

               echo

               ;;

        status)

               status maui

               ;;

       restart)

               $0 stop

               $0 start

               ;;

        *)

               echo "Usage: maui {start|stop|restart|status}"

                exit 1

esac

 

 

2.1.4.      与MAUI结合的node33上TORQUE设置

在TORQUE的qmgr上

[root@node33maui-3.2.6p18]# qmgr

Max openservers: 4

Qmgr: set server managers += root@*.node33

Qmgr: set server operators += root@*.node33

Qmgr: set server scheduling=True

Qmgr: quit

要确保set server scheduling=True这条,这条语句确保了可以使用MAUI调度。

 

其它设置:

TORQUE默认作业的最大运行时间为3600s(1个小时),需要根据实际情况进行修改:设定作业运行所需时间资源不超过7天:

qmgr -c "set queue batchresources_default.walltime=604800"

qmgr –c “set server query_other_jobs=TRUE”

确保每个非管理员帐户可以查看其它帐户的作业信息。

 

2.1.5.      MAUI配置文件

[root@node33  ~]vi /usr/local/maui/maui.cfg

 

# maui.cfg3.2.6p17

#edited by dolphin=============

#SERVERHOST           node33

SCHEDCFG[0] SERVER=node33:42559 MODE=NORMAL

#================end============================

 

# primary adminmust be first in list

ADMIN1                root

 

# ResourceManager Definition

 

#======edited by dolphin

#RMCFG[NODE33] TYPE=PBS@RMNMHOST@

RMCFG[0] TYPE=PBS HOST=node33

#==================end==========================

 

# AllocationManager Definition

 

AMCFG[bank]  TYPE=NONE

 

# full parameterdocs at http://supercluster.org/mauidocs/a.fparameters.html

# use the'schedctl -l' command to display current configuration

 

RMPOLLINTERVAL        00:00:30

 

SERVERPORT            42559

SERVERMODE            NORMAL

 

# Admin:http://supercluster.org/mauidocs/a.esecurity.html

 

 

LOGFILE               maui.log

LOGFILEMAXSIZE        10000000

LOGLEVEL              3

 

# Job Priority:http://supercluster.org/mauidocs/5.1jobprioritization.html

 

QUEUETIMEWEIGHT       1

 

# FairShare: http://supercluster.org/mauidocs/6.3fairshare.html

 

#FSPOLICY              PSDEDICATED

#FSDEPTH               7

#FSINTERVAL            86400

#FSDECAY               0.80

 

# ThrottlingPolicies: http://supercluster.org/mauidocs/6.2throttlingpolicies.html

 

# NONE SPECIFIED

# Add by dolphin =======================================

#JOBNODEMATCHPOLICY EXACTNODE

#NODEACCESSPOLICY SINGLEUSER

JOBNODEMATCHPOLICY   EXACTNODE

NODEACCESSPOLICY     SHARED

#NODECFG[DEFAULT] PRIORITYF='-JOBCOUNT'

ENABLEMUITINODEJOBS     TRUE

ENABLEMULTIREQJOBS     TRUE

# ended ================================================

 

# Backfill:http://supercluster.org/mauidocs/8.2backfill.html

 

BACKFILLPOLICY        FIRSTFIT

RESERVATIONPOLICY     CURRENTHIGHEST

 

# NodeAllocation: http://supercluster.org/mauidocs/5.2nodeallocation.html

 

# Add by dolphin =======================================

NODEALLOCATIONPOLICY FIRSTAVAILABLE

#NODEALLOCATIONPOLICY   PRIORITY

# ended ================================================

#NODEALLOCATIONPOLICY  MINRESOURCE

 

# QOS:http://supercluster.org/mauidocs/7.3qos.html

 

#QOSCFG[hi]  PRIORITY=100 XFTARGET=100FLAGS=PREEMPTOR:IGNMAXJOB

# QOSCFG[low]PRIORITY=-1000 FLAGS=PREEMPTEE

 

# StandingReservations: http://supercluster.org/mauidocs/7.1.3standingreservations.html

 

#SRSTARTTIME[test] 8:00:00

#SRENDTIME[test]   17:00:00

#SRDAYS[test]      MON TUE WED THU FRI

#SRTASKCOUNT[test] 20

#SRMAXTIME[test]   0:30:00

 

# Creds: http://supercluster.org/mauidocs/6.1fairnessoverview.html

 

    USERCFG[DEFAULT]      MAXJOB=2 MAXNODE=3

    USERCFG[nano]      MAXJOB=64 MAXNODE=16

##这里指定默认的每个帐户最大可以运行2job,每个job所申请的节点总数不能超##3个。而nano帐户在另外做限制,可以用16个节点,最大可以运行64个作业。

 

#USERCFG[DEFAULT]      FSTARGET=25.0

#USERCFG[john]         PRIORITY=100  FSTARGET=10.0-

#GROUPCFG[staff]       PRIORITY=1000QLIST=hi:low QDEF=hi

#CLASSCFG[batch]       FLAGS=PREEMPTEE

#CLASSCFG[interactive] FLAGS=PREEMPTOR

 

红色标记出来的是需要修改并已经修改过的地方,关于MAUI各个配置参数的意义,请查看

http://www.clusterresources.com/products/maui/docs/a.fparameters.shtml

好了,至此,你可以把MAUI服务起来了。/etc/init.d/maui.dstart

 

然后提交作业echo “sleep 2” | qsub 查看是不是正常。

    注意事项:TORQUE的pbs_sched不要启动,因为我们要使用MAUI作为调度器。

 

 

 

关于TORQUE更详细的信息,请参考:

http://www.clusterresources.com/torquedocs21/

和 

http://www.clusterresources.com/wiki/doku.php?id=torque:appendix:l_torque_quickstart_guide

 

关于MAUI更详细的信息请参考:

http://www.clusterresources.com/products/maui/docs/mauiusers.shtml 以及

http://www.clusterresources.com/products/maui/docs/mauiadmin.shtml

http://www.dcsc.sdu.dk/docs/maui/mauidocs.html

 

关于MAUI和TORQUE的集成,请参考:

http://www.clusterresources.com/products/maui/docs/pbsintegration.shtml


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值