osg(osg中文社区)-osgEarth-osgViewer-基于OpenGL-开源三维渲染引擎-图形引擎-虚拟仿真工具-osg教程-osg仿真

VPB使用集群构建示例

当前位置:首页 > 学习支持 > 其他帮助 > VPB工具

本文主要说明如何使用一个8台机器的集群使用VPB对大地形进行构建。当然VPB的使用还远不只此。

本文使用 OpenSceneGraph (rev 8413) 和 VirtualPlanetBuilder (rev 914)在2008年时完成。


配置需求

这个部分描述了计算机的配置需求,以满足从集群运行 VirtualPlanetBuilder.


没有密码的SSH

VPB默认的情况下使用ssh去执行osgdem,因此需要事先安装ssh并且将其密码清空,vpbmaster会去使用ssh登录各个集群结点,然后执行命令。

如果安装完成,可以使用如下命令来试一下能否使用ssh不用密码登录到其中一个结点:

jpd@rootnode:~$ ssh node01
Linux node01 2.6.24 #1 SMP Wed Jul 9 16:58:57 SAST 2008 i686
Last login: Sat Jul 19 11:52:59 2008 from rootnode
jpd@node01:~$


X SERVER ON NODES

当osgdem在节点上执行时,它会试图打开一个窗口在display:0.0。一个XServer必须已经在node上运行(大多数的Linux第一台服务器默认为0.0),所有的节点都必须安装有英伟达的显卡,且安装了169.12驱动。

可以测试一下是否OK:

jpd@rootnode:~$ ssh node01 "export DISPLAY=:0.0 ; xeyes"

xeyes程序应该会在node01的X Server上运行。


数据目录

All nodes that will participate in the terrain building need to have access to the input data (readable) as well as access to a directory to store the output files (writable). In this example I will assume that a directory called "/glusterfs" is visible from all machines and is writable.

所有的节点都必须对数据存放的目录有读写权限,以及对要输出的目录也有读写权限。假设我的数据目录名为“/glusterfs”,必须要确保这个目录对所有结点都是可读可写。

jpd@rootnode:~$ ls /glusterfs
jpd@rootnode:~$ ssh node05 "ls /glusterfs"


VPB Setup

数据重投影

VPB使用的数据最好是拥有同样的投影和大地坐标系,因此在使用之前可以使用gdal_translate对数据进行重投影,这样后续VPB在使用时就会比较方便。

在本例中,我使用WGS84投影,所有的文件都转成GeoTiff格式,下面的命令展示了我如何将从这里下载的数据进行转换的:

gdal_translate -of GTiff -a_srs "+proj=latlong +datum=WGS84" -a_ullr -180 90 -90   0 world.topo.bathy.200407.3x21600x21600.A1.jpg A1.tif
gdal_translate -of GTiff -a_srs "+proj=latlong +datum=WGS84" -a_ullr -90  90   0   0 world.topo.bathy.200407.3x21600x21600.B1.jpg B1.tif
gdal_translate -of GTiff -a_srs "+proj=latlong +datum=WGS84" -a_ullr   0  90  90   0 world.topo.bathy.200407.3x21600x21600.C1.jpg C1.tif
gdal_translate -of GTiff -a_srs "+proj=latlong +datum=WGS84" -a_ullr  90  90 180   0 world.topo.bathy.200407.3x21600x21600.D1.jpg D1.tif
gdal_translate -of GTiff -a_srs "+proj=latlong +datum=WGS84" -a_ullr -180  0 -90 -90 world.topo.bathy.200407.3x21600x21600.A2.jpg A2.tif
gdal_translate -of GTiff -a_srs "+proj=latlong +datum=WGS84" -a_ullr  -90  0   0 -90 world.topo.bathy.200407.3x21600x21600.B2.jpg B2.tif
gdal_translate -of GTiff -a_srs "+proj=latlong +datum=WGS84" -a_ullr    0  0  90 -90 world.topo.bathy.200407.3x21600x21600.C2.jpg C2.tif
gdal_translate -of GTiff -a_srs "+proj=latlong +datum=WGS84" -a_ullr   90  0 180 -90 world.topo.bathy.200407.3x21600x21600.D2.jpg D2.tif

如果已经包含了投影数据,那么下面的命令就可以运行:

gdalwarp -t_srs "+proj=latlong +datum=WGS84" -r bilinear $name ../reprojected/$newname

