MapReduce实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 values, Context context)

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);

相关文档
最新文档