大数据-MapReduce

大数据-MapReduce

1.分布式并行编程

  • 传统的并行计算,共享型方案刀片服务器,适用于实时的细粒度计算,尤其是计算密集的应用。
  • MapReduce扩展性好,节点普通pc也可,每个节点拥有自己的内存和空间,适用于非实时的批处理,以及数据密集型的应用。

2.MapReduce模型

  • 复杂的计算过程高度抽象成两个函数,map和reduce。
  • 将庞大数据切片,对每个小片并行的单独使用map处理,计算向数据靠拢,数据不需要迁移,数据直接在当前机器上被执行。
  • hadoop集群分为一个master和若干个slave,其中master上的jobtracker负责作业调度和处理以及失败和恢复工作,slave上面的tasktracker负责接受jobtracker发送的作业处理指令完成具体的任务处理。
  • map函数相当于对字符串中每个字符value赋值为1,reduce相当于对相同字符合并value。
    大数据-MapReduce_第1张图片

3.MapReduce体系结构

大数据-MapReduce_第2张图片
client(客户端)

  • client提交作业。
  • 通过接口提交当前作业的运行状态。

JobTracker(作业跟踪器)

  • 负责资源的监控和作业的调度。
  • 监控底层的其他的TaskTracker以及当前运行的job的健康状况。
  • 一旦探测到失败的情况就把这个任务转移到其他节点继续执行跟踪任务的执行进度和资源使用量。

TaskTracker(任务调度器)

  • 执行相关任务和接收JobTracker发送过来的命令。
  • 把资源的使用情况和任务的运行进度通过心跳的方式,也就是heartbeat发送给JobTracker。

4.MapReduce工作流程概述

大数据-MapReduce_第3张图片

  • map之后不会立即reduce,map之后需要shuffle(分区,排序,归并),再进行reduce。
  • 任务独立性:不同的map任务之间不会发生数据交换,reduce也是。

大数据-MapReduce_第4张图片

  • inputformat:对输入进行格式验证,并且把大的数据逻辑切分,recordread,读出来成key-value,之后map。
  • outputformat:对输出进行格式检查。
    大数据-MapReduce_第5张图片
  • 文件分片大小:一个文件被分成许多块存储,对一个文件分片有个理想的值。
  • 分片大小的设置:多少个分片就有多少个map任务,分片过多map任务过多,map任务之间相关切换耗费相关 管理资源影响执行效率。分片过少,影响并行度,达不到处理效率的目的。
    -理想的分片大小: 一般一个块大小作为分片大小(64M或者128M),否则如图中,需要把block2传输到block1的机器,需要额外的传输效率。
  • reduce任务数量:在多个机器上多个任务同时进行,最优的reduce任务取决于集群总任务槽slot的个数。比总的个数稍微少一些,留些资源处理发生的错误。

5.Shuffle过程详解

大数据-MapReduce_第6张图片

  • shuffle过程包含map端的shuffle和reduce端的shuffle
    大数据-MapReduce_第7张图片
  • 缓存:默认分配100M缓存。
  • 溢写:每个map任务先往缓存中写,写满100M满了后把缓存写入磁盘,叫溢写。
  • 溢写比例:写满才启动溢写,会导致后来生成的map无处写丢失情况,溢写进程不能影响map任务继续执行,设置溢写比例,比如0.8,当写完80M就启动溢写(过程中还需要分区、排序、合并操作,其中分区后给reduce去处理;默认排序;合并减少溢写到磁盘中的数量,两个键值对合并成一个键值对,不是必须,定义并设置门槛值后启动)。jobtracker检测map任务的执行情况,一旦检测到map任务完成,通知相应的reduce任务把数据拉走,及完成了map端的shuffle任务。
    大数据-MapReduce_第8张图片
  • reduce任务会向jobtracker询问要的数据是否可拿到,一旦map任务完成,数据写到磁盘,jobtracker通知reduce任务。
  • 先归并后合并,归并是归类,合并是把value值加起来,再分给reduce任务。

6.MapReduce的任务执行过程

大数据-MapReduce_第9张图片

  • 1.程序部署:选出master和worker,master将应用程序分发给worker。
  • 2.任务分配:选出一部分机器执行map任务,选出另一部分执行reduce任务,选出机器执行分片任务。
  • 3.读数据:从分片中读取数据生成键值对,提交给map任务。输出键值对,先写到缓存。
  • 4.本地写数据:数据溢写到磁盘。
  • 5.远程读取数据:负责执行reduce任务的机器从各个相关的map机器任务远程读取自己要处理的数据到本地。处理结果为键值对。
  • 6.写数据:把相关结果写入hdfs文件系统。中间结果是写入磁盘不是文件系统,代价低些。

7. 实例分析WordCount

大数据-MapReduce_第10张图片
大数据-MapReduce_第11张图片

8.MapReduce的应用

两表具备公共字段,自然连接:
大数据-MapReduce_第12张图片
大数据-MapReduce_第13张图片

9.MapReduce编程实践

大数据-MapReduce_第14张图片
Map逻辑部分程序:
大数据-MapReduce_第15张图片
Reduce部分逻辑(输入形式为,其中value-list存储在Iterable容器中):
大数据-MapReduce_第16张图片
大数据-MapReduce_第17张图片
大数据-MapReduce_第18张图片
大数据-MapReduce_第19张图片
编译成jar包运行即可。

你可能感兴趣的:(大数据,mapreduce)