Heim > Datenbank > MySQL-Tutorial > 2.3 Configurable接口

2.3 Configurable接口

WBOY
Freigeben: 2016-06-07 15:08:27
Original
1113 Leute haben es durchsucht

2.3 Configurable接口 Configurable是一个很简单的接口,也位于org.apache.hadoop.conf包中,其类图如图2-3所示。 从字面理解,Configurable的含义是可配置的,如果一个类实现了Configurable接口,意味着这个类是可配置的。也就是说,可以通过为这个类的对象

2.3 Configurable接口

Configurable是一个很简单的接口,也位于org.apache.hadoop.conf包中,其类图如图2-3所示。

2.3 Configurable接口

从字面理解,Configurable的含义是可配置的,如果一个类实现了Configurable接口,意味着这个类是可配置的。也就是说,可以通过为这个类的对象传入一个Configuration实例,提供对象工作需要的一些配置信息。Hadoop的代码中有大量的类实现了Configurable接口,如org.apache.hadoop.mapred.SequenceFileInputFilter.RegexFilter。RegexFilter对象工作时,需要提供一个正则表达式,用于过滤读取的记录。由于RegexFilter的父类Filter中实现的Configurable接口,RegexFilter可以在它的setConf()方法中,使用Configuration.get()方法获取以字符串传入的正则表达式,并初始化成员变量p。相关代码如下:

<ol>
<li><span>public void setConf(Configuration conf) {  </span></li>
<li><span>  //在conf中获取键为"sequencefile.filter.regex"(FILTER_REGEX)的配置项  </span></li>
<li>
<span>  String </span><span>regex</span><span> = </span><span>conf</span><span>.get(FILTER_REGEX);  </span>
</li>
<li><span> </span></li>
<li>
<span>  if (</span><span>regex</span><span>==null)  </span>
</li>
<li><span>     throw new RuntimeException(FILTER_REGEX + "not set");  </span></li>
<li>
<span>  </span><span>this.p</span><span> = </span><span>Pattern</span><span>.compile(regex);  </span>
</li>
<li>
<span>  </span><span>this.conf</span><span> = conf;  </span>
</li>
<li><span>}  </span></li>
</ol>
Nach dem Login kopieren

Configurable.setConf()方法何时被调用呢?一般来说,对象创建以后,就应该使用setConf()方法,为对象提供进一步的初始化工作。为了简化对象创建和调用setConf()方法这两个连续的步骤,org.apache.hadoop.util.ReflectionUtils中提供了静态方法newInstance(),代码如下:

<ol><li><span><span>public static </span><span><span>T</span><span>></span><span> T newInstance(Class</span><span><span>T</span><span>></span><span>theClass, Configuration conf) </span></span></span></span></li></ol>
Nach dem Login kopieren

方法newInstance()利用Java反射机制,根据对象类型信息(参数theClass),创建一个新的相应类型的对象,然后调用ReflectionUtils中的另一个静态方法setConf()配置对象,代码如下:

<ol>
<li><span>public static void setConf(Object theObject, Configuration conf) {  </span></li>
<li><span>  if(conf != null) {  </span></li>
<li><span>     //传入的对象实现了Configurable接口  </span></li>
<li><span>     if(theObject instanceof Configurable) {  </span></li>
<li><span>        //调用对象的setConf方法,传入Configuration对象  </span></li>
<li><span>        ((Configurable) theObject).setConf(conf);  </span></li>
<li><span>     }  </span></li>
<li><span>     setJobConf(theObject, conf);  </span></li>
<li><span>  }  </span></li>
<li><span>} </span></li>
</ol>
Nach dem Login kopieren

在setConf()中,如果对象实现了Configurable接口,那么对象的setConf()方法会被调用,并根据Configuration类的实例conf进一步初始化对象。


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage