有关Hadoop多Job任务并行处理,经过测试,配置如下:
首先做如下配置:
1、修改mapred-site.xml添加调度器配置:
<property> <name>mapred.jobtracker.taskScheduler</name> <value>org.apache.hadoop.mapred.FairScheduler</value> </property>
2、添加jar文件地址配置:
<property> <name>hadoopTest.jar</name> <value>所生成jar的地址</value> </property>
Java基本代码如下:
// 获取各个Job,有关Job的创建,这里就不贴上来了。
Job job_base = (Job) 。。。;}
最后将这些代码组装至Main方法,使用Hadoop执行命令运行:
hadoop jar jar包名称 方法入口所在的类
如:
hadoop jar hadoopTest.jar ch03.test Test
可以通过50030端口来监控Job的并行状态,这里就不多说了!!
解释:
1、配置Jar地址可以解决打包所生成的jar包后,运行时出现ClassNotFound的问题;
2、给多个Job设定setJarByClass,经测试,如果不设定此类,运行时会出现ClassNotFound错误,其中CapuseDateTimerTask为Main方法所在的类名;
3、waitForCompletion与submit方法是有区别的,waitForCompletion是串行,而submit是并行,正是因为submit是并行所以后续的代码操作需要取其执行是否完成的状态来做判断处理即:isComplete();
4、以上Job采用的是:org.apache.hadoop.mapreduce.Job
以上代码操作在单机/集群上测试都通过!