与云计算开发环境集成的一般有两种接口,一种是使用文件系统共享数据。另一种是通过网络传递消息。事实上,非云计算平台的集成接口一般也是这两种。再次说明云计算只是应用程序发展到一定阶段,在对计算能力与资源管理有更高要求时而产生的,其开发语言与方法和传统的应用开发有很多相似之处。
1.共享文件系统
使用文件系统共享数据与云计算环境集成是很方便快捷的。在与MATLAB的集成中,用户只需为应用程序设置正确共享路径即可。但并不是每个具体的工具软件都开发了相应的并行计算开发包。有些情况下有可能不同的工具软件需要协同工作,这时候对于文件格式的定义就显得格外重要。下面给出参考,通过XML文件来定义文件格式,如代码清单9-8所示。
【代码清单9-8】
输入数据
输出数据
上面的文件格式可以很容易地被XML解析工具读取与写入。用户可以随时在<header>节点中添加需要的参数,比如是否对数据的存储方式进行加密。由于采用键值对的数据格式,用户可以扩展数据结构,不同软件之间也可以共享数据。
2.通过网络传递消息
通过共享文件的方式集成基本上对所有的应用都适用,但有些时候,用户得到的数据可能是网络上传递的数据流,如果将其转化为文件再集成,就会降低应用的处理速度。
而通过传递消息的方式与云计算环境集成可以解决这个文题。它的目的在于更快捷地传输小数据量的数据(与文件方式相比省去了读写文件的时间)。但它通常要考虑消息的编码与解码,不同的云计算工具往往有不同的编码与解码方式。
Hadoop自身就提供了一个很好的网络传输模型,在Hadoop中称为RPC(Remote Proce-dure Call,即远程过程调用)框架。
它主要分为三部分。
(1)传递的数据
首先需要确定的是什么样的数据要在集成的应用与云计算环境之间传递。Hadoop RPC除了支持传递String,int,long这样的数据传递,还支持用户自定义的数据类型。
在下面的代码中,我们定义了一个新的类型RPCParam,它继承自WritableComparable接口,通过write方法将数据编码,readFields方法解码,如代码清单9-9所示。
【代码清单9-9】(www.xing528.com)
读者不妨将这段代码与Symphony DE进行一下对比。
(2)服务端
作为服务端程序,在HadoopRPC框架中,服务端程序需要实现org.apache.hadoop.ipc.VersionedProtocol接口。该接口主要定义了当前服务端的版本,不要小看这个版本,RPC通过程序中定义的当前版本与客户端的版本进行比对,当版本不相同时,就会报错。从而避免了由于传输数据不一致而导致的错误(如果没有版本控制,出现此类错误只能一行一行的检查代码)。
对于服务端代码,其实并不是直接写代码的具体实现,而是确定向调用者提供什么样的接口。这样做最直接的好处是,服务端程序一般不向客户端公开,客户通过接口就可以调用服务端程序,不需要接触具体实现代码。其他的好处读者可以参考面向接口编程方面的书籍,这里就不赘言。服务端接口代码如下所示。
具体服务端的实现需要根据具体业务来确定。由于我们打算传递三种类型的数据,这里实现了三个具体方法,如代码清单9-10所示。
【代码清单9-10】
服务端的代码写好后,我们可以使用RPC框架启动服务端程序,如代码清单9-11所示。
【代码清单9-11】
(3)客户端
对于客户端调用RPC提供了两种方式,即代理方式和反射方式。
如果利用代理的方式调用服务器只能有一个,调用代码如下所示。
如果通过反射的方式调用,服务器可以有多个,参数为一个二维数据对应每个服务器的方法,调用代码如代码清单9-12所示。
【代码清单9-12】
详细代码请参考sample9\TestHadoop。
利用HadoopRPC框架,用户可以通过网络数据传输集成应用。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。