一、说明:该实验环境是基于虚拟机Ubuntu、hadoop、eclipse、mapreduce。

1、MapReduce模型简介:

  •MapReduce将复杂的、运行于大规模集群上的并行计算过程高度地抽象到了两个函数:Map(Map 任务 (分割及映射))和Reduce(Reduce 任务 (重排,还原))

•编程容易,不需要掌握分布式并行编程细节,也可以很容易把自己的程序运行在分布式系统上,完成海量数据的计算

•MapReduce采用“分而治之”策略,一个存储在分布式文件系统中的大规模数据集,会被切分成许多独立的分片(split),这些分片可以被多个Map任务并行处理

•MapReduce设计的一个理念就是“计算向数据靠拢”,而不是“数据向计算靠拢”,因为,移动数据需要大量的网络传输开销

•MapReduce框架采用了Master/Slave架构,包括一个Master和若干个Slave。Master上运行JobTracker,Slave上运行TaskTracker

•Hadoop框架是用Java实现的,但是,MapReduce应用程序则不一定要用Java来写

2、详细的整个过程

•映射的任务是为每个分割创建在分割每条记录执行映射的函数。

•有多个分割是好处的, 因为处理一个分割使用的时间相比整个输入的处理的时间要少, 当分割比较小时,处理负载平衡是比较好的,因为我们正在并行地处理分割。

•然而,也不希望分割的规模太小。当分割太小,管理分割和映射创建任务的超负荷开始逐步控制总的作业执行时间。

•对于大多数作业,最好是分割成大小等于一个HDFS块的大小(这是64 MB,默认情况下)。

•map任务执行结果到输出写入到本地磁盘的各个节点上,而不是HDFS。

•之所以选择本地磁盘而不是HDFS是因为,避免复制其中发生 HDFS 存储操作。

•映射输出是由减少任务处理以产生最终的输出中间输出。

•一旦任务完成,映射输出可以扔掉了。所以,复制并将其存储在HDFS变得大材小用。

•在节点故障的映射输出之前,由 reduce 任务消耗,Hadoop 重新运行另一个节点在映射上的任务,并重新创建的映射输出。

•减少任务不会在数据局部性的概念上工作。每个map任务的输出被供给到 reduce 任务。映射输出被传输至计算机,其中 reduce 任务正在运行。

•在此机器输出合并,然后传递到用户定义的 reduce 函数。

•不像到映射输出,reduce输出存储在HDFS(第一个副本被存储在本地节点上,其他副本被存储于偏离机架的节点)。因此,写入 reduce 输出

二、实际运用(股票统计)

1、需要处理的股票数据文件夹内容(export)

2、其中一个文件部分内容

3、编码解析:

(1)map函数分割:

 public static class Map extends Mapper<Object,Text,Text,Text>{           private Text text = new Text();   private Text keys = new Text();  private int no = 0;  public void map(Object key,Text value,Context context)throws IOException,InterruptedException{  String line = value.toString();  this.no +=1;              System.out.println(this.no+line);             String[] lines = line.split("\\s+");  for(int i =0;i<lines.length;i++){  System.out.print(lines[i]+" ~~");  }  if(this.no == 1){             this.keys.set("股票编码:"+lines[0]);              }  if(this.no > 2){  if(lines.length == 7){  this.text.set(lines[0]+"+"+lines[1]+"+"+lines[4]);   System.out.println(this.no+"---->"+lines[0]+"+"+lines[1]+"+"+lines[4]);  context.write(this.keys, this.text);  }                 }                  }
}  

(2)reduce函数还原:

public static class Reduce extends Reducer<Text,Text,Text,Text>{        private Text text = new Text();       public void reduce(Text key,Iterable<Text> values,Context context) throws IOException, InterruptedException{  double sum1 = 0.0;  double sum2 = 0.0;  int n = 0;                System.out.println("...................start"+key.toString());  Iterator<Text> $it = values.iterator();  while($it.hasNext()){                     String record =$it.next().toString();  System.out.println(n);                    System.out.println("原始数据:"+record);  n++;                      System.out.println("第"+n+"次循环");  String []result = record.split("[+]");  System.out.println(Double.valueOf(result[1])+" "+Double.valueOf(result[2]));  sum1 +=(Double.valueOf(result[1])*100);                   sum2 +=(Double.valueOf(result[2])*100);                   System.out.println(sum1/100+" "+sum2/100);                    }  System.out.println("最后的结果:"+sum1/100+" "+sum2/100);  double openPrise = sum1/(100*n);  double closePrise = sum2/(100*n);  openPrise = (double)Math.round(openPrise*100)/100;  closePrise = (double)Math.round(closePrise*100)/100;  System.out.println("平均值:"+openPrise+" "+closePrise);         Double.toString(closePrise);  String result ="开盘平均价:"+Double.toString(openPrise)+",   收盘平均价:"+Double.toString(closePrise);  this.text.set(result);  context.write(key, this.text);     }  }  

