施磊磊的双周汇报书面版5.docx
- 文档编号:23283743
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:23
- 大小:243.12KB
施磊磊的双周汇报书面版5.docx
《施磊磊的双周汇报书面版5.docx》由会员分享,可在线阅读,更多相关《施磊磊的双周汇报书面版5.docx(23页珍藏版)》请在冰豆网上搜索。
施磊磊的双周汇报书面版5
双周汇报
最近一直在研究nutch,版本是0.9的,各项功能都是很齐全的,最后也是成功的实现了搜索引擎的一般功能,现在感觉在此基础之上要研究一下排序算法。
Nutch现在的发展的版本已经是蛮高的了,0.9的版本也是一个分界线,懂了最基本的功能以后就能实现更多的功能,现在界面能自己修改,和XX相比最重要的差别在于排序的算法方面的东西,这个nutch本身的算法并不是很好,只是类似于google的pagerank算法,看了很多的这方面的论文,改进的都是pagerank的算法,然后进行相关的实验就说是改进了该算法,我感觉这个很搞笑,只是和pagerank本身对比,我认为这个是没有什么可比性的,可以分析很多的论文,看看其他人用的的是什么样的排序算法,做了哪些方面的改进,然后效率提高了多少,也只有这样的实验或是对比才是让人感觉比较合乎逻辑的。
接下来我的重点就放在了排序算法的研究上,当然在其他的方面也是有很多值得我去改进的地方,每个搜索引擎的整体架构方面的算法很多,有很多值得我去完善的地方,下面先简要的介绍一下nutch的整体架构方面的知识点。
1、ApacheNutch
ApacheNutch是一个用于网络搜索的开源框架,它提供了我们运行自己的搜索引擎所需的全部工具,包括全文搜索和Web爬虫。
Nutch=lucene+hadoop+爬虫
1.1、Nutch的组件结构
WebDB:
存储网页数据和连接信息
Fetchlists:
将WebDB所存储的连接分成多个组,来用于分布式检索
Fetchers:
检索Fetchlist中的内容并下载到本地,共有两项输出:
分别是连接的update
信息和内容content
Updates:
更新WebDB的页面检索状态
WebDB、updates、fetchlists和fetchers组成循环结构,不断运行下去,来确保所得到的Web镜像是最新的
Content:
界面内容,获取内容之后,Nutch便可以根据它来创建索引并执行查询操作
Indexers:
对目标Content创建索引,当索引内容较大时,可把索引划分成多个索引片段,然后分配给不同的seracher实现并行检索
Searchers:
实现查询功能的同时也会缓存content
Webservers:
有两种角色:
1处理用户的交互请求(NutchSearchClient)
2从searchers中获取查询结果(HTTPServer)
注:
fetchers和searchers两个节点所对应的操作可放到分布式环境(hadoop)中去完成,这个方面的实践部分可以试一试,也就是这个分布式的环节使得这个nutch能够应用到我们现在的大数据时代。
不然的话肯定会被淘汰掉的,hadoop在分布式方面的成就或是说潜力是相当巨大的,当然hadoop有点偏向于实际的应用,我也看过了很多这方面的论文,分布式环境已经能够使用了,nutch还没有和这个结合,这个暑假实践一下hadoop和nutch的完全融合。
还有很多的东西要学习一下,动手能力和学术能力同样的重要。
创建索引及查询的操作可通过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过程中,每个MapReduceJob都会生成一个segment,名称以时间来命名
2、ApacheHadoop
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.缓存之后,程序会定期将缓存的键值对写入本地硬盘(执行如图所示的localwrite操作),并且把存储地址传回给master,以便master记录它们的位置用以执行Reduce操作。
5.当worker被通知执行Reduce操作时,master会把相应的Map输出数据所存储的地址也发送给该worker,以便其通过远程调用来获取这些数据。
得到这些数据之后,reduceworker会把具有相同Key值的记录组织到一起来达到排序的效果。
6.ReduceWorker会把排序后的数据作为参数传递到用户自定义的Reduce功能函数之中,而函数的输出结果会持久化存储到outputfile中去。
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的安装可通过如下命令完成:
$sudoapt-getinstallssh
$sudoapt-getinstallrsync
3.1.3安装JDK
$apt-getinstallopenjdk-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-trsa-P''-f~/.ssh/id_rsa
$cat~/.ssh/id_rsa.pub>>~/.ssh/authorized_keys
(2)将证书文件复制到其他机器的用户主目录下
$scp/home/nutch/.sshauthorized_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文件
exportHADOOP_HOME=/PATH/TO/HADOOP_HOME
exportJAVA_HOME=/PATH/TO/JDK_HOME
exportHADOOP_LOG_DIR=${HADOOP_HOME}/logs
(2)core-site.xml文件
//master:
9000
(3)hdfs-site.xml文件
(4)mapred-site.xml文件
9001
(5)masters和slaves配置
将相应的机器IP加到对应的配置文件中去
3.2.3Nutch配置
$NUTCH_HOME/conf目录下
(1)nutch-site.xml文件
(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/hadoopnamenode–format
2.启动hadoop进程
bin/start-all.sh
启动成功后,可通过如下url查看NameNode和MapReduce运行状态
NameNode:
http:
//master:
50070/
MapReduce:
http:
//master:
50030/
3.向hdfs放入测试数据
$bin/hadoopfs-putconfinput
4.执行测试
$bin/hadoopjarhadoop-examples-*.jargrepinputoutput'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)在控制台执行exportJAVA_HOME=/PATH/TO/JAVA命令
2向HDFS中存入待检索数据
$bin/hadoopfs-puturldirurldir
注:
第一个urldir为本地文件夹,存放了url数据文件,每行一个url
第二个urldir为HDFS的存储路径
3启动nutch命令
在NUTCH_HONE/runtime/deploy目录下执行以下命令
$bin/nutchcrawlurldir–dircrawl-depth3–topN10
命令成功执行后,会在HDFS中生成crawl目录
注:
一定要在deploy目录下执行该命令,在local目录下执行的是单机采集,而没有使用hadoop环境。
参考文献:
[1]foxman209的专栏,Windows下Nutch的配置01:
38
[2]AnsenQ,nutch的环境配置介绍17:
39
[3]虾皮,Hadoop集群(第5期)Hadoop安装配置
Hadoop的读书笔记
1-2章Hadoop和MapReduce概述
1.基本组成
Hadoop-0.20.0以前
Core----一系列分布式文件系统和通用I/O的组件和接口(序列化、JavaRPC和持久化数据结构)
Avro----一种提供高效、跨语言PRC的数据序列化系统,持久化数据存储。
MapReduce----分布式数据处理模式和执行环境,运行于大型商用机集群;
HDFS----分布式文件系统,运行于大型商用机集群;
ZooKeeper----一个分布式的、高可用性的协调服务;
Pig----一种数据流语言和运行环境,用以检索非常大的数据集,运行在MapReduce和HDFS集群上;
Chukwa------分布式数据收集和分析系统;
Hive---分布式数据仓库,Hive管理HDFS中存储的数据,并提供基于SQL的查询语言用以查询数据;
Hbase-----一个分布式的、列存储数据库。
HBase使用HDFS作为底层存储,同时支持MapReduce的批量式计算和点查询。
2.MapReduce执行作业流程
指定作业的各种参数;
指定输入、输出路径;
指定Map和Reduce类;
指定Map和Reduce的输出类型;
运行作业。
第3章Hadoop分布式文件系统
3-1文件读取
3-2文件写入
第4章Hadoop的I/O
1.读取存储在HDFS上的文件时,为了加快速度可以禁用校验和;
2.文件的压缩支持多种格式,比如zip、gzip、bzip2等;
3.序列化-----将结构化的对象转为字节流以便于通过网络进行传输或者写入持久存储的过程。
反序列化------将字节流转为一系列结构化对象的过程。
Hadoop自己的序列化格式为Writables,紧凑、快速,但不易扩展java以外的语言,MapReduce程序使用Writables来序列化key/value对。
此外,short和char类型均可存储在IntWritable中;
4.文件的容器SequenceFile类和MapFile类,共同点是两者都是按key排序的,区别是后者有索引。
第5章MapReduce应用开发
1.配置文件和运行环境的选取,有本地环境、伪分布式环境、分布式集群环境三种运行模式,可以分别配置不同格式的xml文件以初始化一些基本环境参数;
2.编写完Mapper和Reducer之后要编写单元测试来测试函数的有效性,接着是在本地(是否是伪分布式还不确定)运行数据测试,然后再集群上测试;
3.后期还涉及到一些调试、作业调优等工作。
一些复杂的任务都是由多个MapReduce作业分阶段完成,至于工作流的调度还有待于优化。
第6章MapReduce的工作原理
1.运行MapReduce作业的工作原理
在第二步之后,JobTracker会检查作业输出说明,计算作业的输入划分;第五步创建作业对象,它封装了任务和记录信息,以便跟踪每个任务的状态和进程;第六步为每个inputsplit分配一个map,实际的map个数是由splits个数决定的;第八步拷贝文件,六步中的inputsplit只是对实际数据的引用。
2.故障
任务失败,tasktracker失败和jobtracker失败;
3.作业的调度
FIFO,FairSchedule
4.Shffle和排序
Map端可以通过调整内存缓冲区、属性配置加快patition和针对每个分区的排序;reduce端类似
5.任务的执行
推测式执行,JVM重用,坏记录的处理。
map端详细流程:
第7章MapReduce的类型与格式
几种MapReduce输入/输出的类型:
文本、二进制、数据库等
输入文件:
文件是MapReduce任务的数据的初始存储地。
正常情况下,输入文件一般是存在HDFS里。
这些文件的格式可以是任意的;我们可以使用基于行的日志文件,也可以使用二进制格式,多行输入记录或其它一些格式。
这些文件会很大—数十G或更大。
输入格式:
InputFormat类定义了如何分割和读取输入文件,它提供有下面的几个功能:
选择作为输入的文件或对象;
定义把文件划分到任务的InputSplits;
为RecordReader读取文件提供了一个工厂方法;
Hadoop自带了好几个输入格式。
其中有一个抽象类叫FileInputFormat,所有操作文件的InputFormat类都是从它那里继承功能和属性。
当开启Hadoop作业时,FileInputFormat会得到一个路径参数,这个路径内包含了所需要处理的文件,FileInputFormat会读取这个文件夹内的所有文件(译注:
默认不包括子文件夹内的),然后它会把这些文件拆分成一个或多个的InputSplit。
你可以通过JobConf对象的setInputFormat()方法来
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 磊磊 双周 汇报 书面