集群服务器

阅读(9725) 标签: 服务器, 并行计算,

并行计算可以分为单机使用的多线程计算,以及在多台计算机构成的集群系统中使用的集群计算,我们在这里将了解集算器中集群服务器的使用及配置,并在此基础上初步认识集群计算。

集算器中的集群服务器

集群计算时,集群体系通常由多个分机(sub node构成,指挥分机工作的进程称为主机(main node,分机运行时,可以接收计算请求,并计算本地的网格文件,将计算结果返回到主机。在集群网络中,分机可以在多台不同的计算机中运行,也可在同一台机器上运行多个分机,分机以IP地址和端口号标识。在集群系统中,一次计算事务称为任务;每个任务由一个或者多个作业(task构成,这些作业由主机分配给各个分机执行,每个分机可以同时执行多个作业。所有运行中的分机,共同构成并行计算的集群系统。

集算器提供了服务器类com.scudata.ide.spl.ServerConsole,可以根据配置文件获取地址和端口,启动集群服务器。

在集算器并行体系下没有中心并行管理器,每次执行时临时指定可使用的机器

在每个集群计算任务中都有逻辑中心,主机向分机发出任务,并回收结果以归并。在执行过程中,如果主机发生错误则任务将会失败;如果分机发生错误,多数情况下会造成计算失败;但在特定条件下主机会重新分配这个子任务,寻找另一个可以的分机来执行。如果想详细了解集算器中并行任务的执行情况,请阅读集群

数据也可以存放在可被分机访问到的网络文件系统中(Network File System),比如HDFS。由NFS管理冗余数据以确保容错能力,比使用分机更简单些,但与分机本地文件读取的机制相比,采用NFS存储数据时会由于网络传输造成性能损失。

集群服务器配置

在集算器安装目录的esProc\bin路径下,可以找到esprocs.exe文件,可以直接运行它来启动或配置集群服务器。使用esprocs时,会自动在安装路径下加载所需的jar包,但是需要注意此时使用的配置文件raqsoftConfig.xmlunitServer.xml必须放置在集算器安装目录的esProc\config路径下。运行后,打开窗口如下:

esprocs.exe执行时,窗口中会显示加载初始设定的信息,这些设定实际上是由配置文件raqsoftConfig.xml决定的。在右侧的菜单栏中点击Options,可以配置集群服务器的相关信息,点击后弹出服务器配置窗口如下,修改其中的主路径:

在页面中,可以配置主路径、寻址路径、日期时间格式、默认字符编码、日志等级、文件缓存区字节数等信息。其中,日志级别Log level可为OFF, SEVERE, WARNING, INFO, DEBUG等,优先级依次降低,若为OFF则不输出任何日志信息;若为INFO,则只输出SEVERE,WARNING,INFO等各级别的信息,依次类推。

这里的配置信息,实际上和集算器IDE中的对应配置是同步的,这些信息,也可以在菜单栏中点击Tool>Options,在选项设定的Environment页面中查看或修改:

在集算器ide端退出或者集群服务器中修改配置时,都会将当前使用或者修改的配置参数存储到raqsoftConfig.xml,如果需要修改时要注意冲突。

 

下面我们继续来了解集群服务器的配置,在右侧的菜单栏中点击Config,可以配置分机的相关信息,点击后在Node页面中可以配置分机信息,如下:

 

Temp file timeout设定临时文件的生命周期小时数;Check interval必须设定为正值或0,为检查过期的间隔秒数;Proxy timeout为代理生命周期,即远程游标、任务空间的生命小时数。如果Temp file timeout或者Proxy timeout设定为0,则不检查过期。

分机列表Host list中,可以配置本机上所有可能用来运行服务器的分机,配置它们的IP地址和端口Port。服务器启动时,会自动在分机列表中,寻找有空闲的分机执行任务。需要注意的是,IP地址需要是本机的真实IP,在使用多网卡的情况下可以设定多个IP。通过选中Auto start server可以使集群服务器在运行后自动启动,而无需手动操作。

分机配置中,Max task number是该分机允许执行的最大作业数。对于同一个IP地址,可以设置不同的分机用来使用不同分区的数据。

集群服务器的Enable clients页面中可以设定客户端白名单,如下:

 

选定Check clients后,可以在Clients hosts列表中,设定允许调用集群服务器的IP地址白名单,不在设定范围中的IP地址将无法调用集群服务器执行计算。

集群服务器设定完成后,点击OK,此时可以自动设定对应的配置文件unitServer.xml如下:

<?xml version="1.0" encoding="UTF-8"?>

<SERVER Version="3">

<TempTimeOut>12</TempTimeOut>

<Interval>6</Interval>

<ProxyTimeOut>12</ProxyTimeOut>

<Hosts>

<Host ip="192.168.1.112" port="8281" maxTaskNum="3" preferredTaskNum="4">

</Host>

</Hosts>

<EnabledClients check="true">

<Host start="192.168.1.112">

</Host>

</EnabledClients>

</SERVER>

运行集群服务器

集群服务器配置完成后,在分机运行窗口中,点击Start即可开始运行集群服务器,需要停止服务可以点击Stop,服务器停止后可以点击Quit退出。如果点击Reset,服务将初始化重新启动,清除所有的全局变量以及内存区。

可以发现,在分机启动时,会从设定中的分机列表中,选取未启动的分机启动,在窗口中可以查看分机的执行信息。

Linux系统中,可以运行ServerConsole.sh来启动集群服务器类:

打开的分机运行窗口和在Windows下是相同的:

此外,还可以在执行命令时添加-p参数,非图形启动集群服务器,此时集群服务器将直接执行:

 

集群服务器的使用

当集群服务器已经开始工作后,就可以在网格中通过callx命令分配计算任务到各个服务器了。如下面的网格parallel01.splx

 

A

1

=file("PersonnelInfo.txt")

2

=A1.import@t(;pPart:pAll)

3

=A2.select(State==pState)

4

return A3

这个网格中的代码,从人员信息文件PersonnelInfo.txt中,读取一部分数据,并从中选出指定州的员工数据。其中用到的网格参数如下:

在主程序中,使用集群并发计算调用parallel01.splx,来计算全部Ohio州的员工:

 

A

1

[192.168.1.112:8281]

2

=callx("D:/files/spl/parallel01.splx","OH",to(20),20;A1)

3

=A2.conj()

其中,A1指定计算时调用的并发服务器列表,A2中用callx调用这些服务器来执行并发计算。计算后,A2中的结果如下:

可见,在使用集群服务器时,一个任务会根据参数的数量拆分为多个作业,交由集群服务器去执行。而每个分机又会将作业分配给各个进程去处理,每个进程都会返回一个结果,A2中的数据是就是每个结果排列构成的序列。在A3中将结果合并后,如下:

通过这种方法,主程序可以把复杂运算或者大数据量的运算,拆分成多个小任务,交由多个集群服务器分别计算,并在主程序中整合结果。关于集群计算的详细讲解,将在计算 中继续。