1. MapReduce程序开发步骤
编写map 和 reduce 程序–> 单元测试 -> 编写驱动程序进行验证-> 本地数据集调试 -> 部署到集群运行
用到的工具:
Junit、Mockito、Ant
2. 使用Configuration
关键点:
1、 Configuration类可以加载配置文件,包括系统的和自定义的
2、 addResource方法后面的配置文件会覆盖前面的
3、 配置文件的几个特性:name、value、description、final、${} 引用
4、 系统属性(System.setProperty)中的优先级高于源文件中的优先级
代码:
其中,添加配置文件最好使用 Path对象的方法,否则会找不到配置文件。注意黄色背景内容
public static void main(String[]args) {
// TODO Auto-generatedmethod stub
String baseDir = Thread.currentThread().getContextClassLoader()
.getResource("").getPath().substring(1)+ "demo/chp5/conf-1.xml";
String fileStr = newFile(baseDir).getAbsolutePath();
Path filePath = newPath(baseDir);
System.out.println("filePath="+filePath);
Configuration conf = new Configuration();
conf.addResource(filePath);
//conf.addResource("conf-2.xml"); //后面添加的会覆盖前面的
System.out.println(conf.get("color"));
System.out.println(conf.get("fs.default.name"));
}
3. 环境准备
1、 尽量保证运行和程序分离,也就是运行环境、运行程序、运行数据、配置文件之间的分离存放。
2、 Hadoop.job.ugi (用户标识)
辅助类:GenericOptionsParser,Tool 和 ToolRunner
GenericOptionsParser:解释常用命令选项
Tool接口,ToolRunner:运行应用程序,内部调用GenericOptionsParser
通过上面的方式,构建一个任务的执行框架,代码样例如下:
public classConfigurationPrinter extends Configured implements Tool {
//静态构造函数
static{
Configuration.addDefaultResource("hdfs-default.xml");
}
/* (non-Javadoc)
* @seeorg.apache.hadoop.util.Tool#run(java.lang.String[])
*/
@Override
public int run(String[] arg0) throws Exception{
// TODO Auto-generated method stub
Configuration conf = getConf();
for(Entry<String,String> entry :conf){
System.out.printf("%s=%s\n",entry.getKey(),entry.getValue());
}
return 0;
}
/**
* @paramargs
* @throwsException
*/
public static void main(String[] args) throwsException {
// TODO Auto-generated method stub
int exitCode = ToolRunner.run(newConfigurationPrinter(), args);
System.exit(exitCode);
}
}
4. 程序开发及测试
a) 编写单元测试
使用Mockito框架模拟进行测试。
b) 运行的代码框架包括:
驱动程序:XXXDriver,运行的主程序
Mapper:XXXMapper,mapper的程序
Reducer:XXXReducer,reducer的程序
-------------------------------------------------------------------------------------------------------------------
作者:CNZQS|JesseZhang 个人博客:CNZQS(http://www.cnzqs.com)
版权声明:除非注明,文章均为原创,可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
--------------------------------------------------------------------------------------------------------------------