`

nutch源码阅读(3)-Injector的Mapper

 
阅读更多

上篇看到Injector的初始化,这次继续阅读,看看Mapper

public void map(WritableComparable key, Text value,
                    OutputCollector<Text, CrawlDatum> output, Reporter reporter)
      throws IOException {
      String url = value.toString();              // value is line of text
      //忽略开头符号为#的
      if (url != null && url.trim().startsWith("#")) {
          /* Ignore line that start with # */
          return;
      }

      // if tabs : metadata that could be stored
      // must be name=value and separated by \t
      float customScore = -1f;
      int customInterval = interval;
      int fixedInterval = -1;
      Map<String,String> metadata = new TreeMap<String,String>();
      //对文本进行拆分
      if (url.indexOf("\t")!=-1){
    	  String[] splits = url.split("\t");
    	  url = splits[0];
    	  for (int s=1;s<splits.length;s++){
    		  // find separation between name and value
    		  int indexEquals = splits[s].indexOf("=");
    		  if (indexEquals==-1) {
    			  // skip anything without a =
    			  continue;		    
    		  }
                  //得到元数据名称及值
    		  String metaname = splits[s].substring(0, indexEquals);
    		  String metavalue = splits[s].substring(indexEquals+1);
                  //判断是不是保留的元数据名称
    		  if (metaname.equals(nutchScoreMDName)) {
    			  try {
    			  customScore = Float.parseFloat(metavalue);}
    			  catch (NumberFormatException nfe){}
    		  }
                  else if (metaname.equals(nutchFetchIntervalMDName)) {
                          try {
                                  customInterval = Integer.parseInt(metavalue);}
                          catch (NumberFormatException nfe){}
                  }
                  else if (metaname.equals(nutchFixedFetchIntervalMDName)) {
                          try {
                                  fixedInterval = Integer.parseInt(metavalue);}
                          catch (NumberFormatException nfe){}
                  }
                  //不是就保存到容器中
    		  else metadata.put(metaname,metavalue);
    	  }
      }
      try {
       //对url规范化,过滤
        url = urlNormalizers.normalize(url, URLNormalizers.SCOPE_INJECT);
        url = filters.filter(url);             // filter the url
      } catch (Exception e) {
        if (LOG.isWarnEnabled()) { LOG.warn("Skipping " +url+":"+e); }
        url = null;
      }
      if (url == null) {
        reporter.getCounter("injector", "urls_filtered").increment(1);
      } else {                                   // if it passes
        value.set(url);                           // collect it
        //创建一个CrawlDatum,用来保存所处阶段,元数据,分值,计数等信息
        CrawlDatum datum = new CrawlDatum();
        datum.setStatus(CrawlDatum.STATUS_INJECTED);

        // Is interval custom? Then set as meta data
        if (fixedInterval > -1) {
          // Set writable using float. Flaot is used by AdaptiveFetchSchedule
          datum.getMetaData().put(Nutch.WRITABLE_FIXED_INTERVAL_KEY, new FloatWritable(fixedInterval));
          datum.setFetchInterval(fixedInterval);
        } else {
          datum.setFetchInterval(customInterval);
        }

        datum.setFetchTime(curTime);
        // now add the metadata
        Iterator<String> keysIter = metadata.keySet().iterator();
        while (keysIter.hasNext()){
        	String keymd = keysIter.next();
        	String valuemd = metadata.get(keymd);
        	datum.getMetaData().put(new Text(keymd), new Text(valuemd));
        }
        if (customScore != -1) datum.setScore(customScore);
        else datum.setScore(scoreInjected);
        try {
               //分值初始化
        	scfilters.injectedScore(value, datum);
        } catch (ScoringFilterException e) {
        	if (LOG.isWarnEnabled()) {
        		LOG.warn("Cannot filter injected score for url " + url
        				+ ", using default (" + e.getMessage() + ")");
        	}
        }
        reporter.getCounter("injector", "urls_injected").increment(1);
        output.collect(value, datum);
      }
    }
  }

 

分享到:
评论

相关推荐

    apache-nutch-2.3.1-src.tar.gz

    5. **配置文件**:如 `conf/nutch-default.xml` 和 `conf/nutch-site.xml`,分别包含 Nutch 的默认配置和用户自定义配置。 6. **抓取策略**:Nutch 支持基于链接的抓取策略,如 PR(PageRank)和 TF-IDF(Term ...

    apache-nutch-1.3-src.tar.gz_nutch_nutch-1.3.tar.gz

    这个源码包 "apache-nutch-1.3-src.tar.gz" 和 "nutch-1.3.tar.gz" 包含了 Nutch 1.3 的源代码和编译后的二进制文件,对于开发者和研究者来说是非常有价值的资源。 **Nutch 概述** Nutch 是基于 Java 开发的,遵循 ...

    Nutch 1.2源码阅读

    ### Nutch 1.2 源码阅读深入解析 #### Crawl类核心作用与流程概览 在深入了解Nutch 1.2源码之前,我们先明确Nutch的架构和工作流程。Nutch作为一款开源搜索引擎框架,其功能涵盖网页抓取、索引构建以及查询处理。...

    apache-nutch-1.4-bin.tar.gz

    在这个"apache-nutch-1.4-bin.tar.gz"压缩包中,包含了运行 Nutch 的所有必要组件和配置文件,适合初学者和开发者快速部署和实验。 **Nutch 的核心组成部分:** 1. **爬虫(Spider)**:Nutch 的爬虫负责在网络中...

    nutch-1.9 源码

    Nutch-1.9 是一个开源的网络爬虫软件,被广泛用于数据挖掘、搜索引擎构建以及网络信息提取。它的最新版本提供了许多改进和优化,使得它成为开发者和研究者手中的利器。Nutch的设计目标是易用性和可扩展性,允许用户...

    apache-nutch的源码

    3. **配置文件**:在`conf`目录下,你会发现`nutch-site.xml`,这是Nutch的主要配置文件,包含了爬虫的各项设置,如抓取间隔、并发度、抓取策略等。 4. **依赖包**:虽然压缩包中没有包含依赖包,但你需要自行下载...

    nutch_src 源码 tar—zip格式

    "apache-nutch-1.4-src.zip"是Nutch源码的zip压缩版本,用户可以直接解压并访问其中的源代码。 要获取和解压这些源码,你可以使用各种工具,如在Linux或Mac系统中使用命令行的tar和unzip命令,或者在Windows中使用...

    nutch配置nutch-default.xml

    nutch配置nutch-default.xml

    apache-nutch-1.7-src.tar.gz

    在“apache-nutch-1.7-src.tar.gz”这个压缩包中,你将获得Nutch 1.7的源代码,这使得开发者可以深入了解其工作原理,并对其进行定制和扩展。解压后的文件夹“apache-nutch-1.7”包含了所有必要的组件和配置文件。 ...

    apache-nutch-1.6-src.tar.gz

    - **Java编程**:源码阅读和开发需要基本的Java编程技能,特别是对多线程和网络编程的理解。 - **Ant构建工具**:掌握如何使用Ant来构建、测试和部署Nutch项目。 通过深入研究Nutch 1.6源码,你可以学习到如何设计...

    lucene+nutch搜索引擎光盘源码(1-8章)

    《lucene+nutch搜索引擎光盘源码(1-8章)》是一套全面解析Lucene和Nutch搜索引擎技术的源代码教程,涵盖了从基础到进阶的多个层面。这套资源包含8个章节的源码,由于文件大小限制,被分成了多个部分进行上传。 ...

    apache-nutch-2.3.1-src

    apache-nutch-2.3.1-src.tar ,网络爬虫的源码, 用ivy2管理, ant runtime 编译 apache-nutch-2.3.1-src.tar ,网络爬虫的源码, 用ivy2管理, ant runtime 编译

    apache-nutch-1.5.1-bin.tar.gz

    Nutch是一款刚刚诞生的完整的开源搜索引擎系统,可以结合数据库进行索引,能快速构建所需系统。Nutch 是基于Lucene的,Lucene为 Nutch 提供了文本索引和搜索的API,所以它使用Lucene作为索引和检索的模块。Nutch的...

    nutch-1.5.1源码

    Nutch-1.5.1源码是Apache Nutch项目的一个重要版本,它是一个高度可扩展的、开源的网络爬虫和全文搜索引擎框架。Nutch最初由Doug Cutting创建,后来成为了Hadoop项目的一部分,因为其在大数据处理和分布式计算方面的...

    apach-nutch-1.9-bin.tar.gz

    4. **配置与部署**:解压 "apache-nutch-1.9" 文件后,需要根据你的环境配置`conf/nutch-site.xml`文件,设置包括抓取间隔、并发度、存储路径等参数。同时,可能还需要配置`conf/regex-urlfilter.txt`和`conf/...

    nutch2.2.1-src

    3. **配置Nutch**:修改`conf/nutch-site.xml`等配置文件,设置爬虫的启动参数,如抓取范围、URL过滤规则等。 4. **创建数据库**:Nutch通常使用Hadoop HDFS作为数据存储,因此需要设置Hadoop环境,并创建相应的...

    apache-nutch-1.6-bin.tar.gz最新版

    nutch不用安装,是个应用程序,下载后为nutch-1.6.tar.gz,双击桌面上的cygwin快捷方式;执行以下命令: $ cd D:/Downloads/Soft $ tar zxvf nutch-1.0.tar.gz 在e盘下面出现nutch-0.9文件夹说明解压成功了.然后环境...

    apache-nutch-2.3-src.zip

    1. **源码目录结构**:解压后的apache-nutch-2.3目录包含了源代码、配置文件、构建脚本等。主要目录有`src/main/`,其中`src/main/java`存放Java源码,`src/main/resources`存储配置文件,`src/main/webapp`包含Web...

    apache-nutch-1.4-bin.tar.gz.part2

    apache-nutch-1.4-bin.tar.gz.part2

Global site tag (gtag.js) - Google Analytics