在web中直接调用Nutch执行JOB

看了http://zha-zi.iteye.com/blog/639850的博客后

于是按着他给出的说明构造了一个实验项目:

首先是将Nutch打包成JOB,在Nutch中提供了对ant的支持,要打JOB包,就直接在项目目录下执行ant命令系统就会自动的实现对Nutch的打包,包括对plugins、nutch打包为Jar包,同时将nutch打包成Job.

这里nutch配置jar包依赖的时候用到了maven和Ivy,通过这些东东的配置对于jar包就用起来方便多了。

打包完成后可以查看项目文件夹中build目录,在该目录中有nutch的jar包和job文件,并且在该目录下还有plugins文件夹,就是对插件进行打包后的结果。

完成上述操作后,执行下面的具体操作:

1、新建一个web工程,把nutch源代码中plugins文件夹下的目录复制到src下,把nutch下src/java 中的这些包复制src下
2、把nutch中conf文件夹的所有配置文件复制到src目录下,把nutch中nutch.job文件复制到src下边
3、把nutch中lib文件夹的jar文件复制到web-inf的lib下
4、重新在src下建立一个类,用这个类去调用crawl的main()

这个调用时直接使用servlet来调用呗。

代码如下:

package com.nutch.demo;

import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.util.ToolRunner;
import org.apache.nutch.crawl.Crawl;
import org.apache.nutch.metadata.Metadata;
import org.apache.nutch.parse.Parse;
import org.apache.nutch.parse.html.HtmlParser;
import org.apache.nutch.protocol.Content;
import org.apache.nutch.util.NutchConfiguration;

public class NutchDemo extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		doPost(req, resp);
	}

	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		String []args ={"urls/url","-dir","crawled","-depth","10","-topN","50"}; 
		Configuration conf = NutchConfiguration.create();
		int res;
		try {
			res = ToolRunner.run(conf, new Crawl(), args);
			System.exit(res);
		} catch (Exception e) {
			e.printStackTrace();
		}

}
 

在web.xml文件的配置如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>nutch_web</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
  	<servlet-name>nutch_web_application</servlet-name>
  	<servlet-class>com.nutch.demo.NutchDemo</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>nutch_web_application</servlet-name>
  	<url-pattern>/nutch</url-pattern>
  </servlet-mapping>
</web-app>

 请求的时候就调用http://127.0.0.1:8080/nutch就可以执行nutch的job了(我是在tomcat上测的),其中urls/url文件放到tomcat的bin目录中。

好了就这么多了,试试吧

猜你喜欢

转载自weiliuhong1.iteye.com/blog/1542125