hadoop 手机流统计



package com.Example;


import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;


import org.apache.hadoop.io.Writable;


public class DataWriter implements Writable {


// update
private int upPackNum;
private int upPayLoad;


// down
private int downPackNum;
private int downPayLoad;


public int getUpPackNum() {
return upPackNum;
}


public void setUpPackNum(int upPackNum) {
this.upPackNum = upPackNum;
}


public int getUpPayLoad() {
return upPayLoad;
}


public void setUpPayLoad(int upPayLoad) {
this.upPayLoad = upPayLoad;
}


public int getDownPackNum() {
return downPackNum;
}


public void setDownPackNum(int downPackNum) {
this.downPackNum = downPackNum;
}


public int getDownPayLoad() {
return downPayLoad;
}


public void setDownPayLoad(int downPayLoad) {
this.downPayLoad = downPayLoad;
}


public DataWriter() {
}


public void set(int upPackNum, int upPayLoad, int downPackNum,
int downPayLoad) {
this.upPackNum = upPackNum;
this.upPayLoad = upPayLoad;
this.downPackNum = downPackNum;
this.downPayLoad = downPayLoad;
}


@Override
public void readFields(DataInput out) throws IOException {
this.upPackNum = out.readInt();
this.upPayLoad = out.readInt();
this.downPackNum = out.readInt();
this.downPayLoad = out.readInt();
}


@Override
public void write(DataOutput out) throws IOException {
out.writeInt(upPackNum);
out.writeInt(upPayLoad);
out.writeInt(downPackNum);
out.writeInt(downPayLoad);
}


@Override
public String toString() {
return "Phone [upPackNum=" + upPackNum + ", upPayLoad=" + upPayLoad
+ ", downPackNum=" + downPackNum + ", downPayLoad="
+ downPayLoad + "]";
}


}



package com.Example;


import java.io.IOException;


import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
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;


public class PhoneValue {


public static class PhoneValueMap extends
Mapper<LongWritable, Text, Text, DataWriter> {
private DataWriter phone = new DataWriter();
private Text text = new Text();


@Override
protected void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
String valus = value.toString();
String[] str = valus.split("/t");
// 假如第二行的数据是手机号码
String phoneNum = str[1];
int upPackNum = Integer.valueOf(str[2]);
int upPayLoad = Integer.valueOf(str[3]);
int downPackNum = Integer.valueOf(str[4]);
int downPayLoad = Integer.valueOf(str[5]);
// set map ouput key / value
text.set(phoneNum); // 设置需要按照哪个键进行统计
phone.set(upPackNum, upPayLoad, downPackNum, downPayLoad);
// set map ouput
context.write(text, phone);
}
}


public static class PhoneValueReduce extends
Reducer<Text, DataWriter, Text, DataWriter> {
private DataWriter dataWriter = new DataWriter();


@Override
protected void reduce(Text arg0, Iterable<DataWriter> arg1, Context arg2) {
int upPackNum = 0;
int upPayLoad = 0;
int downPackNum = 0;
int downPayLoad = 0;
for (DataWriter dataWriter : arg1) {
upPackNum += dataWriter.getUpPackNum();
upPayLoad += dataWriter.getUpPayLoad();
downPackNum += dataWriter.getDownPackNum();
downPayLoad += dataWriter.getDownPayLoad();
}
// set datewritable
dataWriter.set(upPackNum, upPayLoad, downPackNum, downPayLoad);


try {
// set reduce ouput
arg2.write(arg0, dataWriter);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}


/**
* 
* @param args
* @return
*/
public int run(String args) {
// get config
Configuration configuration = new Configuration();
try {
// create job
Job job = Job.getInstance(configuration);
// set job
job.setJarByClass(PhoneValue.class);
// input
FileInputFormat.addInputPath(job, new Path(""));
// map
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(DataWriter.class);
// reduce
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
// ouput
FileOutputFormat.setOutputPath(job, new Path(""));
// submit job
boolean start = job.waitForCompletion(true);
System.exit(start ? 0 : 1);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
return 0;
}
}












  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值