我经常把重投影的数据根据不同的层次放在不同的文件夹,比如BMNG的tif文件我放在 "/glusterfs/BMNG".


集群配置文件

VirtualPlanetBuilder 使用一个配置文件来表示集群里的机器列表,下面是文件的示例: machinepool.txt.

Machine {
hostname node01
processes 1
}
Machine {
hostname node02
processes 1
}
Machine {
hostname node03
processes 1
}
Machine {
hostname node04
processes 1
}
Machine {
hostname node05
processes 1
}
Machine {
hostname node06
processes 1
}
Machine {
hostname node07
processes 1
}
Machine {
hostname node08
processes 1
}

注意这里的hostname必须都是使用 ssh可以登录的。如果你的机器性能够好,可以尝试将processes数目增加。


命令行

下面是本文使用的命令行 注意要把//注释去掉):

vpbmaster --machines machinepool.txt                // 集群配置描述文件
         --geocentric                              // 生成的会是球形的地形,有弧度的
         -d /glusterfs/DTED                        // 高程数据文件夹
         --layer 0 -t /glusterfs/BMNG              // 第0层,我使用BMNG数据
         --layer 0 -t /glusterfs/SPOT_reproj       // 影像数据
         --layer 1 -t /glusterfs/Maps_reproj       // 第一层使用1:50000的数据
         --terrain --compressed                    // 使用地形新格式,压缩纹理
         -o spot_maps/terrain.ive                  // 设置输出文件

命令虽然是从master node发出的,在所有的子结点都可以看到:

jpd@rootnode:~$ cd /glusterfs/generate

vpbmaster产生了 473 任务,在50小时的处理后,产生了1.5million个数据,共487GB。

下面的输出的文件信息:

End of run: tasksPending=0 taskCompleted=473 taskRunning=0 tasksFailed=0
MachinePool::reportTimingStats()
   Machine : node01
       Task::type=''   minTime=616.267390      maxTime=5068.351865     averageTime=2751.044383 totalComputeTime=181568.929248  numTasks=66
   Machine : node02
       Task::type=''   minTime=761.555931      maxTime=25294.378808    averageTime=4027.837882 totalComputeTime=181252.704694  numTasks=45
   Machine : node03
       Task::type=''   minTime=702.828047      maxTime=4933.171209     averageTime=2936.182243 totalComputeTime=179107.116819  numTasks=61
   Machine : node04
       Task::type=''   minTime=605.509313      maxTime=5256.497770     averageTime=2794.609616 totalComputeTime=178855.015440  numTasks=64
   Machine : node05
       Task::type=''   minTime=704.703147      maxTime=5562.438701     averageTime=3005.987053 totalComputeTime=180359.223195  numTasks=60
   Machine : node06
       Task::type=''   minTime=658.961472      maxTime=10080.521703    averageTime=3329.892155 totalComputeTime=179814.176365  numTasks=54
   Machine : node07
       Task::type=''   minTime=702.050721      maxTime=5662.709409     averageTime=3052.297707 totalComputeTime=180085.564685  numTasks=59
   Machine : node08
       Task::type=''   minTime=703.251535      maxTime=5755.713908     averageTime=2803.070356 totalComputeTime=179396.502756  numTasks=64
Finished run successfully.
Total elapsed time = 181923.496816


集群慨述

本例使用了九个机器,使用千兆以太网连接。主结点包含了所有的应用程序,其它8个结点使用NFS做为根文件系统,通过网络来启动程序且都拥有NVIDIA6系列的显卡。所有的机器都是Debian系统,使用相同的NFS挂载,所有的客户机都安装相同的软件。

8个客户端都各有一个500G的磁盘,磁盘经过GlusterFS软件将其汇成一个4TB的空间,在所有的子结点上挂载该盘,都可以看到一个名为data.cal的文件。


Misc Tips

使用 GNU screen 来运行 vpbmaster 命令,然后监控每个机器上的进程,输出,以便后面观察。

Sun Grid Engine 可以同时重投影几百文件无压力,只需要使用find -exec和一个小的脚本文件就可以了。

在ssh在所有节点安装后,再装个dsh就可以在所有的机器上执行相同的命令,比如这样:

dsh -a "ls /glusterfs"

在GNU/Linux 使用OpenSceneGraph非常有意思。