4、部分结果显示

5、完整代码:

import java.io.IOException;
import java.util.Iterator;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
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.util.GenericOptionsParser;  public class  Data{  public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {  Configuration conf = new Configuration();  conf.set("fs.default.name", "hdfs://localhost:9000");  String[] otherArgs = (new GenericOptionsParser(conf,args)).getRemainingArgs();  if(otherArgs.length<2){  System.err.println("Usage:Data<in><out>");  System.exit(2);  }  Job job = Job.getInstance(conf,"Data");  job.setJarByClass(Data.class);  job.setMapperClass(Data.Map.class);  System.out.println("Mapper over");  job.setReducerClass(Data.Reduce.class);  System.out.println("Reduce over");  job.setOutputKeyClass(Text.class);  job.setOutputValueClass(Text.class);  System.out.println("all over");  for(int i = 0;i<otherArgs.length-1;i++){  FileInputFormat.addInputPath(job, new Path(otherArgs[i]));  }         FileOutputFormat.setOutputPath(job, new Path(otherArgs[otherArgs.length-1]));         System.exit(job.waitForCompletion(true)?0:1);
} public static class Map extends Mapper<Object,Text,Text,Text>{           private Text text = new Text();   private Text keys = new Text();  private int no = 0;  public void map(Object key,Text value,Context context)throws IOException,InterruptedException{  String line = value.toString();  this.no +=1;              System.out.println(this.no+line);             String[] lines = line.split("\\s+");  for(int i =0;i<lines.length;i++){  System.out.print(lines[i]+" ~~");  }  if(this.no == 1){             this.keys.set("股票编码:"+lines[0]);              }  if(this.no > 2){  if(lines.length == 7){  this.text.set(lines[0]+"+"+lines[1]+"+"+lines[4]);   System.out.println(this.no+"---->"+lines[0]+"+"+lines[1]+"+"+lines[4]);  context.write(this.keys, this.text);  }                 }                  }
}  public static class Reduce extends Reducer<Text,Text,Text,Text>{        private Text text = new Text();       public void reduce(Text key,Iterable<Text> values,Context context) throws IOException, InterruptedException{  double sum1 = 0.0;  double sum2 = 0.0;  int n = 0;                System.out.println("...................start"+key.toString());  Iterator<Text> $it = values.iterator();  while($it.hasNext()){                     String record =$it.next().toString();  System.out.println(n);                    System.out.println("原始数据:"+record);  n++;                      System.out.println("第"+n+"次循环");  String []result = record.split("[+]");  System.out.println(Double.valueOf(result[1])+" "+Double.valueOf(result[2]));  sum1 +=(Double.valueOf(result[1])*100);                   sum2 +=(Double.valueOf(result[2])*100);                   System.out.println(sum1/100+" "+sum2/100);                    }  System.out.println("最后的结果:"+sum1/100+" "+sum2/100);  double openPrise = sum1/(100*n);  double closePrise = sum2/(100*n);  openPrise = (double)Math.round(openPrise*100)/100;  closePrise = (double)Math.round(closePrise*100)/100;  System.out.println("平均值:"+openPrise+" "+closePrise);         Double.toString(closePrise);  String result ="开盘平均价:"+Double.toString(openPrise)+",   收盘平均价:"+Double.toString(closePrise);  this.text.set(result);  context.write(key, this.text);     }  }
}  

