2021SC@SDUSC

nutch的inject 有二个job

第一个job :

map :InjectMapper 功能如下 
  
1  url是否有tab分割的k-v 对如果有记录下来, 
2  如果配置了过滤使用 URLNormalizers和 URLFilters 对url 进行格式化和过滤, 
3  如果过滤的url 不为空则创建CrawlDatum对象,状态 STATUS_INJECTED,设置fetcher 间隔时间从fetchdb.fetch.interval.default  配置中取,如果没有默认2592000s 为30 天 
4  设置fectchtime  为当前时间  datum.setFetchTime(curTime); 
5 设置 score  根据db.score.injected 配置分数,默认为1

这个job 只有map 没有reduce,所以使用默认的reduce 
  map 输入 : 存放url的目录 如果 bin/nutch  crawl urls -dir crawl -topN 1  -depth 1 这个命令 输入是urls,默认的使用TextInputFormat输入的 key:偏移量 value:一行的文本   ,map的输出为 key :Text  为url, value:CrawlDatum

没有设置reduce 使用默认的Reducer 
reduce输出 :mapred.temp.dir 配置的属性值目录下面的(inject-temp-当前时间)下面 输出为 key :Text  为url, value:List<CrawlDatum>

第二个job

这个job 叫mergerjob主要是合并第一个job的输出和crawldb/current 下面的值进行合并,输出目录为crawldb/current 。 
map :CrawlDbFilter  功能如下 
      输入目录为参数crawlDb/current 和上次job的输出目录 
      key:Text value:CrawlDatum  
     如果设置了urlNormalizers=true 对url进行normalize 
      如果设置了urlFiltering=true 对url进行过滤 
       如果url不为空 写入 
       key : Text  为url  value:  CrawlDatum 
reduce :InjectReducer 
    对一个key 的value,设置状态,如果value中的CrawlDatum 如果状态是CrawlDatum.STATUS_INJECTED 则设置状态为CrawlDatum.STATUS_DB_UNFETCHED 
里面的多值去重复,否则不设置状态,使用当前的状态,如果存在多值,如果有状态不是CrawlDatum.STATUS_INJECTED,使用这个状态,否则使用    CrawlDatum.STATUS_DB_UNFETCHED,写入 
    输出目录为   crawldb 下面的先建一个随机数命名的目录 
    Path newCrawlDb = 
      new Path(crawlDb, 
               Integer.toString(new Random().nextInt(Integer.MAX_VALUE))); 
CrawlDb.install 替换 current目录 
  逻辑如下 
1 如果crawlDb 下面有old目录删除old目录 
2 把crawlDb 下面的current目录变成old目录 
3 把job是输出目录变成current目录删除old目录

nutch核心代码分析——crawl.injector总结相关推荐

  1. Java 线程池框架核心代码分析

    转载自 Java 线程池框架核心代码分析 前言 多线程编程中,为每个任务分配一个线程是不现实的,线程创建的开销和资源消耗都是很高的.线程池应运而生,成为我们管理线程的利器.Java 通过Executo ...

  2. 关于《机器学习实战》中创建决策树的核心代码分析

       关于<机器学习实战>中创建决策树的核心代码分析                 SIAT  nyk          2017年10月21日星期六 一.源码内容 def create ...

  3. 微信公众号抢现金红包活动的核心代码分析(asp.net C#)

    今年春节微信抢红包,我想各位都还记得.最近很多商家也在使用公众号给粉丝发红包,做营销活动.吸粉活动或者是反馈老用户等. 我们作为第3方开发者,就义不容辞的来给这些商家服务了.首先我们得会使用程序来写抢 ...

  4. 修改global.func.php,DZ论坛核心代码分析-核心文件global.func.php篇

    用了两天时间才把global.func.php分析完.还打算3天把common.inc.php文件整完,发现又分出来很多文件.所以这一次帖子改变一下策略.先上global.func.php文件的分析吧 ...

  5. Leaf(美团分布式ID生成服务)核心代码分析

    上一篇文章我们讲了几种常见的分布式唯一ID生成方案,今天我们再来讲一下由美团开源的Leaf框架,这个框架集成了两种最适合生产环境使用的方式 第一种方式是:Leaf Segment 这种方式其实跟我们之 ...

  6. Java 线程池框架核心代码分析--转

    原文地址:http://www.codeceo.com/article/java-thread-pool-kernal.html 前言 多线程编程中,为每个任务分配一个线程是不现实的,线程创建的开销和 ...

  7. Java线程池框架核心代码分析

    前言 多线程编程中,为每个任务分配一个线程是不现实的,线程创建的开销和资源消耗都是很高的.线程池应运而生,成为我们管理线程的利器.Java 通过Executor接口,提供了一种标准的方法将任务的提交过 ...

  8. Rime输入法核心代码分析——WeaselServer文件夹网络化分析(四)

    2021SC@SDUSC 在之前的文章中,我们对Weasel输入法的总体结构和相关的头文件WeaselIPC.h进行了分析,接下来我们将从WeaselServer.cpp开始,对于代码的其他部分进行具 ...

  9. Ext核心代码分析之Function.createDelegate

    前一段一直在用Ext,可是在扩展的时候总是遇到问题,索性看Ext的源码,但是发现有很多createDelegate这个方法.一直不解,最近经高人点播,了解一二. 所属类:Function create ...

最新文章

  1. Java语言中的数据类型
  2. 简单点,让论文写作简单点,老牌名校助理教授给出8个建议
  3. python gif动态图的合成
  4. 判断sem信号量为零_Linux系统编程——进程同步与互斥:System V 信号量
  5. shell去掉字符两端字符_Shell脚本8种字符串截取方法总结
  6. 网络知识:为什么你家里的网速慢,看完你就懂了?
  7. 用9种办法解决 JS 闭包经典面试题之 for 循环取 i
  8. 浅谈城市规划在移动GIS方面的应用发展
  9. 1298 FORZA David Beckham
  10. 得到的概率值_手把手教你将矩阵概率画成图
  11. python 画风场 scipy_Python库之SciPy教程
  12. mac jvisualvm安装Visual GC插件
  13. 如何把UCF101数据集分成训练集和测试集
  14. IBM P750 AIX机器根目录空间满问题解决办法
  15. Windows最强ssh客户端推荐 —— Bitvise SSH Client(一)
  16. sql升级重启计算机失败win10,win10纯净版安装sql server 2008重启失败的解决办法
  17. 这是一篇系统的追热点方法论
  18. PTA 1107 老鼠爱大米(C++实现)
  19. 如何用PPT编制方案 — 1. PPT的总体规划
  20. STL文件模型体积计算

热门文章

  1. 小程序进阶-emoji表情
  2. 记一次vue踩坑 this.$router.back()在ios失效,试了各种返回,最后发现是因为url传参的原因,去掉参数就可以了。。
  3. Ubuntu 下软件列表
  4. IDEA 利用MySQL驱动连接数据库
  5. mysql 配置环境变量的方法及作用
  6. Step to UEFI (137) 通过 BGRT 取得当前系统的 LOGO
  7. 磁盘显示设备未就绪,要怎么找到资料
  8. CNN与句子分类之动态池化方法DCNN--模型介绍篇
  9. 深度学习图像处理目标检测图像分割计算机视觉 02--图像特征与描述
  10. Linux基础(2)/Linux 基本概念及操作