hadoop MapReduce

MapReduce

MR : map + reduce

输入(格式化k,v)数据集 -》 map映射成 一个中间数据集(k,v)-》reduce(sql)
相同的key 为一组,调用一次reduce方法,方法内迭代这一组数据进行计算(类似的sql)

-排序
+ 比较

  • 遍历
  • 计算
  • 各种维度花销,音乐,其他

MapReduce : MapTask & ReduceTask
在这里插入图片描述
计算向数据移动
上图可知:
map数量和split数量有关系,一一对应。
split是 对block块逻辑上的切分(block是物理上的切分),可以对block进行逻辑上的切分

reduce数量: 和key个数有关系。同一个key必须交给同一个reduce来处理。可以多个key交个一个reduce来处理。但是不能把一个key拆分交给多个reduce来处理

mr框架分为四个阶段
1 切片 split
2 map
3 shuffle 洗牌 相同key交给reduce
4 reduce

数量变化
block > split
1:1
N:1
1:N
split > map
1:1
map > reduce
N:1
N:N
1:1
1:N
group(key)>partition
1:1
N:1
N:N

shuffle :框架内部实现机制
分布式计算节点数据流转:连接MapTask 和ReduceTask
在这里插入图片描述
上图中的在这里插入图片描述是创建一个缓存区。这个缓存存满后生成一个临时文件,清空缓存区后继续处理,直到这个map处理完成split的数据。然后进行对这些临时文件排序,完成后进行将这些文件快排和归并生成一个文件向后发送。
在这个缓存区中进行两次排序,第一次排序(按照分区进行排序,有几个reduce就有几个分区, 可能是粗粒度排序),再进行一次排序(按相同的key分组排序)。

key, value, partition

fetch: 数据的压缩处理,减少磁盘的交互
这个文件经过shuffle后,进行归并,归并到一定数量交给reduce

mr框架 单词统计
在这里插入图片描述
map:

  • 读懂数据
  • 映射为kv模型
  • 并行分布式
  • 计算向数据移动
    Reduce
  • 数量全量/分量加工(partition/ group) partition可以包含多个 group
  • reduce中可以包含不同的key
  • 相同的key汇聚到一个reduce中
  • 相同的key调用一次reduce方法
    • 排序实现key的汇聚

kv使用自定义数据类型(封装成对象)

  • 作为参数传递,节省开发成本,提高程序自由度
  • Writable序列化,使能分布式程序数据交互,要有序列化接口
  • comparable比较器:要有排序接口, 实现具体排序(字典序,数值序等)

hadoop 1.x MR
在这里插入图片描述
jobTracker 的作用:
1 client的分配的任务调度
2 整个集群的资源管理 【保持与Task Tracker 时时联系】

Mapper
在这里插入图片描述
Reducer
在这里插入图片描述

  • MRv1角色:
    • JobTracker
      核心,主,单点
      调度所有的作业
      监控整个集群的资源负载 与 TaskTracker交互
    • TaskTracker
      从,自身节点资源管理
      和JobTracker心跳,汇报资源,获取Task任务
    • Client
      作业为单位
      规划作业计算分布
      提交作业资源到HDFS
      最终提交作业到JobTracker
  • 弊端:
    • JobTracker:负载过重,单点故障
    • 资源管理与计算调度强耦合,其他计算框架需要重复实现资源管理
    • 不同框架对资源不能全局管理

YARN(MRv2)资源管理框架
在这里插入图片描述

jobTracker的任务调度工作交给了现在的 App Mstr
jobTracker的资源管理 工作交给了 Resource Manager
App Mstr根据Resource Manager的确认消息和 job任务的消息会在节点上创建容器Container(默认1G,如果超过1G则中断停止)
NodeManger 向Resource Manager汇报节点的使用情况

Resource Manager 会进行HA,需要zookeeper

MRv2:On YARN

  • YARN:解耦资源与计算

    • ResourceManager
      主,核心
      集群节点资源管理
    • NodeManager
      与RM汇报资源
      管理Container生命周期
      计算框架中的角色都以Container表示
    • Container:【节点NM,CPU,MEM,I/O大小,启动命令】
      默认NodeManager启动线程监控Container大小,超出申请资源额度,kill
      支持Linux内核的Cgroup
  • MR :

    • MR-ApplicationMaster-Container
      作业为单位,避免单点故障,负载到不同的节点
      创建Task需要和RM申请资源(Container /MR 1024MB)
    • Task-Container
  • Client:

    • RM-Client:请求资源创建AM
    • AM-Client:与AM交互
  • YARN:Yet Another Resource Negotiator;

  • Hadoop 2.0新引入的资源管理系统,直接从MRv1演化而来的;

    • 核心思想:将MRv1中JobTracker的资源管理和任务调度两个功能分开, 分别由ResourceManager和ApplicationMaster进程实现
    • ResourceManager:负责整个集群的资源管理和调度
    • ApplicationMaster:负 责应用程序相关的事务,比如任务调度、任务监控和容错等
  • YARN的引入,使得多个计算框架可运行在一个集群中

    • 每个应用程序对应一个ApplicationMaster
    • 目前多个计算框架可以运行在YARN上,比如MapReduce、Spark、Storm等

MapReduce On YARN

  • MapReduce On YARN:MRv2
  • 将MapReduce作业直接运行在YARN上,而不是由JobTracker和- TaskTracker构建的MRv1系统中
  • 基本功能模块
    • YARN:负责资源管理和调度
    • MRAppMaster:负责任务切分、任务调度、任务监控和容错等
    • MapTask/ReduceTask:任务驱动引擎,与MRv1一致
  • 每个MapRaduce作业对应一个MRAppMaster
    • MRAppMaster任务调度
    • YARN将资源分配给MRAppMaster
    • MRAppMaster进一步将资源分配给内部的任务
  • MRAppMaster容错
    • 失败后,由YARN重新启动
    • 任务失败后,MRAppMaster重新申请资源
启动yarn
NN-1NN-2DNZKZKFCJNNRSNM
Node001***
Node002******
Node003*****
Node004****

在原来的配置上修改
vi mapred-site.xml

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

vi yarn-site.xml

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
 <property>
   <name>yarn.resourcemanager.ha.enabled</name>
   <value>true</value>
 </property>
 <property>
   <name>yarn.resourcemanager.cluster-id</name>
   <value>cluster1</value>
 </property>
 <property>
   <name>yarn.resourcemanager.ha.rm-ids</name>
   <value>rm1,rm2</value>
 </property>
 <property>
   <name>yarn.resourcemanager.hostname.rm1</name>
   <value>node003</value>
 </property>
 <property>
   <name>yarn.resourcemanager.hostname.rm2</name>
   <value>node004</value>
 </property>
 <property>
   <name>yarn.resourcemanager.zk-address</name>
   <value>node002:2181,node003:2181,node004:2181</value>
 </property>
</configuration>

分发node002,node003,node004

node003,node004 互相交换添加ssh的公钥,因为 RS在这两个上面。需要进行信息交互,切换主备

首先启动ndoe002,node003,node004的zookeeper

zkServer.sh start

然后在node001启动

start-dfs.sh
start-yarn.sh

RS需要手动启动
在 node003,node004启动RS

yarn-daemon.sh start resourcemanager

输入jps查看

在浏览器输入 ndoe003:8088 查看
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值