本篇内容
在上一篇的“初识”环节,我们已经在本地和Hadoop集群中,成功的运行了几个MapReduce程序,对MapReduce编程,已经有了最初的理解。
在本篇文章中,我们对MapReduce编程进行进一步的了解,包括:配置API、辅助类、调试手段、调优手段。
总体来说,我个人的理解是:
(1)本地开发阶段,对于Eclipse开发MapReduce程序来说,是不需要任何插件的,和开发普通的Java程序是一样的,通过DEBUG和单元测试排错;
(2)Hadoop环境测试阶段,也比较困难或者说比较麻烦进行远程调试,经常做的是打印语句,看日志。
配置API和辅助类
配置API
一个Configuration类的实例,代表配置属性及其取值的一个集合。maven项目的src/main/resources下有配置文件conf.xml,内容如下:
<?xml version="1.0"?>
<configuration>
<property>
<name>color</name>
<value>yellow</value>
<description>Color</description>
</property>
<property>
<name>size</name>
<value>10</value>
<description>Size</description>
</property>
<property>
<name>weight</name>
<value>heavy</value>
<final>true</final>
<description>Weight</description>
</property>
<property>
<name>size-weight</name>
<value>${size},${weight}</value>
<description>Sizeandwelght</description>
</property>
</configuration>
如下代码,可以读取配置文件的内容:
import org.apache.hadoop.conf.Configuration;
public class ConfTest {
public static void main(String[] args) {
Configuration conf = new Configuration();
conf.addResource("conf.xml");
//注意:系统属性的优先级高于源文件中设置的属性,前提是size在conf.xml中有设置,否则就是null了
//对于这样写的,也可以用JVM参数 -Dproperty=value进行重新设置
System.setProperty("size", "15");
System.out.println(conf.getInt("size", 0)); // 输出10
System.out.println(conf.get("weight"));
System.out.println(conf.get("size-weight")); //输出15,heavy
}
}
辅助类GenericOptionsParser/Tool/ToolRunner
GenericOptionsParser是一个类,用来解释常用的Hadoop命令行选项,根据需要,为Configuration对象设置相应的取值。通常不直接使用它,而是使用继承自它的接口Tool:实现Tool接口,通过ToolRunner来运行程序,ToolRunner内部调研GenericOptionsParser,如下: