Package Com.my.hadoop.mapreduce.dataformat;
Import Java.io.DataInput;
Import Java.io.DataOutput;
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.io.Writable;
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.util.GenericOptionsParser;
Import Com.my.hadoop.common.Configs;
/**
* The serialization of Hadoop
* @author Yao
*
*/
public class Datacount {
Static class Dtmap extends Mapper<longwritable, text, text, databean>{
Databean Databean = null;
@Override
public void Map (longwritable key, Text value, Context context) throws IOException, Interruptedexception {
string[] fields = Value.tostring (). Split ("\ t");
String Telno = fields[1];
Long uppayload = Long.parselong (fields[8]);
Long downpayload = Long.parselong (fields[9]);
Databean = new Databean (Telno, Uppayload, downpayload);
Context.write (New Text (Telno), Databean);
}
}
Static class Dtreduce extends Reducer<text, Databean, Text, databean>{
@Override
public void reduce (Text key, iterable<databean> Databeans, Context context) throws IOException, interruptedexception {
Long uppayload = 0;
Long downpayload = 0;
for (Databean Databean:databeans) {
Uppayload + = Databean.getuppayload ();
Downpayload + = Databean.getdownpayload ();
}
Databean Databean = new Databean ("", Uppayload, Downpayload);
Context.write (key, Databean);
}
}
public static void Main (string[] args) throws Exception {
Configuration conf = configs.getconfiginstance ();
string[] paths = new Genericoptionsparser (conf, args). Getremainingargs ();
if (paths.length! = 2) {
System.err.println ("Usage:" + DataCount.class.getName () + "<in> <out>");
System.exit (2);
}
Job Job = job.getinstance (conf, DataCount.class.getSimpleName ());
Job.setjarbyclass (Datacount.class); Set the class where the main function is located
Fileinputformat.setinputpaths (Job, New Path (Args[0]));
Job.setmapperclass (Dtmap.class);
Job.setmapoutputkeyclass (Text.class);
Job.setmapoutputvalueclass (Databean.class);
Job.setreducerclass (Dtreduce.class);
Job.setoutputkeyclass (Text.class);
Job.setoutputvalueclass (Databean.class);
Fileoutputformat.setoutputpath (Job, New Path (Args[1]));
System.exit (Job.waitforcompletion (true)? 0:1); Wait for MapReduce to complete and print job progress details
}
}
/**
* Implement writable interface, rewrite Write method and ReadFields method, write out strictly in field order
* @author Yao
*
*/
Class Databean implements writable {
Private String Telno;
Private long uppayload;
Private long downpayload;
Private long totalpayload;
Public Databean () {
}
Public Databean (String Telno, Long uppayload, long downpayload) {
Super ();
This.telno = Telno;
This.uppayload = Uppayload;
This.downpayload = Downpayload;
This.totalpayload = Uppayload + downpayload;
}
@Override
public void ReadFields (Datainput in) throws IOException {
This.telno = In.readutf ();
This.uppayload = In.readlong ();
This.downpayload = In.readlong ();
This.totalpayload = In.readlong ();
}
@Override
public void Write (DataOutput out) throws IOException {
Out.writeutf (Telno);
Out.writelong (Uppayload);
Out.writelong (Downpayload);
Out.writelong (Totalpayload);
}
@Override
Public String toString () {
return this.telno+ "\ t" +this.uppayload+ "\ T" +this.downpayload+ "\ T" +this.totalpayload;
}
Public String Gettelno () {
return telno;
}
public void Settelno (String telno) {
This.telno = Telno;
}
Public long getuppayload () {
return uppayload;
}
public void Setuppayload (long uppayload) {
This.uppayload = Uppayload;
}
Public long getdownpayload () {
return downpayload;
}
public void Setdownpayload (long downpayload) {
This.downpayload = Downpayload;
}
Public long gettotalpayload () {
return totalpayload;
}
public void Settotalpayload (long totalpayload) {
This.totalpayload = Totalpayload;
}
}
Serialization of the hadoop2.2.0 MapReduce