2.3 Configurable接口
Configurable是一个很简单的接口,也位于org.apache.hadoop.conf包中,其类图如图2-3所示。
从字面理解,Configurable的含义是可配置的,如果一个类实现了Configurable接口,意味着这个类是可配置的。也就是说,可以通过为这个类的对象传入一个Configuration实例,提供对象工作需要的一些配置信息。Hadoop的代码中有大量的类实现了Configurable接口,如org.apache.hadoop.mapred.SequenceFileInputFilter.RegexFilter。RegexFilter对象工作时,需要提供一个正则表达式,用于过滤读取的记录。由于RegexFilter的父类Filter中实现的Configurable接口,RegexFilter可以在它的setConf()方法中,使用Configuration.get()方法获取以字符串传入的正则表达式,并初始化成员变量p。相关代码如下:
- publicvoidsetConf(Configurationconf){
- //在conf中获取键为"sequencefile.filter.regex"(FILTER_REGEX)的配置项
-
Stringregex=conf.get(FILTER_REGEX);
-
if(regex==null)
- thrownewRuntimeException(FILTER_REGEX+"notset");
-
this.p=Pattern.compile(regex);
-
this.conf=conf;
- }
Configurable.setConf()方法何时被调用呢?一般来说,对象创建以后,就应该使用setConf()方法,为对象提供进一步的初始化工作。为了简化对象创建和调用setConf()方法这两个连续的步骤,org.apache.hadoop.util.ReflectionUtils中提供了静态方法newInstance(),代码如下:
- publicstatic<T>TnewInstance(Class<T>theClass,Configurationconf)
方法newInstance()利用Java反射机制,根据对象类型信息(参数theClass),创建一个新的相应类型的对象,然后调用ReflectionUtils中的另一个静态方法setConf()配置对象,代码如下:
- publicstaticvoidsetConf(ObjecttheObject,Configurationconf){
- if(conf!=null){
- //传入的对象实现了Configurable接口
- if(theObjectinstanceofConfigurable){
- //调用对象的setConf方法,传入Configuration对象
- ((Configurable)theObject).setConf(conf);
- }
- setJobConf(theObject,conf);
- }
- }
在setConf()中,如果对象实现了Configurable接口,那么对象的setConf()方法会被调用,并根据Configuration类的实例conf进一步初始化对象。
分享到:
相关推荐
在Spring框架中,`@Configurable`注解是Spring AOP(面向切面编程)的一部分,主要用于实现依赖注入(DI)到非Spring管理的对象中,比如由其他框架创建或者通过new关键字实例化的对象。这个特性使得即使在这些“不...
dry-configurable, 一个简单的mixin使 ruby 类可以配置 干可以配置 概要class App extend Dry::Configurable # Pass a block for nested configuration (works to any
4. **配置选项**:这个库的名称包含"configurable"一词,意味着它提供了丰富的配置选项。开发者可以通过调整配置来改变代理服务器的行为,比如设置端口、处理特定的HTTP请求头、过滤某些流量等。 5. **后端开发**:...
"Configurable C++ platform adapter"是一个关键的概念,它指的是一个能够根据不同的目标平台进行配置的C++适配器或库。这个适配器的主要目的是解决跨平台开发中的兼容性问题,允许代码在多个操作系统或硬件架构上...
"define-configurable"是一个专门为前端开发设计的开源库,它专注于定义和管理对象的可配置属性。这个库利用了JavaScript语言中的核心特性——`Object.defineProperty()`方法,帮助开发者更加灵活地控制对象的属性...
### 国外嵌入式系统论文《一种高度可配置的缓存架构用于嵌入式系统》 #### 摘要及研究背景 本篇论文主要介绍了一种针对嵌入式系统的高度可配置缓存架构。在当前技术背景下,能量消耗是嵌入式计算系统中的一个重大...
目录使用REST API REST API基础通过传递令牌进行身份验证获取路由表添加新路线删除路线自定义错误页面基于主机的路由故障排除 安装先决条件: Node.js≥6 如果要在Linux中安装configurable-http-proxy ,则可以按照...
A general and configurable use
《Dropwizard Configurable Assets Bundle 0.1.9与Ollie开源项目解析》 在IT行业中,开源项目扮演着至关重要的角色,它们为开发者提供了丰富的工具和资源,极大地推动了技术的发展。今天我们将深入探讨的是名为...
#自述文件使用 spring @Configurable 注释的“原型”bean 类型的示例(也请记住单例 bean),即使用普通的“new”运算符创建 bean,然后 spring 进一步控制初始化 bean,替换 @Value 占位符 bean 属性上的值,调用 ...
这个DEMO可能包含了对这些API的封装,使得用户能够通过简单的接口实现控制台界面的个性化。这样的功能在编写命令行工具或者教学示例时非常有用,因为它可以使输出信息更易于区分和理解。 在实际开发中,我们还可以...
另一个`Configurable`接口,包含`reBuild()`方法,只对远程配置中心的本地代理开放。这样,调用者只能看到并使用它们真正需要的方法,避免了不必要的依赖和潜在的错误。 此外,作者还给出了一个`Modem`类的例子,`...
`dry-configurable`是Dry-RB项目的一个组件,它提供了一个简洁且灵活的方式来实现这一目标。这个库使得Ruby类能够轻松地接受配置选项,从而增强了代码的可复用性和模块化。 标题中的“dry-configurable:使Ruby类可...
Spartan-6 FPGA Configurable Logic Block User Guide.pdf
Improved : comment popup in cell configurable in TTMSFMXGridCell v1.8.0.6 Improved : PDF Export engine v1.8.0.7 Package build options change v1.8.0.8 Fixed : Issue with text repainting at ...
研扬的这一系列固态硬盘产品还提供用户可配置区域(User Configurable Zones),用户可以根据自己的需求在用户区、ROM区和保护区域之间分配容量。这为用户提供了更高的自定义灵活性。 针对工程设计过程,研扬还提供...
本文探讨了当前参考模型语言在描述企业系统功能性和结构方面的局限性,并提出了一种新的可配置事件驱动过程链(Configurable Event-Driven Process Chains, C-EPCs)作为扩展的参考建模语言。该语言允许捕捉核心配置...
它主要由可配置逻辑块(Configurable Logic Blocks, CLBs)、可编程互连资源(Programmable Interconnect Resources, PIRs)和可编程I/O单元(Programmable I/O Units, PIOs)组成。FPGA的核心优势在于其高度的可编程性,...
嵌入式可配置操作系统(ECOS)是一种专为嵌入式系统设计的实时操作系统,它在业界享有盛誉,尤其在资源受限的设备上表现出色。ECOS的主要特点包括其可配置性、实时性能以及对多种处理器架构的支持,这使得它成为开发...