首页 > 大数据 > Hadoop > Nutch加Hadoop集群搭建
1、Apache Nutch
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)
(2)
(3)
(4)
(5)
(6)
注:结合Nutch的数据结构和组件结构来看,crawldb相当于WebDB,而segment相当于是fetchlists.
分布式crawl过程中,每个MapReduce Job都会生成一个segment,名称以时间来命名
2、Apache Hadoop
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.2、搭建配置
export HADOOP_HOME=/PATH/TO/HADOOP_HOME
export JAVA_HOME=/PATH/TO/JDK_HOME
export HADOOP_LOG_DIR=${HADOOP_HOME}/logs
fs.default.name
hdfs://master:9000
dfs.name.dir
/nutch/filesystem/name
dfs.data.dir
/nutch/filesystem/data
dfs.replication
1
mapred.job.tracker
master:9001
mapred.map.tasks
2
mapred.reduce.tasks
2
mapred.system.dir
/nutch/filesystem/mapreduce/system
mapred.local.dir
/nutch/filesystem/mapreduce/local
(5)masters和slaves配置
将相应的机器IP加到对应的配置文件中去
3.2.3 Nutch配置
$NUTCH_HOME/conf目录下
(1)nutch-site.xml文件
http.agent.name
Nutch Spider
(2)regex-urlfilter.txt
添加需要检索的url
+^http://([a-z0-9]*.)*nutch.apache.org/
3.3、启动运行
3.3.1 启动Hadoop
3.3.2 运行Nutch
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环境
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/21652718/viewspace-1120222/ ,如需转载,请注明出处,否则将追究法律责任。