package com.lxing.main;
import com.lxing.fetch.FetchDriver;
import com.lxing.index.IndexDriver;
import com.lxing.inject.InjectDriver;
import com.lxing.optimize.OptimizerDriver;
import com.lxing.parse.ParserArticleDriver;
import com.lxing.parse.ParserUrlDriver;
import com.lxing.util.HbaseUtil;
import com.lxing.util.LuceneUtil;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.util.ToolRunner;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.wltea.analyzer.lucene.IKAnalyzer;
import java.nio.file.Paths;
/**
* @Description:
* @author: 路星星
* @version: 1.0
* @date: 10:06 2017/5/27
*/
public class CrawlerAndIndex {
public static Logger logger = LoggerFactory.getLogger(CrawlerAndIndex.class);
private InjectDriver injectDriver;//注入驱动
private FetchDriver fetchDriver;//爬取驱动
private ParserUrlDriver parserUrlDriver;//解析URL驱动
private OptimizerDriver optimizerDriver;//去重url驱动
private ParserArticleDriver parserArticleDriver;//解析文章驱动
private IndexDriver indexDriver;//建立索引驱动
public CrawlerAndIndex() {
injectDriver = new InjectDriver();
fetchDriver = new FetchDriver();
parserUrlDriver = new ParserUrlDriver();
optimizerDriver = new OptimizerDriver();
parserArticleDriver = new ParserArticleDriver();
indexDriver = new IndexDriver();
}
public static void main(String[] args) throws Exception {
Configuration conf = HBaseConfiguration.create();
conf.addResource("app-config.xml");
conf.addResource("hbase-site.xml");
String outPath = conf.get("hdfs.index.path");
String localPath = conf.get("local.index.path");
String cacheLocalPath = conf.get("localcache.index.path");
CrawlerAndIndex crawlerAndIndex = new CrawlerAndIndex();
String depthString = conf.get("crawler.depth");
if(depthString.equals("")||depthString==null){
System.out.println("请在app-config.xml中配置crawler.depth,即爬虫深度");
}
int depth=Integer.valueOf(depthString);
// 第一步: 注入待抓取的网页url
int in = crawlerAndIndex.injectDriver.injectFromLocal(conf);
if (in == 0) {
logger.error("注入待抓取的url失败!!");
return;
}
// 第二步:循环抓取网页并解析网页上的url,根据正则表达式获取需要的url,并进行去重处理
for (int i = 1; i <= depth; i++) {
System.out.println("第 " + i + " 层:开始执行FetchDriver,下载页面");
int fetchCode = ToolRunner.run(crawlerAndIndex.fetchDriver, args);
if (fetchCode == 0) {
logger.error("第" + i + "次抓取网页失败!!");
return;
}
System.out.println("第 " + i + " 层:开始执行parserUrlDriver,分析页面提取URL");
int parserUrlCode =
ToolRunner.run(crawlerAndIndex.parserUrlDriver, args);
if (parserUrlCode == 0) {
logger.error("第" + i + "次解析网页url失败!!");
return;
}
System.out.println("第 " + i + " 层:开始执行OptimizerDriver,优化URL");
int optimizerCode =
ToolRunner.run(crawlerAndIndex.optimizerDriver, args);
if (optimizerCode == 0) {
logger.error("第" + i + "次优化网页url失败!!");
return;
}
System.out.println("第 " + i + " 层:抓取完毕");
}
// 第三步:解析已抓取的网页信息,获取文章内容并存储
int parserArticleCode = ToolRunner.run(crawlerAndIndex.parserArticleDriver,
args);
if (parserArticleCode == 0) {
logger.error("解析网页文章信息失败!!!");
return;
}
// 第四步:为获取的文章信息建索引
int indexCode = ToolRunner.run(crawlerAndIndex.indexDriver, args);
if (indexCode == 0) {
logger.error("索引建立失败!!!");
return;
}
// 第五步:清空中间表,以备下次使用
HbaseUtil.clearCache(conf);
// 第六步:将索引移至本地,并与本地索引合并
final FileSystem fs = FileSystem.get(conf);
fs.moveToLocalFile(new Path(outPath),new Path(cacheLocalPath));
fs.deleteOnExit(new Path(outPath));
LuceneUtil.mergeIndex(Paths.get(cacheLocalPath),Paths.get(localPath),new IKAnalyzer(true));
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
利用hadoop的mapreduce和Hbase,基于lucene做的简单的搜索引擎 基本介绍 InjectDriver 将本地的url注入到hbase数据库中等待下一步执行 FetchDriver 负责抓取url对应的网页内容 ParserUrlDriver 解析所抓取网页内容的所有url,并过滤掉不需要的url ParserArticleDriver 解析对应url网页内容上的文章信息,以CSDN为例 OptimizerDriver 将解析的url与已经抓取的url做对比,去掉重复的url并加入,等待下次抓取
资源推荐
资源详情
资源评论
收起资源包目录
crawler-hadoop-lucene-master.zip (34个子文件)
crawler-hadoop-lucene-master
CrawlerHadoopHbase
url 42B
pom.xml 5KB
src
main
resources
hbase-site.xml 547B
app-config.xml 3KB
log4j.properties 11KB
java
com
lxing
index
IndexOutputFormat.java 3KB
IndexMapper.java 2KB
IndexAllDriver.java 2KB
IndexDriver.java 2KB
parse
ParserArticleDriver.java 3KB
ParserArticleMapper.java 4KB
ParserUrlMapper.java 2KB
ParserUrlDriver.java 2KB
inject
InjectDriver.java 3KB
fetch
FetchReducer.java 2KB
FetchMapper.java 1KB
FetchDriver.java 2KB
HostPartitioner.java 890B
optimize
OptimizerReducer.java 2KB
OptimizerMapper.java 2KB
OptimizerDriver.java 2KB
main
InitTable.java 603B
Crawler.java 4KB
IndexAll.java 2KB
CrawlerAndIndex.java 5KB
UML.puml 423B
ClearAll.java 549B
Index.java 2KB
util
Crawler.java 4KB
Parser.java 5KB
LuceneUtil.java 3KB
HbaseUtil.java 5KB
domain
LuceneDocumentWritable.java 510B
Article.java 2KB
共 34 条
- 1
资源评论
博士僧小星
- 粉丝: 2250
- 资源: 5989
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功