本文主要说明如何使用一个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非常有意思。
浏览次数:55538 次