Nutch 公开课从搜索引擎到网络爬虫


1 www.osforce.cn Nutch:从搜索引擎到网络爬虫 杨尚川 独立咨询顾问,专注于大数据和搜索引擎 2013年度优秀开源项目APDPlat发起人 ysc@apdplat.org QQ: 281032878 2 www.osforce.cn 大纲: 1、Nutch是什么 2、Nutch可以做什么 3、为什么要学习Nutch 4、Nutch的设计初衷 5、Nutch的设计目标 6、Nutch的发展历程 7、Nutch 3大分支版本 8、Nutch的整体架构 9、Nutch的使用 10、一些优化技巧 3 www.osforce.cn 1、Nutch是什么 Nutch是Apache旗下的Java开源项目, 最初是一个搜索引擎,现在是一个网络 爬虫。下图为发起人Doug Cutting Doug Cutting同时也是 Lucene和Hadoop的发起人 4 www.osforce.cn Nutch的特性 插件架构,高度模块化 大多数功能都可以通过插件来实现和改变 易扩展,极强的伸缩性 增加机器即可,不用修改代码,从一台可扩展到成千上 万台 高可用性,健壮容错 容忍宕机情况的出现 灵活可配置 提供了162个配置参数 5 www.osforce.cn Nutch的不足 • 所有文件都是只能写一次 • 批量处理架构导致无实时性 • 没有用户管理图形界面,只有 命令行接口 • web2.0的普及导致的js分析和 身份认证等问题 6 www.osforce.cn Nutch和其他项目的关系 Lucene Core(全文检索库) Solr(企业搜索平台) ElasticSearch(分布式的支持RESTFULL 的实时搜索和实时分析) Hadoop(分布式计算和分布式存储) Tika(MIME类型检测、语言检测、元数据和 文本自动提取) Gora(对象到NOSQL的映射) 7 www.osforce.cn 2、Nutch可以做什么 站内搜索引擎 Oregon State University 全网搜索引擎 即刻搜索(可能) http://www.csdn.net/article/2010-09- 13/279345?1284517620 垂直搜索引擎 Internet Archive,Creative Commons 数据采集 …… 8 www.osforce.cn 3、为什么要学习Nutch Hadoop是大数据的核心技术之一,而 Nutch集Hadoop之大成,是Hadoop的源 头。学习Hadoop,没有数据怎么办?用 Nutch抓!学了Hadoop的Map Reduce以 及HDFS,没有实用案例怎么办?学习 Nutch!Nutch的很多代码是用Map Reduce和HDFS写的,哪里还能找到比 Nutch更好的Hadoop应用案例呢? 9 www.osforce.cn 大数据这个术语最早的引用可追溯到 Nutch。当时,大数据用来描述为更新网 络搜索索引需要同时进行批量处理或分 析的大量数据集。现在,大数据的含义 已经被极大地发展了,业界将大数据的 特性归纳为4个“V”。Volume数据体量巨 大,Variety数据类型繁多,Value价值密 度低,商业价值高,Velocity处理速度快。 10 www.osforce.cn 4、Nutch的设计初衷 商业搜索引擎不开源,搜索结果不纯粹是根 据网页本身的价值进行排序,而是有众多商 业利益考虑。Nutch提供了开源的解决方案, 帮助人们很容易地建立一个搜索引擎,为用 户提供优质的搜索结果,并能从一台机器扩 展到成百上千台。 11 www.osforce.cn 5、Nutch的设计目标 并行运行在成千上万台服务器上 每个月抓取几十亿网页 为这些网页维护一个索引 对索引文件执行每秒上千次的搜索 提供高质量的搜索结果 以最小的成本运作 12 www.osforce.cn 如何才能达成这样的目标呢? 1、需要一个分布式文件系统 2、需要一个分布式计算平台 对分布式文件系统的要求: • 单一共享的命名空间 • 容错(磁盘及节点) • 使用用于计算的节点上面的磁盘(计 算和数据放到一起,减小网络开销) • 不用重启系统就能增加移除磁盘及节 点 13 www.osforce.cn Google 发布了GFS 论文 满足所有要求 一个NameNode • 文件名和块的映射:name → * • 块和主机及端口的映射:blockId → replication_level 多个DataNode • 块和字节的映射:blockId → * • 轮询NameNode进行复制,删除等请求 客户端同时和NameNode和DataNode进行 交互 14 www.osforce.cn 于是有了 Nutch Distributed File System(NDFS) • GFS的JAVA开源实现 • 2003年由Mike Cafarella完成 • 作为Nutch的一部分 15 www.osforce.cn 对分布式计算平台的要求: 把一项工作(job)分解为多个任务(task) 对于每一个任务: • 分配主机(host) • 启动任务 • 监控任务执行 • 宕机的时候终止任务 • 任务执行失败后能重新启动任务 顺序执行 一项工作(job)完成后执行下一项工作(job) 16 www.osforce.cn Google 发布了MapReduce 论文 MapReduce是一个可靠,可扩展的分布式 计算平台 所有的数据都是顺序的对 程序员只需要实现两个特定的方法 • map(k, v) → * • reduce(k', *) → * 所有有相同k'的v'都有序地聚集在一起 于是Nutch开始采用MapReduce 17 www.osforce.cn 18 www.osforce.cn 如何并行处理同一个大文件? 19 www.osforce.cn SequenceFile的结构 20 www.osforce.cn 21 www.osforce.cn MapFile? 可以当成SequenceFile来使用 对KEY进行了排序和索引 22 www.osforce.cn 6、Nutch的发展历程 2002年8月由Doug Cutting发起,托管于Sourceforge,之后发布了0.4、 0.5、0.6三个版本 2004年9月Oregon State University(俄勒冈州立大学)采用Nutch 2004年9月Creative Commons(知识共享)推出基于Nutch的搜索服务 2005年1月加入Apache的孵化器 2005年6月孵化结束成为Lucene的子项目 2005年8月发布版本0.7( Apache Lucene sub-project) 2005年10月发布版本0.7.1 2006年3月发布版本0.7.2 2006年7月发布版本0.8(全新的架构,基于Hadoop 0.4 ,Hadoop诞生) 2006年9月发布版本0.8.1 2007年4月发布版本0.9 2009年3月发布版本1.0(Tika诞生,0.1-incubating) 2010年4月Nutch成为Apache顶级项目 2010年6月发布版本1.1 2010年9月发布版本1.2 2011年6月发布版本1.3( 从搜索引擎到网络爬虫) 23 www.osforce.cn 2011年11月发布版本1.4 2012年6月发布版本1.5 2012年7月发布版本2.0( 2.X Gora诞生,table-based architecture ) 2012年7月发布版本1.5.1 2012年8月Nutch诞生十周年 2012年10月发布版本2.1( 2.X开始支持elastic search ) 2012年12月发布版本1.6 2013年6月发布版本2.2(crawler-commons 诞生) 2013年6月发布版本1.7(crawler-commons 诞生) 2013年7月发布版本2.2.1 11年发展历程,3大分支版本 强调重用,诞生了Java开源项目Hadoop、Tika、Gora 不重新发明轮子,使用了大量第三方开源项目 24 www.osforce.cn Nutch1.3是从搜索引擎到网络爬虫的转折点 . Removed Lucene-based indexing and search webapp – delegate indexing / search remotely to SOLR – change of focus : “Web search application” → “Crawler” . Removed deprecated parse plugins – delegate most parsing to Tika . Separate local / distributed runtimes . Ivy-based dependency management 25 www.osforce.cn 26 www.osforce.cn 27 www.osforce.cn 28 www.osforce.cn 29 www.osforce.cn 30 7、Nutch 3大分支版本 Nutch1.2是一个完整的搜索引擎 Nutch1.7是一个基于HDFS的网络爬虫 Nutch2.2.1是一个基于Gora的网络爬虫 1.X系列可用于生产环境、2.X系列还不 成熟 www.osforce.cn 8、Nutch的整体架构 31 www.osforce.cn 32 seed i = 1 i = 2 i = 3 www.osforce.cn 33 www.osforce.cn 34 www.osforce.cn 35 www.osforce.cn 8.1 Injector(注入) 36 www.osforce.cn 37 www.osforce.cn 38 www.osforce.cn 39 www.osforce.cn 40 CrawlDB是MapFile CrawlDatum结构如右 图所示 www.osforce.cn 8.2 Generator(产生抓取列表) 41 www.osforce.cn 42 www.osforce.cn 43 www.osforce.cn 44 www.osforce.cn 45 www.osforce.cn 46 www.osforce.cn 8.3 Fetcher(抓取网页) 47 www.osforce.cn 48 www.osforce.cn 49 www.osforce.cn 50 www.osforce.cn 51 www.osforce.cn 52 www.osforce.cn 53 content是MapFile Content结构如右图所示 www.osforce.cn 8.4 Parse segment(解析) 54 www.osforce.cn 55 www.osforce.cn 56 www.osforce.cn 57 www.osforce.cn 58 parse_text是MapFile ParseText结构如右图所示 parse_data是MapFile ParseData结构如下图所示 www.osforce.cn 8.5 Update CrawlDB(更新crawldb ) 59 www.osforce.cn 60 www.osforce.cn 61 www.osforce.cn 8.6 InvertLinks(链接反转) 62 www.osforce.cn 63 www.osforce.cn 64 www.osforce.cn 65 www.osforce.cn 66 www.osforce.cn 67 LinkDB是MapFile Inlinks结构如下图所示 www.osforce.cn 68 www.osforce.cn 8.7 Indexer (建立索引) 69 www.osforce.cn 70 www.osforce.cn 71 www.osforce.cn 8.8 Index Dedup (索引去重) 72 www.osforce.cn 73 注意:这里的KEY是页面的数字签名(digest), 因此这种去重方法会存在一个网页的多个版本 www.osforce.cn 8.9 插件机制 默认使用的插件如下图所示: 74 parse-html成功就不会调用pase-tika 挨个调用,可以同时写到多个索引服务器 挨个调用 多协议支持 挨个调用 挨个调用 挨个调用 www.osforce.cn 系统提供的可插接点: 75 www.osforce.cn 76 在parse-html和parse-tika插件中调用 www.osforce.cn 77 www.osforce.cn 78 www.osforce.cn 79 www.osforce.cn 80 www.osforce.cn 81 www.osforce.cn 82 www.osforce.cn 83 8.10 OPIC(On-line Page Importance Calculation) www.osforce.cn 84 www.osforce.cn 85 www.osforce.cn 86 www.osforce.cn 87 www.osforce.cn 9、Nutch的使用 一些具体的实践方法及演示 9.1、下载并解压eclipse(集成开发环境) 下载地址:http://www.eclipse.org/downloads/,下 载Eclipse IDE for Java EE Developers 9.2、安装Subclipse插件(SVN客户端) 插件地址:http://subclipse.tigris.org/update_1.8.x, 9.3、安装IvyDE插件(下载依赖Jar) 插件地址: http://www.apache.org/dist/ant/ivyde/updatesite/ 88 www.osforce.cn 9.4、签出代码 File > New > Project > SVN > 从SVN 检出项目 创建新的资源库位置 > URL: https://svn.apache.org/repos/asf/nutch/tags/release- 1.7/ > 选中URL > Finish 弹出New Project向导,选择Java Project > Next, 输入Project name:nutch1.7 > Finish 89 www.osforce.cn 9.5、配置构建路径 在左部Package Explorer的 nutch1.7文件夹上单击右键 > Build Path > Configure Build Path... > 选中Source选项 > 选择src > Remove > Add Folder... > 选 择src/bin, src/java, src/test 和 src/testresources【对于插件, 需要选中src/plugin目录下的每一个插件目录下的src/java , src/test文件夹】 切换到Libraries选项 > Add Class Folder... > 选中nutch1.7/conf Add Library... > IvyDE Managed Dependencies > Next > Main > Ivy File > Browse > ivy/ivy.xml > Finish 【如需要在开 发环境中对插件进行开发调试,需要加入插件特定的ivy.xml】 切换到Order and Export选项> 选中conf > Top > OK 90 www.osforce.cn 9.6、执行ANT 在左部Package Explorer的 nutch1.7文件夹下的 build.xml文件上单击右键 > Run As > Ant Build 在左部Package Explorer的 nutch1.7文件夹上单击 右键 > Refresh 在左部Package Explorer的 nutch1.7文件夹上单击 右键 > Build Path > Configure Build Path... > 选中 Libraries选项 > Add Class Folder... > 选中build > OK 为什么加入build? 91 www.osforce.cn 92 www.osforce.cn 93 www.osforce.cn 94 www.osforce.cn 9.7、修改配置文件nutch-site.xml 和regex-urlfilter.txt 将nutch-site.xml.template改名为nutch-site.xml 将regex-urlfilter.txt.template改名为regex-urlfilter.txt 在左部Package Explorer的 nutch1.7文件夹上单击右键 > Refresh 将如下配置项加入文件nutch-site.xml: http.agent.name nutch http.content.limit -1 修改regex-urlfilter.txt,将 # accept anything else +. 替换为: +^http://([a-z0-9]*\.)*news.163.com/ (注意最后要有反斜杠且不能有空格) -. 95 www.osforce.cn 9.8、开发调试 在左部Package Explorer的 nutch1.7文件夹上单击 右键 > New > Folder > Folder name: urls 在刚新建的urls目录下新建一个文本文件url,文本内 容为:http://news.163.com/ 打开src/java下的org.apache.nutch.crawl.Crawl.java 类,单击右键Run As > Run Configurations > Arguments > 在Program arguments输入框中输入: urls -dir data -depth 3 > Run 在需要调试的地方打上断点Debug As > Java Applicaton 96 www.osforce.cn 9.9、查看结果 查看segments目录: 打开src/java下的 org.apache.nutch.segment.SegmentReader.java类 单击右键Run As > Java Applicaton,控制台会输出该命令的 使用方法 单击右键Run As > Run Configurations > Arguments > 在 Program arguments输入框中输入: -dump data/segments/* data/segments/dump 用文本编辑器打开文件data/segments/dump/dump查看 segments中存储的信息 97 www.osforce.cn 查看crawldb目录: 打开src/java下的 org.apache.nutch.crawl.CrawlDbReader.java类 单击右键Run As > Java Applicaton,控制台会输出该命令的 使用方法 单击右键Run As > Run Configurations > Arguments > 在 Program arguments输入框中输入: data/crawldb -stats 控制台会输出 crawldb统计信息 98 www.osforce.cn 查看linkdb目录: 打开src/java下的org.apache.nutch.crawl.LinkDbReader.java 类 单击右键Run As > Java Applicaton,控制台会输出该命令的 使用方法 单击右键Run As > Run Configurations > Arguments > 在 Program arguments输入框中输入: data/linkdb -dump data/linkdb_dump 用文本编辑器打开文件data/linkdb_dump/part-00000查看 linkdb中存储的信息 99 www.osforce.cn 10、一些优化技巧 100 案例背景:IDC内部抓取托管网站 www.osforce.cn 101 URL长度分布图 www.osforce.cn 102 www.osforce.cn 103 www.osforce.cn 104 www.osforce.cn 105 下面是在5亿URL 规模上的41轮抓取 统计结果 www.osforce.cn 106 www.osforce.cn 107 www.osforce.cn 108 www.osforce.cn 109 www.osforce.cn 110 www.osforce.cn 111 www.osforce.cn 112 www.osforce.cn 113 为什么会出现这么的差距? www.osforce.cn 114 单个站点网页太多,会拖慢整个Fetch的时间 115 参考资料: . 官网:http://nutch.apache.org/ . Wiki :http://wiki.apache.org/nutch/ . 书籍:Hadoop: The Definitive Guide, 3nd Edition . 视频:http://yangshangchuan.iteye.com/blog/1837935 116 ? Questions THANK YOU 117
还剩116页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 6 金币 [ 分享pdf获得金币 ] 8 人已下载

下载pdf

pdf贡献者

d478

贡献于2014-05-02

下载需要 6 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf