package org.apache.nutch.crawl;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;
// Commons Logging imports
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.hadoop.io.*;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.conf.*;
import org.apache.hadoop.mapred.*;
import org.apache.hadoop.util.*;
import org.apache.nutch.util.HadoopFSUtil;
import org.apache.nutch.util.LockUtil;
import org.apache.nutch.util.NutchConfiguration;
import org.apache.nutch.util.NutchJob;
import org.apache.nutch.util.TimingUtil;
//这是个MapReduce程序,crawldb继承Configured实现Tool的run方法
public class CrawlDb extends Configured implements Tool {
//下面是日志和一些常量
public static final Logger LOG = LoggerFactory.getLogger(CrawlDb.class);
public static final String CRAWLDB_ADDITIONS_ALLOWED = "db.update.additions.allowed";
public static final String CRAWLDB_PURGE_404 = "db.update.purge.404";
public static final String CURRENT_NAME = "current";
public static final String LOCK_NAME = ".locked";
//空的构造函数
public CrawlDb() {}
//带参数的构造函数,参数是配置文件
public CrawlDb(Configuration conf) {
setConf(conf);
}
//这个方法,查看crawldb和segments的路径是否存在这两个文件
public void update(Path crawlDb, Path[] segments, boolean normalize, boolean filter) throws IOException {
boolean additionsAllowed = getConf().getBoolean(CRAWLDB_ADDITIONS_ALLOWED, true);
update(crawlDb, segments, normalize, filter, additionsAllowed, false);
}
public void update(Path crawlDb, Path[] segments, boolean normalize, boolean filter, boolean additionsAllowed, boolean force) throws IOException {
//根据配置信息(执行crawldb时后面的参数)创建一个文件系统
FileSystem fs = FileSystem.get(getConf());
//创建crawldb文件路径
Path lock = new Path(crawlDb, LOCK_NAME);
//这个类主要是判断crawldb文件能不能创建的,看一下这个类的方法
// public static void createLockFile(FileSystem fs, Path lockFile, boolean accept) throws IOException {
//因为输入的时候第二个参数是crawldb的目录位置,还因为ntuch的容错功能,所以他判断你这输入的是不是个文件,在判断这目录是不是有crawldb这个文件
//不满足条件直接退出,IO异常
// if (fs.exists(lockFile)) {
nutch源码crawldb类源代码分析
最新推荐文章于 2021-12-28 12:29:22 发布
本文深入探讨了Nutch的Crawldb类源代码,详细分析了其在爬虫数据存储和管理中的关键实现,包括URL抓取、数据库更新以及数据持久化等方面,为理解Nutch爬虫框架提供了重要参考。
摘要由CSDN通过智能技术生成