论坛首页 Java企业应用论坛

hadoop的config

浏览 1536 次
锁定老帖子 主题:hadoop的config
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-11-09  
hadoop的config类虽然不多,但是功能强大,使用灵活,扩展方便。



主要以下几个类

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);
	}

}
  • 大小: 15.7 KB
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics