nutch核心代码分析——crawl.injector总结
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总结相关推荐
- Java 线程池框架核心代码分析
转载自 Java 线程池框架核心代码分析 前言 多线程编程中,为每个任务分配一个线程是不现实的,线程创建的开销和资源消耗都是很高的.线程池应运而生,成为我们管理线程的利器.Java 通过Executo ...
- 关于《机器学习实战》中创建决策树的核心代码分析
关于<机器学习实战>中创建决策树的核心代码分析 SIAT nyk 2017年10月21日星期六 一.源码内容 def create ...
- 微信公众号抢现金红包活动的核心代码分析(asp.net C#)
今年春节微信抢红包,我想各位都还记得.最近很多商家也在使用公众号给粉丝发红包,做营销活动.吸粉活动或者是反馈老用户等. 我们作为第3方开发者,就义不容辞的来给这些商家服务了.首先我们得会使用程序来写抢 ...
- 修改global.func.php,DZ论坛核心代码分析-核心文件global.func.php篇
用了两天时间才把global.func.php分析完.还打算3天把common.inc.php文件整完,发现又分出来很多文件.所以这一次帖子改变一下策略.先上global.func.php文件的分析吧 ...
- Leaf(美团分布式ID生成服务)核心代码分析
上一篇文章我们讲了几种常见的分布式唯一ID生成方案,今天我们再来讲一下由美团开源的Leaf框架,这个框架集成了两种最适合生产环境使用的方式 第一种方式是:Leaf Segment 这种方式其实跟我们之 ...
- Java 线程池框架核心代码分析--转
原文地址:http://www.codeceo.com/article/java-thread-pool-kernal.html 前言 多线程编程中,为每个任务分配一个线程是不现实的,线程创建的开销和 ...
- Java线程池框架核心代码分析
前言 多线程编程中,为每个任务分配一个线程是不现实的,线程创建的开销和资源消耗都是很高的.线程池应运而生,成为我们管理线程的利器.Java 通过Executor接口,提供了一种标准的方法将任务的提交过 ...
- Rime输入法核心代码分析——WeaselServer文件夹网络化分析(四)
2021SC@SDUSC 在之前的文章中,我们对Weasel输入法的总体结构和相关的头文件WeaselIPC.h进行了分析,接下来我们将从WeaselServer.cpp开始,对于代码的其他部分进行具 ...
- Ext核心代码分析之Function.createDelegate
前一段一直在用Ext,可是在扩展的时候总是遇到问题,索性看Ext的源码,但是发现有很多createDelegate这个方法.一直不解,最近经高人点播,了解一二. 所属类:Function create ...
最新文章
- Java语言中的数据类型
- 简单点,让论文写作简单点,老牌名校助理教授给出8个建议
- python gif动态图的合成
- 判断sem信号量为零_Linux系统编程——进程同步与互斥:System V 信号量
- shell去掉字符两端字符_Shell脚本8种字符串截取方法总结
- 网络知识:为什么你家里的网速慢,看完你就懂了?
- 用9种办法解决 JS 闭包经典面试题之 for 循环取 i
- 浅谈城市规划在移动GIS方面的应用发展
- 1298 FORZA David Beckham
- 得到的概率值_手把手教你将矩阵概率画成图
- python 画风场 scipy_Python库之SciPy教程
- mac jvisualvm安装Visual GC插件
- 如何把UCF101数据集分成训练集和测试集
- IBM P750 AIX机器根目录空间满问题解决办法
- Windows最强ssh客户端推荐 —— Bitvise SSH Client(一)
- sql升级重启计算机失败win10,win10纯净版安装sql server 2008重启失败的解决办法
- 这是一篇系统的追热点方法论
- PTA 1107 老鼠爱大米(C++实现)
- 如何用PPT编制方案 — 1. PPT的总体规划
- STL文件模型体积计算
热门文章
- 小程序进阶-emoji表情
- 记一次vue踩坑 this.$router.back()在ios失效,试了各种返回,最后发现是因为url传参的原因,去掉参数就可以了。。
- Ubuntu 下软件列表
- IDEA 利用MySQL驱动连接数据库
- mysql 配置环境变量的方法及作用
- Step to UEFI (137) 通过 BGRT 取得当前系统的 LOGO
- 磁盘显示设备未就绪,要怎么找到资料
- CNN与句子分类之动态池化方法DCNN--模型介绍篇
- 深度学习图像处理目标检测图像分割计算机视觉 02--图像特征与描述
- Linux基础(2)/Linux 基本概念及操作