mapreduce链接job流
来源:互联网 发布:淘宝steam充值卡 编辑:程序博客网 时间:2024/06/05 20:11
在我们的日常的数据处理中,往往不是一个MapReduce就可以把需求解决,而是要用多个MR作业来完成对一个问题的求解。但是多个MR作业是如何链接的呢?
在MR框架中提供了三种方法,分别是线性MR job流,复杂MR job流,job设置预处理和后处理。
1.线性MR job流:一个MR作业是将数据输入经过处理输出到hdfs上,在处理复杂的问题时,我们可以用多个MR作业,让他们按一定的顺序执行,上一个MR的输出作为下一个MR的输入。
Configuration conf=new Configuration(); Job job1=new Job(conf,"job1"); /* * 省略map,reduce类等的设置 */ FileInputFormat.addInputPath(job,new Path("/input")); FileOutputFormat.setOutputPath(job,new Path("/output1")); Job job2=new Job(conf, "job2"); /* * 省略map,reduce类等的设置 */ //job2的输入时job1的输出 FileInputFormat.addInputPath(job,new Path("/output1")); FileOutputFormat.setOutputPath(job,new Path("/output2"));
2.复杂的MR job流:在处理复杂的问题时,多个MR作业并不是一定按顺序执行的,比如:有三个作业,job1,job2,job3,job3的执行是要job1和job2的数据作为输入数据时,job1和job2是并没有关系的。这个时候就要使用,ControlledJob类和JobControl类了。
Configuration conf=new Configuration(); Job job1=new Job(conf,"job1"); /* * 省略map,reduce类等的设置 */ //把job封装到ControledJob对象中 ControlledJob controlledJob1=new ControlledJob(conf); controlledJob1.setJob(job1); Job job2=new Job(conf,"job2"); /* * 省略map,reduce类等的设置 */ //把job封装到ControledJob对象中 ControlledJob controlledJob2=new ControlledJob(conf); controlledJob2.setJob(job2); Job job3=new Job(conf,"job3"); /* * 省略map,reduce类等的设置 */ //把job封装到ControledJob对象中 ControlledJob controlledJob3=new ControlledJob(conf); controlledJob2.setJob(job3); //设置各个job之间的关系 controlledJob2.addDependingJob(controlledJob1); controlledJob3.addDependingJob(controlledJob2); //添加对各个job的控制 JobControl jobControl=new JobControl("jobcontrol"); jobControl.addJob(controlledJob1); jobControl.addJob(controlledJob2); jobControl.addJob(controlledJob3); //启动job流 jobControl.run(); System.exit(0);
3.job设置预处理和后处理:在job处理前和处理后要进行一些处理,用第一种方法也能实现,但是显得很复杂。这个时候,我们可以使用MR中提供的ChainMapper和ChainReducer两个静态类(ChainMapper和ChainReducer目前只支持以前的API)来实现了,该方法最终是形成一个job,并且针对的是job的输入输出流,会自动组织。
Configuration conf=new Configuration(); JobConf jobConf=new JobConf(conf); jobConf.setJobName("jobConf"); FileInputFormat.addInputPath(jobConf,new Path("/input")); FileOutputFormat.setOutputPath(jobConf,new Path("/newoutput")); //设置为不加载本地数据 JobConf mapConf1=new JobConf(false); ChainMapper.addMapper(jobConf, Map1.class,Text.class, Text.class, Text.class, Text.class, true,mapConf1); JobConf mapConf2=new JobConf(false); ChainMapper.addMapper(jobConf, Map2.class,Text.class, Text.class, Text.class, Text.class, true,mapConf2); //设置为不加载本地数据 JobConf reduceJob=new JobConf(false); ChainReducer.setReducer(reduceJob, Reducer.class,Text.class, Text.class, Text.class, Text.class, true, reduceJob); JobConf mapConf3=new JobConf(false); ChainMapper.addMapper(jobConf, Map3.class,Text.class, Text.class, Text.class, Text.class, true,mapConf3); JobClient.runJob(jobConf);
三中链接job流的方法在此介绍结束,如果有不对的地方请指正。
阅读全文
0 0
- mapreduce链接job流
- Hadoop实战之链接MapReduce Job
- MapReduce: Job提交过程
- Hadoop,MapReduce,JOB参数
- 【Hadoop】MapReduce Job Files
- MapReduce的job调优
- MapReduce Job Control
- mapreduce job一直卡住
- 【MapReduce】Streaming Job Failed!
- Hadoop MapReduce 深入MapReduce Job 提交
- hadoop MapReduce Job失效模型
- hadoop MapReduce Job失效模型
- hadoop MapReduce Job失效模型
- HadoopSourceAnalyse --- Mapreduce Job init&submit
- HadoopSourceAnalyse --- Mapreduce ApplicationMaster Job start
- HadoopSourceAnalyse --- Mapreduce ApplicationMaster Job FSM
- 【Hadoop】MapReduce Job Submission Files
- sqoop job mapreduce运行失败
- HDU 6214 Smallest Minimum Cut(最小割的最少割边数)
- Simulink实时仿真--Desktop Real-Time
- spark编程指南
- A Cubic number and A Cubic Number HDU
- 02-jvascript 字符串
- mapreduce链接job流
- 03-javascript 数组
- 笔试编程题-2017电信
- 后台规定的大实体怎么转化为json对象
- 本月人生感悟
- MySQL三种安装方式
- 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛
- ubuntu上搭建ngrok服务器
- 11:潜伏者