赞
踩
您是一位软件开发人员,正在努力地把公司的应用程序移植到一个崭新的分布式环境中。您的组织已经为网格计算这一令人兴奋的新领域 提供了一些资源,但是您却不知道接下来应该做些什么。最终期限很快就要到了,惶恐的气氛逐渐在您的团队中蔓延开来。您需要做的事情是制定一个快速路线图, 将组织的应用程序部署或移植到计算或数据网格中。Globus 一直以来都在致力于提供有关 Globus Toolkit V4.0(GT4)的文档,但您现在需要的是开发文档。Globus 正在创建一些开发文档 Web 站点来解决这个问题。同时,在本文中,我们给出了一些资源管理领域中的开发技巧,目的在于帮助您使用 Web services Grid Resource Allocation and Management(WS-GRAM)服务快速启用网格应用程序。
|
Globus GRAM 服务为多种类型的作业调度程序提供了安全提交作业的功能。为支持 XML 加密和签名,WS-GRAM 彻底重新进行了构建。它使用数字证书在客户机和服务器之间发送安全的 XML SOAP 消息。实际上,GT4 就是一个安全 Web 服务容器。它与传统容器之间的区别就是在于可跨多个 SOAP(Simple Object Access Protocol)消息(也称为 WSRF)维护状态。
下面的技巧展示了如何创建一个自定义 Java™ 技术程序向远程主机提交 WS-GRAM 作业。
要监听作业状态的变化,就需要实现 org.globus.exec.client.GramJobListener 接口,它与其 GT3 的对应部分并不兼容(顺便提一下,二者的接口名是相同的)。这种技术如下所示。
/** |
WS-GRAM 中的基本对象是 GramJob。它用来以 XML 格式提交作业描述文件。作业描述中定义了可执行程序、参数、标准输入/输出/错误、阶段文件(staging file)以及其他一些选项。下面是一个简单的作业描述文件。
<!-- |
清单 2 中的作业文件将输出远程主机环境,并将 stdout/stderr 的内容存储到用户的主目录中(分别使用 stdout 和 stderr 的名字)。如 fileCleanup 段所示,在作业完成之后,这些文件就会被删除。如果 cleanup 段被注释掉了,那么对此作业的后续调用就会产生一些副作用:将输出附加到同名文件之后。因此建议您在每次作业调用之后清除文件。
要接收作业状态的变化,我们必须要实现 stateChanged 回调函数(请参见清单 3)。
/** |
接收到 stateChanged 回调时,必须检查作业状态,并相应地通知正在等待的线程。上面的子程序会输出作业状态,通知正在等待的线程,然后适当地释放资源。
在这个步骤中,我们需要正确设置作业参数。例如,如果指定了一个作业文件,那么就会使用这个文件的内容创建一个 GramJob 对象。还可设置作业超时。另外还必须定义授权和消息保护之类的安全参数。授权可以是用户、主机(默认)或身份标识。消息保护可以是加密或 XML 签名。其他选项包括委托、持续时间以及终止时间(请参见清单 4)。设置好这些参数后,即可提交作业了。
/** |
创建好对象并设置好其参数后,我们就可以对作业进行处理了。在这个步骤中需要考虑的问题如下:
/** |
如果提交模式是非批处理,那么主线程就必须等待作业完成,并将状态信息返回给客户机。这是通过检查作业的状态并通过循环判断作业终止原因来实现的。作业终止的原因可能是作业故障(通常是在服务器端产生的错误)、客户机超时或未知错误(请参见清单 6)。
private synchronized void waitForJobCompletion( |
最后,我做好了一切准备,可以进行简单的测试了。按清单 7 设置参数,即可测试这个自定义 WS-GRAM 客户机。运行输出结果如清单 8 所示。
// remote host |
Submission ID: uuid:3eb57530-cfc4-11da-bb0b-dadfac0c5c05 |
下面是用来检索作业输出结果、诊断常见错误和调试代码的一些技巧。
WS-GRAM Java API 目前不能检索作业的输出结果。例如,如果我们在一台远程主机上运行 /bin/hostname 命令,就会得到这个作业的一个惟一标识符,但此 API 不能将该命令的输出结果回显到控制台。C-API 可胜任此类任务。考虑下面的命令。
globusrun-ws -submit -s |
WS-GRAM C-client 提交清单 2 中给出的作业描述文件,并返回或将输出结果回显到客户机控制台上。WS-GRAM Java API 目前无法处理此类任务。
Globus 尚未在当前版本的工具包中实现将 Java 输出流回显到客户机上的功能的原因不明。或许是由于时间和资源不足。
下面让我们来看看创建自定义 WS-GRAM 客户机时遇到的两个常见错误,以及排除这些错误的方法。
No client transport named 'https' found! |
这个错误是由于 Axis Web 服务客户机不能找到安全服务 HTTPS 的协议定义而导致的。要排除这个错误,在启动脚本中添加如下 VM 参数即可:
-Daxis.ClientConfigFile=[GLOBUS_LOCATION]/client-config.wsdd |
org.apache.axis.ConfigurationException: |
这个错误是因 WSRF 代码无法找到 GT4 配置目录和其他必需组件的位置而导致的。要排除这个错误,添加如下 VM 参数即可:
-DGLOBUS_LOCATION=[GLOBUS_LOCATION] |
如果您遇到了无法确定的未知错误,请在 log4j.properties 文件中启用调试,如下所示。要使其生效,log4j.properties 文件应该在您的 classpath 目录中。然后应可看到大量调试消息,帮助您判断到底发生了什么情况。
# WS-GRAM client |
GRAM 服务为那些有权访问网格环境中作业宿主资源的用户提供了将作业安全地提交到多种类型的作业调度程序的功能。有效代理的存在是作业提交的必要条件。所有的 GRAM 作业提交选项都可以通过嵌入请求文档输入而透明地进行支持。实际上,作业启动是通过提交客户端向 GRAM 服务所提供的作业描述来实现的。
本文是一篇 WS-GRAM 快速入门,旨在帮助您开发可用于 Web 服务、Web 应用程序或您的自定义作业提交程序的客户机程序。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/374079/viewspace-130743/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/374079/viewspace-130743/
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。