大数据- MapReduce计算模型

1.分布式文件系统

1.1 数据激增

以前,在数据量比较少的时候是单节点结构,CPU-Memory-Disk;后来,随着互联网的不断发展,数据量激增;以Google为例:Google每天产生的网页数量达到200TB,假设磁盘读取带宽为50MB/sec,则读取这些文件需要46天,后续的数据处理与操作话费的时间可能会更多。

1.2 分布式文件系统

分布式文件系统结构如下:
这里写图片描述
1. 数据以“块状”形式在多台机器上存储
    避免了大文件无法直接存入磁盘的问题。
2. 每个数据块都会重复的在多台机器上存储
    每个文件快会被重复的存储2到3次,集群中节点出现故障时,依旧能够正常使用数据。
3. 这种存储方式保证了数据的持续性和随时可取性

2.MapReduce计算模型

2.1 MapReduce总览

MapReduce主要包含Map、Group By Key和Recude两个过程
- Map
逐个文件进行扫描
扫描的同时抽取出我们感兴趣的内容(Keys)
- Group by Key
按一定规则进行排序
- Reduce
聚合、总结、过滤或转换
写入结果
总结:MapReduce总体框架和上述过程描述一致,只是Map和Reduce函数要根据具体问题具体实现

2.2 Map步骤


对所有数据块按行逐个构建键值对

2.3 Reduce步骤


将所有相同的key值,全部Reduce到一起。

2.4 MapReduce并行化

这里写图片描述
1. 将数据按行进行分块,代入不同的Map Task
2. 将不同的key代入对应的Reduce Task,进行Sort、Group和Reduce工作
通常Map Task的数量远远大于Reduce Task;每个Reduce Task最终要输出到单独文件上;当文件很大时,把文件拆小一点进行Map Task批处理会更快。

2.5 MapReduce的背景环境需要负责的工作
  1. 对原始数据进行分区(partition)
  2. 调度程序在一系列的机器集群上都并行进行
  3. 执行中间过程的group by key步骤
  4. 处理运行过程中的突发节点故障
  5. 处理并行运行过程中的节点与节点之间的通信

3.MapReduce实例

  • 场景1
    现有一个超大文本文件,文件本身太大无法全部载入内存,所有的词和频次对<word,count>可以全部载入内存。
    对于这种问题可以直接使用dic,若dic中有该key,则将value + 1。dic中没有该key,则添加该<key,value>
  • 场景2
    若所有词和频次对<word,count>可以超出了内存大小。
    1. 对超大文档,按行读取
    2. Map:对每一行的每个单词生成<word,value>
    3. 将所有含有相同key的键值对排列在一起
    4. Reduce: 收集和统计对应同一个key的value并输出
    5. 序列化读取整个文档,统计所有的key对应的value。
      MapReduce计算模型统计词频,如下所示:

4.改进与优化

4.1 改进1

以词频统计为例:
合并器(Combiner)预先合并了单个mapper(单个节点)中的键值对

优点:后续步骤只需要传输和重组更少的数据即可

5.Hadoop和Spark简单介绍

5.1Hadoop

使用Java实现的Map-Reduce开源框架
使用HDFS进行稳定存储

5.2 Spark

美团的spark在架构中的位置
这里写图片描述
http://tech.meituan.com/spark-in-meituan.html
Spark:被称作Say Goodby to MapReduce
在MapReduce中都要指定输入和输出文件的路径,每一次要对新的输出再一次做MapReduce,多次迭代,要写大量的MapReduce,都是在磁盘级的写入和读取,开销很大。
Spark只读一次,把大量的迭代工作放入内存中,Spark特别吃内存,但速率快;所以,在用到迭代场景中,比如LR的梯度下降求参数,Spark比较适用。

5.3 云计算

按小时计费的租赁计算系统

没有更多推荐了,返回首页