欢迎来到天天文库
浏览记录
ID:38951865
大小:214.50 KB
页数:20页
时间:2019-06-22
《Web Spider的设计与实现(一)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、WebSpider的设计与实现(一)基于ProActive的分布式并行P-Spider1.0引言互联网信息量非常巨大并且不断快速增长,所以提高搜索引擎的WebSpider的数据采集和更新速度有着重要意义。在分布式并行计算方面,传统的基于MPI的技术具有程序可移植性差和配置复杂等不足。如果直接用java开发,在多线程和分布式java应用程序之间还存在很大的缝隙,而且为了在多线程应用程序上构建分布式应用程序而禁止了代码重用。编程人员增加了很大的负担。ProAcitiveProActive是一个由法国的INIRA的Den
2、isCaromel教授带领的开发小组开发的适合并行、分布和并发计算,在统一框架具有的移动性和安全性的java开源开发包,是ObjectWebconsortium开源中间件的一部分。我们实验室的研究情况主动对象主动对象(ActiveObject,AO)是ProActive计算概念的核心。它包括一个远程对象和一个线程。这个线程控制主动对象的活动,以及和其他已经部署好的主动对象协同工作。主动对象是在标准对象的基础上增加了位置透明、活动透明和同步三种功能。主动对象的通讯默认是异步模式的。一个主动对象包括一个主要的对象、一个
3、线程、待处理请求队列。异步调用ProActive对主动对象的异步调用是通过Future对象来实现的。Future对象是ProActive中为方法调用时自动产生表示调用的返回结果的对象。ProActive采用一种Wait-by-necessity方式来解决内部对象的同步,其思想如下:生成Future对象后可继续往下执行,除非是直接对Future对象的引用,才会自动停下等待,直到Future对象得到具体数值。Future对象的值变为可用时,会自动得到更新。TypeGroup所谓TypeGroup就是具有相同类型的主动对
4、象的群,可以向普通对象一样调用其中的群方法。TypedGroup群通信是建立在ProActive异步远程方法调用基础之上的,可以实现一次调用多个AO操作。如果有返回值,结果也是一个群。节点的部署ProActive的部署文件是一个XML类型文件,它主要由三个部分构成:componentDefinition、deployment及infrastructure。用来提供虚拟节点(VirtualNode,简称VN)、Java虚拟机(JVM)及节点(Node)的映射关系信息。ProActive在程序运行时从部署文件获取结点部
5、署信息。P-Spider的系统框架P-Spider系统框架协调器(SpiderCoordinator)由两个部分组成,这两个部分分别被设计成Spider和SpiderWorkload两个主动对象。Spider负责对系统进行部署和管理。SpiderWorkload负责维护URL队列。SpiderWorker每个SpiderWorker也被设计成是一个主动对象。每个计算节点上分派了多个SpiderWorker主动对象。SpiderWorker根据读取到的URL下载页面,然后解析页面的HTML,提取出其中包含的URL。将
6、提取出来的URL链接按照预先定义的统一的格式补充完整。对URL进行过滤,如去除带“?”的搜索产生的URL等。最后,统计下载URL数量,报告新发现的URL。Spider类publicclassSpider{publicvoidinit(){proActiveDescriptor=ProActive.getProactiveDescriptor("file:"+".//descriptors//spider.xml");//为ProActiveDescriptor指定具体的部署文件,spider.xml为部署文件名pr
7、oActiveDescriptor.activateMappings();//根据部署文件,启动虚拟机,创建NodeProActive.turnActive(this);//将对象Spider变为主动对象spiderworkgroup=(SpiderWorker)ProActiveGroup.newGroup(SpiderWorker.class.getName(),params,nodes);//以数组params中的数据作为参数,生成SpiderWorker类的主动对象,主动对象个数等于params中的参数的组
8、数。并且把这些主动对象部署到nodes中指定的各个节点上去。同时定义名为spiderworkgroup的TypeGroup。IntWrapperpageCount=spiderworkgroup.startwork();//调用spiderworkgroup中每个主动对象的startwork()方法。定义返回值为pageCount。ProActiveGrou
此文档下载收益归作者所有