Nutch中MapReduce的分析
来源:互联网 发布:移动云商城 源码下载 编辑:程序博客网 时间:2024/05/01 09:30
转载: http://www.chinacloud.cn/show.aspx?id=62&cid=12
Nutch是最早用MapReduce的项目 (Hadoop其实原来是Nutch的一部分),Nutch的plugin机制吸取了eclipse的plugin设计思路。在Nutch中 MapReduce编程方式占据了其核心的结构大部分。从插入url列表(Inject),生成抓取列表(Generate),抓取内容(Fetch), 分析处理内容(Parse),更新Crawl DB库(Update ),转化链接(Invert Links)一直到建立索引(Index)都是采用MapReduce来完成的。查看Nutch的源代码我们能够学到更多的 如何用MapReduce来处理我们编程中所遇到的问题。
Nutch从获取下载列表到建立索引的过程:
插入url列表到Crawl DB,引导下面的抓取程序循环:– 从Crawl DB生成一些url列表;– 抓取内容;– 分析处理抓取的内容;– 更新Crawl DB库.转化每个页面中外部对它的链接建立索引
具体技术实现细节:
1。插入url列表(Inject)
MapReduce程序1:目标:转换input输入为CrawlDatum格式.输入: url文件Map(line) → <url, CrawlDatum>Reduce()合并多重的Url.输出:临时的CrawlDatum文件.MapReduce2:目标:合并上一步产生的临时文件到新的DB输入: 上次MapReduce输出的CrawlDatumMap()过滤重复的url.Reduce: 合并两个CrawlDatum到一个新的DB输出:CrawlDatum
2。生成抓取列表(Generate)
MapReduce程序1:目标:选择抓取列表输入: Crawl DB 文件Map() → 如果抓取当前时间大于现在时间 ,抓换成 <CrawlDatum, url>格式.分发器(Partition) :用url的host保证同一个站点分发到同一个Reduce程序上.Reduce:取最顶部的N个链接.MapReduce程序2:目标:准备抓取Map() 抓换成 <url,CrawlDatum,>格式分发器(Partition) :用url的host输出:<url,CrawlDatum>文件
3。抓取内容(Fetch)
MapReduce:目标:抓取内容输入: <url,CrawlDatum>, 按host划分, 按hash排序Map(url,CrawlDatum) → 输出<url, FetcherOutput>多线程, 调用Nutch的抓取协议插件,抓取输出<CrawlDatum, Content>输出: <url,CrawlDatum>, <url,Content>两个文件
4。分析处理内容(Parse)
MapReduce:目标:处理抓取的能容输入: 抓取的<url, Content>Map(url, Content) → <url, Parse>调用Nutch的解析插件,输出处理完的格式是<ParseText, ParseData>输出: <url,ParseText>, <url,ParseData><url,CrawlDatum>.
5。更新Crawl DB库(Update )
MapReduce:目标: 整合 fetch和parse到DB中输入:<url,CrawlDatum> 现有的db加上fetch和parse的输出,合并上面3个DB为一个新的DB输出: 新的抓取DB
6。转化链接(Invert Links)
MapReduce:目标:统计外部页面对本页面链接输入: <url,ParseData>, 包含页面往外的链接Map(srcUrl, ParseData> → <destUrl, Inlinks>搜集外部对本页面的链接Inlinks格式:<srcUrl, anchorText>Reduce() 添加inlinks输出: <url, Inlinks>
7。建立索引(Index)
MapReduce:目标:生成Lucene索引输入: 多种文件格式parse处理完的<url, ParseData> 提取title, metadata信息等parse处理完的<url, ParseText> 提取text内容转换链接处理完的<url, Inlinks> 提取anchors抓取内容处理完的<url, CrawlDatum> 提取抓取时间.Map() 用ObjectWritable包裹上面的内容Reduce() 调用Nutch的索引插件,生成Lucene Document文档输出: 输出Lucene索引关于nutch mapreduce的更全说明:http://blog.csdn.net/neo_2011/article/details/6969284
过程原形:
Map :: (InitialKey, IntialValue) -> [(InterKey, InterValue)]
Reduce :: (Interkey, InterValuesIterator) -> [(InterKey, InterValue)]
Map接收一个Key、Value对,返回一个Key、Value对(如果原始的Key、Value对不满足你的要求你可以不返回,或者你有特殊需求也可以返回多个,一般比较少见), Reduce接收一个Key和一个Values的Iterator,你可以根据情况返回零个或多个Key,Value对。Key是一个实现了org.apache.hadoop.WritableComparable接口的类,Value则实现了Writable,WritableComparable是Writable的子接口,Writable定义了输入输出(序列化)的接口,WritableComparable另外继承Comparable,因此Key总是有序的
Reduce过程对于同一个Key只被调用一次,那个values的Iterator包含这个Key所对应的全部记录,你可以简单的只取第一条数据,对这些记录进行比较,得到你认为最有效的一条记录,或者统计每一个Key都有多少条记录,一句话,你可以做任何事情(事实上是任何MapReduce所支持的事情)。
- Nutch中MapReduce的分析
- Nutch中MapReduce的分析
- Nutch中MapReduce的分析
- Nutch中MapReduce的分析
- Nutch中MapReduce的分析
- Nutch中metadata的分析
- nutch中mapreduce执行流程
- [Nutch]Nutch抓取过程中生成的目录内容分析
- nutch项目中到hadoop到mapreduce
- Nutch的一些分析
- Hadoop中 MapReduce中InputSplit的分析
- mapreduce中jobtracker进程的分析
- Hadoop1.*中MapReduce的partitioner源码分析
- nutch的核心流程分析
- nutch MapReduce 笔记
- Nutch 二次开发总结 - Nutch查询分析得出的结论
- Nutch 二次开发总结 - Nutch查询分析得出的结论
- nutch中bin/crawl和bin/nutch crawl的用法
- GUI 【java笔记】
- [日本] 红叶观赏
- 安卓项目开发实战(1)续--首页顶部菜单用actionbar实现
- 函数导出的问题
- Single Number II【leetcode】
- Nutch中MapReduce的分析
- ftp client
- [转载]Linux 内核笔记 -- 信号
- Makefile
- 并查集
- 手动生成BMP图片
- 威布尔分布的参数估计
- iOS_31_cocos2d_纹理打包(TexturePacker)
- MATLAB对tiff格式图像序列的读取与导出