Hadoop学习之传递命令行参数给Mapper和Reducer

       在Hadoop-1.2.1进行作业开发时,由于输入文件的特殊性,需要将日期作为参数传递到Mapper和Reducer任务。而通常情况下在使用hadoop jar运行作业时,传递的参数为输入文件路径和输出文件路径,那如何做到添加额外参数到作业中呢?仔细分析一下作业类的run方法,并结合Hadoop API可以粗略的推断出:可以在core-site.xml文件中添加参数及参数值实现向作业传递参数。但该方法比较笨拙,一是因为不同作业可能需要的参数不同,若存在多个需要参数的作业势必导致core-site.xml文件增大,二是因为这种方式不够灵活,若需要不同的参数值,则必须修改core-site.xml文件并重新启动Hadoop集群。显然在运行多个作业,规模较大的集群该方法是不太可行的。既然可以通过命令行向作业传递输入和输出目录,是否可以通过命令行向作业传递特殊参数呢?答案是肯定的。

      由于Configuration 支持以编程的方式设置和获取参数,那就可以将命令行中的参数保存在Configuration ,然后在Mapper或者Reducer任务通过Configuration 的get方法获取该参数的值。在测试该方法之前,需要确定map和reduce方法是否可以取得Configuration 对象,结合API可以得出map和reduce方法中的Context对象可以通过方法getConfiguration()得到Configuration 对象,至此似乎一切都迎刃而解了,接下来就来验证一下吧。未带特殊参数的作业的run方法代码如下:

@Override
		public int run(String[] as) throws Exception {
			Configuration conf = getConf();
			Job job = new Job(conf, "wordCount");
			job.setJarByClass(WordCount.class);
			
			Path in = new Path(as[0]);
			Path out =  new Path(as[1]);
			FileInputFormat

你可能感兴趣的:(Hadoop-1.x,Hadoop)