hadoop_hadoop的config

hadoop的config类虽然不多,但是功能强大,使用灵活,扩展方便。

[img]http://dl.iteye.com/upload/attachment/585670/25880155-e03c-3d1c-ae9b-8aa380920a8d.jpg[/img]

主要以下几个类

Configurable
Something that may be configured with a Configuration.
void setConf(Configuration conf);
Configuration getConf();


Configured
Base class for things that may be configured with a Configuration.


Configuration
Provides access to configuration parameters.
这个类值得好好读一下,一个简单的配置类,就完成了这么多功能,而且代码也不乱。
配置文件的加载顺序。
默认配置文件,用户配置文件,调用方法set的属性等等,overlay的使用。
final的定义。
支持${var}参数配置。
还可以设置枚举,int范围,string集合或数组。
在getLocalPath方法中,
for (int i = 0; i < dirs.length; i++) { // try each local dir
int index = (hashCode+i & Integer.MAX_VALUE) % dirs.length;
...
}
这行代码有疑问,代码功能是随机从数组一个位置遍历整个数组,但是& Integer.MAX_VALUE貌似没有意义。
这个想通了,是为了取正整数。
debug method. 这个貌似调整为UT会更好一些。
兼容性的考虑。
WeakHashMap保持加载的Configuration对象.
CopyOnWriteArrayList的使用。


Tool
A tool interface that supports handling of generic command-line options.

ToolRunner
A utility to help run Tools.

附一些简单的使用例子。
public class TestConfig {

private Configuration config;
private String key;

@Before
public void setUp() {
config = new Configuration();
key = "allen_key";
}

/**
* 可以配置10进制或16进制的int。
* */
@Test
public void testSimpleConfig() {

config.set(key, "123");
int value = config.getInt(key, -1);
Assert.assertEquals(123, value);

config.set(key, "0X11");
value = config.getInt(key, -1);
Assert.assertEquals(17, value);
}

private static enum MyEnum {
A, B;
};

/**
* 可以配置枚举。
* */
@Test
public void testEnum() {
config.setEnum(key, MyEnum.A);
MyEnum value = config.getEnum(key, MyEnum.B);
Assert.assertSame(MyEnum.A, value);
}

/**
* 可以配置int范围。
* */
@Test
public void testIntRange() {
config.setStrings(key, "-5,10-12,15,20-");
IntegerRanges range = config.getRange(key, null);
// -5
Assert.assertFalse(range.isIncluded(-1));
Assert.assertTrue(range.isIncluded(0));
Assert.assertTrue(range.isIncluded(5));
Assert.assertFalse(range.isIncluded(6));
// 10-12
Assert.assertFalse(range.isIncluded(9));
Assert.assertTrue(range.isIncluded(10));
Assert.assertTrue(range.isIncluded(12));
Assert.assertFalse(range.isIncluded(13));
// 15
Assert.assertFalse(range.isIncluded(14));
Assert.assertTrue(range.isIncluded(15));
Assert.assertFalse(range.isIncluded(16));
// 20-
Assert.assertFalse(range.isIncluded(19));
Assert.assertTrue(range.isIncluded(20));
Assert.assertTrue(range.isIncluded(60));
}

/**
* 可以配置String集合。
* */
@Test
public void testStringCollection() {
config.setStrings(key, "a,b");
Collection<String> c = config.getStringCollection(key);
Assert.assertTrue(c.contains("a"));
Assert.assertTrue(c.contains("b"));

}

/**
* 可以配置String数组。
* */
@Test
public void testStringArray() {
config.setStrings(key, "a,b");
String[] strs = config.getStrings(key);
Assert.assertEquals("a", strs[0]);
Assert.assertEquals("b", strs[1]);
}

/**
* 可以定义变量。
* */
@Test
public void testVar() {
config.set("basekey", "allen");
config.set("subkey", "hi,${basekey}");
String value = config.get("subkey");
Assert.assertEquals("hi,allen", value);
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值