Nutch+Hadoop集群搭建 分类: H3_NUTCH 2015-01-18 10:55 362人阅读 评论(0) 收藏
转载自:http://www.open-open.com/lib/view/open1328670771405.html
1、Apache Nutch
Apache Nutch是一个用于网络搜索的开源框架,它提供了我们运行自己的搜索引擎所需的全部工具,包括全文搜索和Web爬虫。
1.1、Nutch的组件结构
WebDB:存储网页数据和连接信息
Fetch lists:将WebDB所存储的连接分成多个组,来用于分布式检索
Fetchers:检索Fetch list中的内容并下载到本地,共有两项输出:分别是连接的update
信息和内容content
Updates:更新WebDB的页面检索状态
WebDB、updates、fetch lists和fetchers组成循环结构,不断运行下去,来确保所得到的Web镜像是最新的
Content:界面内容,获取内容之后,Nutch便可以根据它来创建索引并执行查询操作
Indexers:对目标Content创建索引,当索引内容较大时,可把索引划分成多个索引片段,然后分配给不同的seracher实现并行检索
Searchers:实现查询功能的同时也会缓存content
Webservers:有两种角色:
1处理用户的交互请求(Nutch Search Client)
2从searchers中获取查询结果(HTTP Server)
注:fetchers和searchers两个节点所对应的操作可放到分布式环境(hadoop)中去完成
创建索引及查询的操作可通过solr框架来实现
1.2、Nutch的数据结构:
Nutch数据包含3个目录结构,分别是:
1、Crawldb:用于存储Nutch将要检索的url信息,以及检索状态(是否检索、何时检索)
2、Linkdb:用于存储每一个url所包含的超链接信息(包括锚点)
3、Segments:一组url的集合,他们作为一个检索单元,可用于分布式检索
Segment目录包含以下子目录信息:
(1) crawl_generate:定义将要检索的url集合(文件类型为SequenceFile)
(2) crawl_fetch:存储每一个url的检索状态(文件类型为MapFile)
(3) content:存储每一个url所对应的二进制字节流(文件类型为MapFile)
(4) parse_text:存储每一个url所解析出的文本内容(文件类型为MapFile)
(5) parse_data:存储每一个url所解析出的元数据(文件类型为MapFile)
(6) crawl_parse:用于及时更新crawldb中的内容(如要检索的url已不存在等情况)--文件类型为SequenceFile
注:结合Nutch的数据结构和组件结构来看,crawldb相当于WebDB,而segment相当于是fetchlists.
分布式crawl过程中,每个MapReduce Job都会生成一个segment,名称以时间来命名
2、Apache Hadoop
Nutch的单机采集(local方式)并不复杂,然而当所采集的数据源较大时,一台机器难以满足性能上的需求,因此通常的做法是将Nutch集成到Hadoop环境中以完成分布式采集和分布式查询的效果(deploy方式)。
Hadoop框架在功能划分上包含3个子框架,分别是:
MapReduce:用于分布式并行计算
HDFS:用于分布式存储
Common:封装HDFS和MapReduce所需要的实用类
2.1、MapReduce工作流程
1.将输入源(Inputfiles)切割成不同的片段,每个片段的大小通常在16M-64M之间(可通过参数配置),然后启动云端程序。
2.MapReduce程序基于master/slaves方式部署,在云端机器中选中一台机器运行master程序,职责包括:调度任务分配给slaves,监听任务的执行情况。
3.在图形中,slave的体现形式为worker,当worker接到Map任务时,会读取输入源片段,从中解析出Key/Value键值对,并作为参数传递到用户自定义的Map功能函数之中,Map功能函数的输出值同样为Key/Value键值对,这些键值对会临时缓存在内存里面。
4.缓存之后,程序会定期将缓存的键值对写入本地硬盘(执行如图所示的local write操作),并且把存储地址传回给master,以便master记录它们的位置用以执行Reduce操作。
5.当worker被通知执行Reduce操作时,master会把相应的Map输出数据所存储的地址也发送给该worker,以便其通过远程调用来获取这些数据。得到这些数据之后,reduce worker会把具有相同Key值的记录组织到一起来达到排序的效果。
6.Reduce Worker会把排序后的数据作为参数传递到用户自定义的Reduce功能函数之中,而函数的输出结果会持久化存储到output file中去。
7.当所有的Map任务和Reduce任务结束之后,Master会重新唤醒用户主程序,至此,一次MapReduce操作调用完成。
2.2、HDFS组件结构
同MapReduce部署结构类似,HDFS同样具备master/slaves主仆结构
1.如图所示中,NameNode充当master角色,职责包括:管理文档系统的命名空间(namespace);调节客户端访问到需要的文件(存储在DateNode中的文件)
注:namespace—映射文件系统的目录结构
2.DataNodes充当slaves角色,通常情况下,一台机器只部署一个Datenode,用来存储MapReduce程序需要的数据
Namenode会定期从DataNodes那里收到Heartbeat和Blockreport反馈
Heartbeat反馈用来确保DataNode没有出现功能异常;
Blockreport包含DataNode所存储的Block集合
2.3、hadoop资源
1 http://wiki.apache.org/nutch/NutchHadoopTutorial基于Nutch和Hadoop完成分布式采集和分布式查询
3、环境搭建
3.1、需要准备
3.1.1两台或以上Linux机器(这里假定为两台)
一台机器名称设置为master,另一台设置为slave01,两台机器具有相同的登录用户名nutch,并且将两台机器的etc/hosts文件设置成相同的内容,如:
192.168.7.11 master
192.168.7.12 slave01
……
这样,便可以通过主机名找到对应的机器
3.1.2搭建ssh环境
ssh的安装可通过如下命令完成:
$ sudo apt-get install ssh
$ sudo apt-get install rsync
3.1.3安装JDK
$ apt-get install openjdk-6-jdkopenjdk-6-jre
3.1.4下载最近版本的hadoop和nutch
下载地址:
Hadoop: http://www.apache.org/dyn/closer.cgi/hadoop/common/
Nutch: http://www.apache.org/dyn/closer.cgi/nutch/
3.2、搭建配置
3.2.1SSH登录配置
(1)在master机器上通过以下命令生成证书文件authorized_keys
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
(2)将证书文件复制到其他机器的用户主目录下
$scp /home/nutch/.ssh authorized_keys nutch@slave01:/home/nutch/.ssh/authorized_keys
通过以上两步操作,master机器便可以在不需要密码的情况下ssh到slave01机器上
3.2.2HADOOP配置
同ssh登录证书的配置类似,HADOOP配置同样是在master机器上完成,然后在复制到slave机器上,确保每一台机器的hadoop环境相同
$HADOOP_HOME/conf目录下:
(1)hadoop-env.sh文件
export HADOOP_HOME=/PATH/TO/HADOOP_HOME
export JAVA_HOME=/PATH/TO/JDK_HOME
export HADOOP_LOG_DIR=${HADOOP_HOME}/logs
(2)core-site.xml文件
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
(3)hdfs-site.xml文件
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/nutch/filesystem/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/nutch/filesystem/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
(4)mapred-site.xml文件
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>master:9001</value>
</property>
<property>
<name>mapred.map.tasks</name>
<value>2</value>
</property>
<property>
<name>mapred.reduce.tasks</name>
<value>2</value>
</property>
<property>
<name>mapred.system.dir</name>
<value>/nutch/filesystem/mapreduce/system</value>
</property>
<property>
<name>mapred.local.dir</name>
<value>/nutch/filesystem/mapreduce/local</value>
</property>
</configuration>
(5)masters和slaves配置
将相应的机器IP加到对应的配置文件中去
3.2.3 Nutch配置
$NUTCH_HOME/conf目录下
(1)nutch-site.xml文件
<property>
<name>http.agent.name</name>
<value>Nutch Spider</value>
</property>
(2)regex-urlfilter.txt
添加需要检索的url
+^http://([a-z0-9]*\.)*nutch.apache.org/
(3)将修改后的文件放到NUTCH_HOME/runtime/deploy/nutch-*.job中
3.3、启动运行
3.3.1 启动Hadoop
1.格式化namenode节点
bin/hadoop namenode –format
2.启动hadoop进程
bin/start-all.sh
启动成功后,可通过如下url查看NameNode和MapReduce运行状态
NameNode: http://master:50070/
MapReduce: http://master:50030/
3.向hdfs放入测试数据
$ bin/hadoop fs -put conf input
4.执行测试
$ bin/hadoop jar hadoop-examples-*.jar grep input output'dfs[a-z.]+'
5.关闭hadoop进程
bin/stop-all.sh
3.3.2 运行Nutch
1启动前提:
(1).hadoop已成功启动
(2).将HADOOP_HOME/bin路径添加到环境变量中,以便Nutch找到hadoop命令
通过修改/etc/enviroment配置文件实现
(3)在控制台执行export JAVA_HOME=/PATH/TO/JAVA命令
2向HDFS中存入待检索数据
$ bin/hadoop fs -put urldir urldir
注:第一个urldir为本地文件夹,存放了url数据文件,每行一个url
第二个urldir为HDFS的存储路径
3启动nutch命令
在NUTCH_HONE/runtime/deploy目录下执行以下命令
$ bin/nutch crawl urldir –dir crawl -depth 3 –topN 10
命令成功执行后,会在HDFS中生成crawl目录
注:一定要在deploy目录下执行该命令,在local目录下执行的是单机采集,而没有使用hadoop环境
Nutch+Hadoop集群搭建 分类: H3_NUTCH 2015-01-18 10:55 362人阅读 评论(0) 收藏的更多相关文章
- 博弈论入门小结 分类: ACM TYPE 2014-08-31 10:15 73人阅读 评论(0) 收藏
文章原地址:http://blog.csdn.net/zhangxiang0125/article/details/6174639 博弈论:是二人或多人在平等的对局中各自利用对方的策略变换自己的对抗策 ...
- Windows7下QT5开发环境搭建 分类: QT开发 2015-03-09 23:44 65人阅读 评论(0) 收藏
Windows7下QT开法环境常见搭配方法有两种. 第一种是:QT Creator+QT SDK: 第二种是:VS+qt-vs-addin+QT SDK: 以上两种均可,所需文件见QT社区,QT下载地 ...
- Nginx平台构架 分类: Nginx 2015-07-13 10:55 205人阅读 评论(0) 收藏
深入理解Nginx模块发开与架构解析读书笔记. nginx在启动后,在unix系统中会以daemon的方式(可以手动关闭 nginx.conf daemon off)在后台运行,后台进程包含一个mas ...
- iOS8 UISearchViewController搜索功能讲解 分类: ios技术 2015-07-14 10:23 76人阅读 评论(0) 收藏
在iOS8以前我们实现搜索功能需要用到UISearchbar和UISearchDisplayController, 在iOS8之后呢, UISearchController配合UITableView的 ...
- 基于命令行编译打包phonegap for android应用 分类: Android Phonegap 2015-05-10 10:33 73人阅读 评论(0) 收藏
也许你习惯了使用Eclipse编译和打包Android应用.不过,对于使用html5+js开发的phonegap应用,本文建议你抛弃Eclipse,改为使用命令行模式,绝对的快速和方便. 一直以来,E ...
- 网站通用登录模块代码 分类: ASP.NET 2014-12-06 10:49 615人阅读 评论(0) 收藏
1.HTML部分: <form id="form1" runat="server"> <script src=".. ...
- 欧拉回路-Door Man 分类: 图论 POJ 2015-08-06 10:07 4人阅读 评论(0) 收藏
Door Man Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 2476 Accepted: 1001 Description ...
- 多校3- RGCDQ 分类: 比赛 HDU 2015-07-31 10:50 2人阅读 评论(0) 收藏
RGCDQ Time Limit:3000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Status Practic ...
- makefile基础实例讲解 分类: C/C++ 2015-03-16 10:11 66人阅读 评论(0) 收藏
一.makefile简介 定义:makefile定义了软件开发过程中,项目工程编译链.接接的方法和规则. 产生:由IDE自动生成或者开发者手动书写. 作用:Unix(MAC OS.Solars)和Li ...
随机推荐
- Filebeat的下载(图文讲解)
第一步:进入Elasticsearch的官网 https://www.elastic.co/ 第二步:点击downloads https://www.elastic.co/downloads 第三步: ...
- node 内存溢出
遇到这个问题的人可以更快解决 再复制写一篇 利于百度搜索 坑爹的node 内存溢出 react开发项目 安装一个插件依赖 ,然后就报错了 报错如下(自己的没有截图出来 这是从别人的截图---报错基本 ...
- 字符设备驱动-------Linux异常处理体系结构
裸机中断流程 外部触发 CPU 发生中断, 强制的跳到异常向量处 跳转到具体函数 保存被中断处的现场(各种寄存器的值) 执行中断处理函数,处理具体任务 恢复被中断的现场 Linux处理异常流程 异常发 ...
- 洛谷 P3056 [USACO12NOV]笨牛Clumsy Cows
P3056 [USACO12NOV]笨牛Clumsy Cows 题目描述 Bessie the cow is trying to type a balanced string of parenthes ...
- C 字符/字符串经常使用函数
string.h中经常使用函数 char * strchr(char * str ,char ch); 从字符串str中查找首次出现字符ch的位置,若存在返回查找后的地址.若不存在则返回NULL vo ...
- PHP盛宴——经常使用函数集锦
近期写了蛮多PHP,也接触到挺多经常使用的函数,大多都记了笔记,发个博客出来.共同学习.事实上感觉学习一门语言,语法逻辑是软素养.而对语言的熟悉程度仅仅能随着使用时间的增长而慢慢增长,当对一门语言的函 ...
- hdu 2795 Billboard(线段树单点更新)
Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- java8新增特性(二)----函数式接口(Functional)
上一篇博客介绍了java8新增的Lambda表达式,这一节介绍一下java8的函数式编程,两者之间有什么联系呢?请往下看~~~ Lambda表达式怎样在java类型中表示的呢? 语言设计者投入了大量的 ...
- golang 获取环境信息
os.Environ() os.Getenv("TMP")
- [置顶]
WebService学习总结(1)——WebService相关概念
一.序言 大家或多或少都听过 WebService(Web服务),有一段时间很多计算机期刊.书籍和网站都大肆的提及和宣传WebService技术,其中不乏很多吹嘘和做广告的成 分.但是不得不承认的是W ...