大数据之统计股票开盘和收盘平均价相关推荐

  1. 大数据在统计中的应用初探

    大数据是信息时代的必然产物,是人们在日常工作.学习.生活中,使用以现代网络.特别是以互联网为特征的现代信息技术和其他各种电子计量设备而产生的海量信息.对海量信息的采集.存储.分析.整合.控制而得到的数 ...

  2. 分析大数据时代的股票期货市场及其分析意义400字

    在大数据时代,股票期货市场受到了更多的关注,因为人们可以利用大数据技术来更好地分析市场趋势,并做出更明智的投资决策. 对于股票期货市场来说,大数据分析可以帮助投资者更好地了解市场动态,并做出更准确的投 ...

  3. 211安徽大学大数据与统计学院成立!安徽省属高校首家!

    安徽省属高校首家大数据与统计学院在安徽大学揭牌成立. 安徽大学党委书记蔡敬民出席会议并讲话.校长匡光力与大数据与统计学院院长吴宗敏共同为学院揭牌.校党委副书记.常务副校长陈诗一主持,校党委常委.纪委书 ...

  4. 大数据可以统计到媳妇的喜好吗?

    今天媳妇问我一个问题:"大数据可以统计到媳妇的喜好吗?" 正确的标准答案是:利用大数据技术统计媳妇的喜好是一个相当不靠谱的事情,因为程序员再牛.使用再炫酷的技术去统计媳妇的喜好,都 ...

  5. python 大智慧股票行情数据_Python获取股票历史数据和收盘数据的代码实现

    各种股票软件,例如通达信.同花顺.大智慧,都可以实时查看股票价格和走势,做一些简单的选股和定量分析,但是如果你想做更复杂的分析,例如回归分析.关联分析等就有点捉襟见肘,所以最好能够获取股票历史及实时数 ...

  6. 数据可视化大屏电商数据展示平台开发实录(Echarts柱图曲线图、mysql筛选统计语句、时间计算、大数据量统计)

    数据可视化大屏电商数据展示平台 一.前言 二.项目介绍 三.项目展示 四.项目经验分享 4.1 翻牌器 4.1.1 翻牌器-今日实时交易 4.1.2.翻牌器后端统计SUM函数的使用 4.2 不同时间指 ...

  7. 大数据产品测试----统计类产品测试项目总结

    统计类产品测试总结 一.需求背景: 统计平台面向微信小程序.微信小游戏.QQ小程序.QQ小游戏进行数据统计.用户分析,给运营人员提供不同场景下小程序的数据进行分析,分享.二维码.事件,小游戏提供关卡. ...

  8. 北航数理统计大作业_2019复旦大学大数据学院统计学硕总分411考研初试经验

    先说一下我的基础,英语水平一直还行,考过一次六级568分,但可能因此没有重视英语最后还是不高:数学是大学一直就没怎么听课学不明白,线代基础几乎全忘光了,就是Ax=b有解条件都不知道的程度:专业课有一定 ...

  9. HADOOP集群大数据词频统计及设计比较(完整教程)

    ###如若发现错误,或代码敲错,望能评论指正!!! 通过百度网盘分享的文件:Hadoop相关需要的软件 链接:https://pan.baidu.com/s/1XzDvyhP4_LQzAM1auQCS ...

最新文章

  1. LeetCode简单题之棒球比赛
  2. 【android-tips】android xml布局总结篇
  3. JCO与bapi的联合使用
  4. 关于SimpleDateFormat时间格式化线程安全问题
  5. 关于数据库的水平切分和垂直切分的一些概念(转)
  6. Qt creator
  7. Winform中Treeview控件失去焦点,将选择的节点设置为高亮显示 (2012-07-16 13:47:07)转载▼...
  8. Android 10 使用PreferenceScreen的方法
  9. 副本,字节跳动技术整理
  10. android10一键root权限获取,完美root方法教你如何一键获取手机ROOT权限
  11. C#——窗体程序,模拟高温高压锅炉降压处理
  12. HTML期末作业-我的大学宿舍
  13. 鸿蒙系统是怎样一种系统,鸿蒙系统pc版怎么安装 鸿蒙系统pc版安装教程
  14. 千锋Python培训教程合集
  15. 知乎android客户端drawer布局探究
  16. b站百万Up主分享如何做内容
  17. 使用cv2.VideoCapture()函数捕获笔记本内置摄像头的拍摄画面
  18. Java之数组实现增删改
  19. 自媒体平台营销变现,今日头条如何开通收益引流方法教程
  20. Codeforces 776B 776C 程序(夏洛克专场)

热门文章

  1. C语言32位正整数作为id进程,SOJ4453 Excel列数 进制转换
  2. 操作系统怎样控制硬件
  3. Openzeppelin库第八期:Crowdsale
  4. 印度正试图建立世界上最大的面部识别系统
  5. 人工智能离不开“人工投喂”数据,现在中国约有 100 万人做这事
  6. 雷军在联想内部分享,把小米讲透了!
  7. 巴西龟饲养日志----黑壳虾吃的很欢实
  8. 常用软件分享及下载地址
  9. 智能运维探索:有一种多指标异常检测方案,你可能没用过...
  10. 宇宙文明等级的划分标准