Eclipse下HadoopのMapReduce開発のMapReduce作成
5037 ワード
hadoopインストールの導入とEclipseインストールの統合については、ここでは説明しません.
まずビジネスニーズについてお話ししましょう.システムの実行情報を記録するシステムログファイルがあります.その中にはDEBUG、INFO、WARN、ERRORの4つのレベルのログが含まれています.今、すべてのレベルにどれだけのレコードがあるかを見たいです.
map/reduceプロジェクトを作成します.プロジェクト名はmapreducetestです.srcの下にmapreducetestというパッケージを作成し、次にコードというクラスを作成します.
生成された結果は次のとおりです.
まずビジネスニーズについてお話ししましょう.システムの実行情報を記録するシステムログファイルがあります.その中にはDEBUG、INFO、WARN、ERRORの4つのレベルのログが含まれています.今、すべてのレベルにどれだけのレコードがあるかを見たいです.
map/reduceプロジェクトを作成します.プロジェクト名はmapreducetestです.srcの下にmapreducetestというパッケージを作成し、次にコードというクラスを作成します.
package mapreducetest;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
public class MapReduceTest extends Configuration implements Tool{
/**
*
*/
private Configuration configuration;
/**
*
*/
@Override
public Configuration getConf() {
return this.configuration;
}
/**
*
*/
@Override
public void setConf(Configuration arg0) {
this.configuration=arg0;
}
/**
*
* @ClassName: Counter
* @Description: TODO( )
* @author scc
* @date 2015 5 27 2:54:39
*
*/
enum Counter{
TIMER
}
/**
*
* @ClassName: Map
* @Description: map , map Mapper , key , value , key , value
* @author scc
* @date 2015 5 27 2:30:06
* @
*/
public static class Map extends Mapper<LongWritable, Text, Text, Text>{
/**
* key: key
* value: value
* context:map
* ,hdfs
*/
@Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
try{
//
String mapvalue=value.toString();
// , string
String[] infos=mapvalue.split(" ");
// , ,
String info=infos[10];
// ( key, value), key value
context.write(new Text(info), new Text(info));
}catch(Exception e){
//
context.getCounter(Counter.TIMER).increment(1);
return;
}
}
}
/**
*
* @ClassName: Reduce
* @Description: reduce ,Reducer , key value , map , key value
* @author scc
* @date 2015 5 27 3:33:06
*
*/
public static class Reduce extends Reducer<Text, Text, Text, Text>{
/**
* value, key value , reducer
* : map map , map key , key key, map 10 ,
* key key1, key2, reduce reduce, key1 key2
*/
@Override
protected void reduce(Text key, Iterable<Text> values,Context arg2) throws IOException, InterruptedException {
// key
String info=key.toString();
//
int count=0;
// key 1
for (Text text : values) {
if(info.equals(text.toString()))
count=count+1;
}
//
arg2.write(key, new Text(String.valueOf(count)));
}
}
/**
* run
*/
@Override
public int run(String[] arg0) throws Exception {
// job, job
Job job=Job.getInstance(getConf(), "maptest");
// job
job.setJarByClass(MapReduceTest.class);
// (hdfs )
FileInputFormat.setInputPaths(job, new Path(arg0[0]));
// (hdfs )
FileOutputFormat.setOutputPath(job, new Path(arg0[1]));
// map class
job.setMapperClass(Map.class);
// reduce class
job.setReducerClass(Reduce.class);
// class
job.setOutputFormatClass(TextOutputFormat.class);
// key
job.setOutputKeyClass(Text.class);
// value
job.setOutputValueClass(Text.class);
// job
job.waitForCompletion(true);
return job.isSuccessful()?0:1;
}
public static void main(String[] args) throws Exception {
String[] args2=new String[2];
args2[0]="hdfs://192.168.1.55:9000/test2-in/singlemaptest.log";
args2[1]="hdfs://192.168.1.55:9000/test2-out";
int res=ToolRunner.run(new Configuration(), new MapReduceTest(), args2);
System.exit(res);
}
}
生成された結果は次のとおりです.
INFO 3800
WARN 55