【Nutch2.2.1源码分析之一】Nutch加载配置文件的方法

1、NutchConfiguration.java用于加载及获取Nutch的相关参数。

Utility to create Hadoop Configurations that include Nutch-specific  resources.

即它会加载hadoop及nutch中的参数文件。

关键是2个create()方法,它加载了参数文件的同时,又返回了Configuration对象。

2、不带参数的create方法

public static Configuration create() {
    Configuration conf = new Configuration();
    setUUID(conf);
    addNutchResources(conf);
    return conf;
  }

首先,new Configuration()时,默认会加载core-default.xml与core-site.xml。

然后增加UUID这个参数。

最后增加nutch相关的参数:

 private static Configuration addNutchResources(Configuration conf) {
    conf.addResource("nutch-default.xml");
    conf.addResource("nutch-site.xml");
    return conf;
  }

关于Configuraion,请参见:http://blog.csdn.net/jediael_lu/article/details/38751885

关于UUID,请参见:http://blog.csdn.net/jediael_lu/article/details/38758337

3、带参数的create方法

/** Create a {@link Configuration} from supplied properties.
   * @param addNutchResources if true, then first <code>nutch-default.xml</code>,
   * and then <code>nutch-site.xml</code> will be loaded prior to applying the
   * properties. Otherwise these resources won't be used.
   * @param nutchProperties a set of properties to define (or override)
   */
  public static Configuration create(boolean addNutchResources, Properties nutchProperties) {
    Configuration conf = new Configuration();
    setUUID(conf);
    if (addNutchResources) {
      addNutchResources(conf);
    }
    for (Entry<Object, Object> e : nutchProperties.entrySet()) {
      conf.set(e.getKey().toString(), e.getValue().toString());
    }
    return conf;
  }

此方法根据传入参数决定是否加载core-default.xml与core-site.xml,然后再加载properties中的属性。

4、NutchConfiguration使用了单例模式,

  private NutchConfiguration() {} // singleton

通过上述的create方法得到一个Configuration对象。

事实上,这不是一个典型的单例模式,因为create返回的不是NutchConfiguration对象,而是Configuration对象,,并且是通过静态方法来得到这个对象。

关于单例械,可参考:【设计模式:单例模式】使用单例模式加载properties文件

5、这个类可以参考用作基于hadoop的应用程序的加载配置文件的典型方法。

6、Nutch中调用NutchConfiguration的方法:

  public static void main(String[] args) throws Exception {
    final int res = ToolRunner.run(NutchConfiguration.create(),
        new SolrIndexerJob(), args);
    System.exit(res);
  }

关于ToolRunner,请参见:http://blog.csdn.net/jediael_lu/article/details/38751885

时间: 2024-12-10 11:24:56

【Nutch2.2.1源码分析之一】Nutch加载配置文件的方法的相关文章

【Spring源码分析】Bean加载流程概览

代码入口 之前写文章都会啰啰嗦嗦一大堆再开始,进入[Spring源码分析]这个板块就直接切入正题了. 很多朋友可能想看Spring源码,但是不知道应当如何入手去看,这个可以理解:Java开发者通常从事的都是Java Web的工作,对于程序员来说,一个Web项目用到Spring,只是配置一下配置文件而已,Spring的加载过程相对是不太透明的,不太好去找加载的代码入口. 下面有很简单的一段代码可以作为Spring代码加载的入口: 1 ApplicationContext ac = new Clas

【MyBatis源码分析】Configuration加载(上篇)

config.xml解析为org.w3c.dom.Document 本文首先来简单看一下MyBatis中将config.xml解析为org.w3c.dom.Document的流程,代码为上文的这部分: 1 static { 2 try { 3 reader = Resources.getResourceAsReader("mybatis/config.xml"); 4 ssf = new SqlSessionFactoryBuilder().build(reader); 5 } 6 c

Spring源码解析-applicationContext.xml加载和bean的注册

applicationContext文件加载和bean注册流程? Spring对于从事Java开发的boy来说,再熟悉不过了,对于我们这个牛逼的框架的介绍就不在这里复述了,Spring这个大杂烩,怎么去使用怎么去配置,各种百度谷歌都能查到很多大牛教程,但是,当我们按着教程一步步的把spring的开发框架搭建起来的时候,有没有一种想搞明白spring的冲动,万事开头难,就要从开头开始,而我认为spring开头就是如何加载配置文件,并初始化配置文件里面的bean当然也包括了我们用注解Service.

阅读jquery源码与js依赖加载的模块化!

阅读源码肯定是先下载有注释的源码 我也是醉了,10309 行代码,在陆续续的一个月之内,看完了,虽有收获但收获不大, 直到又一次看jquery的github,怎么会有cmd????没听过使用jquery时候还要用requresjs啊,这是咋回事啊,jquery不是一个独立的js库么, 不过看着 src文件夹下的目录,倒是非常清晰,每个文件里面的文件代码也不多,研究 代码也容易了 然后看了下grunt 配置文件才明白, 原来jq的作者为了在开发的时候,分清楚jq的内部结构,用amd的方式进行模块化

spring源码阅读(二) Bean加载之自定义标签加载

紧接着上一篇关于spring默认标签加载,这一篇来看下自定义标签的加载 继续从 DefaultBeanDefinitionDocumentReader来看 protected void parseBeanDefinitions(Element root, BeanDefinitionParserDelegate delegate) { if (delegate.isDefaultNamespace(root)) { NodeList nl = root.getChildNodes(); for(

Prism 源码解读2-View的加载和控制

介绍 上一篇介绍了Region,这一篇跟Region息息相关,讲一下Region中View的加载方式及控制. 4.ViewDiscovery 在创建好Region后需要将View添加到Region中.先补充几个概念 在上一篇将了如何创建Region,现在让我们看看Region类是什么 private ViewsCollection views; private ViewsCollection activeViews; 这是一个View集合,集合改变会触发CollectionChanged事件 其

spring源码阅读(一) Bean加载之默认标签加载

接着上文的内容,我们经历了xml资源文件的校验/解析/终于要进入到Bean的加载中了. 上文进行到: protected void parseBeanDefinitions(Element root, BeanDefinitionParserDelegate delegate) { if (delegate.isDefaultNamespace(root)) { NodeList nl = root.getChildNodes(); for(int i = 0; i < nl.getLength

【Spring源码分析】配置文件读取流程

前言 Spring配置文件读取流程本来是和http://www.cnblogs.com/xrq730/p/6285358.html一文放在一起的,这两天在看Spring自定义标签的时候,感觉对Spring配置文件读取流程还是研究得不够,因此将Spring配置文件读取流程部分从之前的文章拆出来单独成为一文. 为了看一下Spring配置文件加载流程,先定义一个bean.xml: 1 <?xml version="1.0" encoding="UTF-8"?>

zuul源码分析-探究原生zuul的工作原理

前提 最近在项目中使用了SpringCloud,基于zuul搭建了一个提供加解密.鉴权等功能的网关服务.鉴于之前没怎么使用过Zuul,于是顺便仔细阅读了它的源码.实际上,zuul原来提供的功能是很单一的:通过一个统一的Servlet入口(ZuulServlet,或者Filter入口,使用ZuulServletFilter)拦截所有的请求,然后通过内建的com.netflix.zuul.IZuulFilter链对请求做拦截和过滤处理.ZuulFilter和javax.servlet.Filter的