多個mapreduce連線例項
將reduce端連線的Map/Reduce結果作為wordCount 的map輸入源:
package com.mr.multiMapReduce;
import java.io.IOException;
import org.apache.hadoop.examples.WordCount;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.jobcontrol.ControlledJob;
import org.apache.hadoop.mapreduce.lib.jobcontrol.JobControl;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import com.mr.reduceSideJoin.CombineValues;
import com.mr.reduceSideJoin.ReduceSideJoin_LeftOuterJoin;
/*
* 這個例項不能在eclipse中執行,無法啟動job2,但是放在hadoop環境上是好的。
* */
public class MultiMapReduce {
// 啟動函式
public static void main(String[] args) throws IOException {
JobConf conf = new JobConf(MultiMapReduce.class);
// 第一個job的配置
Job job1 = new Job(conf, "join1");
job1.setJarByClass(MultiMapReduce.class);
job1.setMapperClass(ReduceSideJoin_LeftOuterJoin.LeftOutJoinMapper.class);
job1.setReducerClass(ReduceSideJoin_LeftOuterJoin.LeftOutJoinReducer.class);
job1.setMapOutputKeyClass(Text.class);// map階段的輸出的key
job1.setMapOutputValueClass(CombineValues.class);// map階段的輸出的value
job1.setOutputKeyClass(Text.class);// reduce階段的輸出的key
job1.setOutputValueClass(Text.class);// reduce階段的輸出的value
// job1的輸入輸出檔案路徑
FileInputFormat.addInputPath(job1, new Path(args[0]));
FileOutputFormat.setOutputPath(job1, new Path(args[1]));
// 第二個作業的配置
Job job2 = new Job(conf, "Join2");
job2.setJarByClass(MultiMapReduce.class);
job2.setMapperClass(WordCount.TokenizerMapper.class);
job2.setReducerClass(WordCount.IntSumReducer.class);
job2.setMapOutputKeyClass(Text.class);// map階段的輸出的key
job2.setMapOutputValueClass(IntWritable.class);// map階段的輸出的value
job2.setOutputKeyClass(Text.class);// reduce階段的輸出的key
job2.setOutputValueClass(IntWritable.class);// reduce階段的輸出的value
FileInputFormat.addInputPath(job2, new Path(args[1]));
FileOutputFormat.setOutputPath(job2, new Path(args[2]));
ControlledJob jobx = new ControlledJob(conf);
jobx.setJob(job1);
ControlledJob joby = new ControlledJob(conf);
joby.setJob(job2);
joby.addDependingJob(jobx);
// 主的控制容器,控制上面的總的兩個子作業
JobControl jobCtrl = new JobControl("myctrl");
jobCtrl.addJob(jobx);
jobCtrl.addJob(joby);
// 線上程啟動,記住一定要有這個
Thread t = new Thread(jobCtrl);
t.start();
while (true) {
if (jobCtrl.allFinished()) {// 如果作業成功完成,就列印成功作業的資訊
System.out.println(jobCtrl.getSuccessfulJobList());
// 等任務執行完刪除第一個job的reduce結果。
FileSystem fs = FileSystem.get(conf);
Path path = new Path(new Path(args[1]).toUri());
boolean bool = fs.deleteOnExit(path);
if (bool) {
System.out.println("檔案刪除成功");
}
fs.close();
jobCtrl.stop();
break;
}
}
}
}
相關文章
- JDBC連線自定義sqlserver資料庫例項名(多個例項)JDBCSQLServer資料庫
- oracle:一臺主機多個例項,sqlplus 預設連線到哪個例項的問題OracleSQL
- 例項解析外連線 內連線 自連線 全連線
- 連線雲MariaDB例項
- c++ 連線mysql例項C++MySql
- 本地SSH方式連線例項
- 連線RAC資料庫中單個例項(一)資料庫
- 連線RAC資料庫中單個例項(二)資料庫
- docker redis 多個例項DockerRedis
- 2.4.7 Step 6: 連線到例項
- Luat例項教程:tcp短連線TCP
- hadoop MapReduce 三種連線Hadoop
- javascript陣列連線程式碼例項JavaScript陣列線程
- 從客戶端連線ASM例項客戶端ASM
- MapReduce 示例:減少 Hadoop MapReduce 中的側連線Hadoop
- oracle一個例項配置多個listener或多個埠Oracle
- sql 連線查詢例項(left join)三表連線查詢SQL
- oracle 多個例項監聽不到Oracle
- oracle多個例項啟動方法Oracle
- jdbc根據例項名 連線 sql serverJDBCSQLServer
- 如何管理多個 SSH 連線
- oracle一個別例項配置多個listener或多個埠Oracle
- 無線AP組網例項:多個無線AP間無線組網的方法教程
- MapReduce程式設計例項之倒排索引 1程式設計索引
- MapReduce程式設計例項之自定義排序程式設計排序
- 一個簡單的MapReduce示例(多個MapReduce任務處理)
- 最近遇到的RAC的一個例項無法連線的問題
- java多型-優化上個例項Java多型優化
- oracle 多個例項安裝監聽Oracle
- 無法連線windows例項的問題排查Windows
- 去掉連結a的虛線框程式碼例項
- 如何看例項的歷史最大連線數?
- 使用SSMS連線和查詢 SQL Server 例項SSMSQLServer
- 一個例項中,多個synchronized方法的呼叫synchronized
- Android多個網路連線Android
- 一個單詞統計的例項,怎樣通過MapReduce完成排序?排序
- Docker多容器連線-以Nginx+PHP為例DockerNginxPHP
- MapReduce程式設計例項之資料去重程式設計