MapReduce实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
硕士研究生实践报告
题目
作者姓名
作者学号
指导教师
学科专业
所在学院
提交日期
一题目要求
我们的项目背景是,可穿戴设备的实时数据分析。1.txt记录的是某一个用户的心跳周期数据,每一个数值表示一次心跳的周期,单位是秒。例如,0.8表示用户当时的心跳间隙是0.8秒。心跳间期按照顺序存储。
1.利用Hadoop的MapReduce框架编写程序,计算出总测量时间和平均心跳间期,即求和
与求平均。请写出程序,并在实验报告中简单描述你的思路。
2.探索Spark的Transformation中的mapPartition,写出示例程序,并思考何时会用到
mapPartition,为什么要用它?
3.探索Spark的Transformation中的flatMap,写出示例程序,并思考何时会用到它,为什
么要用到它。
4.(选做)SD1和SD2是表征心率变异性的一种指标。结合发给你们的论文,用Java或
者Scala实现SD1和SD2的计算(不用考虑并行化,普通的Java或Scala程序即可)。(选做)假设我们同时监控100个用户的心率,是否能够利用Spark的RDD的特性,并行地计算SD1和SD2?(提示:把每一个用户的心率数据作为RDD里面的一个元素,RDD中不同的元素表示不同用户的心率数据,利用map对每一个用户的心率数据进行并行分析)。请描述设计思路,并尽可能实现一个多用户心率监控的计算程序。
二题目实现
第一题:
本题就是利用Hadoop的MapReduce框架编写程序,计算出总测量时间和平均心跳间期,即求和与求平均,程序代码如下:
package ;
import ;
import ;
import ;
import ;
public class InfoBean implements Writable{
private double sumHeartRate;
private double avgHeartRate;
public double getSumHeartRate() {
return sumHeartRate;
}
@Override
public String toString() {
return
"sumHeartRate\t"+this.sumHeartRate+"\tavgHeartRate\t"+this.avg HeartRate;
}
public void setSumHeartRate(double sumHeartRate) { this.sumHeartRate = sumHeartRate;
}
public double getAvgHeartRate() {
return avgHeartRate;
}
public void setAvgHeartRate(double avgHeartRate) { this.avgHeartRate = avgHeartRate;
}
public void set(double sumHeartRate, double avgHeartRate) { this.sumHeartRate = sumHeartRate;
this.avgHeartRate = avgHeartRate;
}
public void readFields(DataInput in) throws IOException { this.sumHeartRate = in.readDouble();
this.avgHeartRate = in.readDouble();
}
public void write(DataOutput out) throws IOException {
out.writeDouble(this.sumHeartRate);
out.writeDouble(this.avgHeartRate);
}
}
package ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
public class SumStep {
public static class SumMapper extends
Mapper
private Text K = new Text();
private InfoBean V = new InfoBean();
@Override
protected void map(LongWritable key, Text value,
context)
throws IOException, InterruptedException {
String line = value.toString();
double sum = Double.parseDouble(line);
K.set("sum");
V.set(sum,0.0);
context.write(K, V);
}
}
public static class SumReducer extends
Reducer
private InfoBean v = new InfoBean();
@Override
protected void reduce(Text key, Iterable
throws IOException, InterruptedException {
double in_sum = 0;
int count = 0;
for(InfoBean bean : values){
in_sum += bean.getSumHeartRate();
count++;
}
v.set(in_sum,in_sum/count);
context.write(key, v);
}
}
public static void main(String[] args) throws Exception { Configuration conf = new Configuration();
Job job = Job.getInstance(conf);
job.setJarByClass(SumStep.class);
job.setMapperClass(SumMapper.class);
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(InfoBean.class);
FileInputFormat.setInputPaths(job, new Path(args[0]));
job.setReducerClass(SumReducer.class);