Hadoop-MapReduce

Hadoop-MapReduce 映射归纳

Hadoop-MapReduce是什么?

  • MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)""Reduce(归约)",是它们的主要思想。
  • 它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。
  • MapReduce 必须构建在 hdfs 之上一种大数据离线计算框架
    • 在线:实时数据处理
    • 离线:数据处理时效性没有在线那么强,但是相对也需要很快得到结果
  • MapReduce 不会马上得到结果,他会有一定的延时
    • 如果数据量小,使用mapreduce反而不合适
    • 杀鸡用牛刀
  • 原始数据-->map(Key,Value)-->Reduce
  • 分布式计算
    • 将大的数据切分成多个小数据,交给更多的节点参与运算
  • 计算向数据靠拢
    • 将计算传递给有数据的节点上进行工作

Hadoop-MapReduce 工作流程

  • 计算1T数据中每个单词出现的次数

分块->切片->数据缓冲区->分区->排序->合并->归并->磁盘->HDFS MQ

1. 原始数据File

将数据切分成块存放在 HDFS 上

2. 数据块Block

同一个文件中每个块的大小相同,由于块的数量和集群的计算能力不匹配可以动态调整本次参与计算节点数量的一个单位

3. 切片Split

在不改变现在数据存储的情况下,可以控制参与计算的节点数目,通过切片大小可以达到控制计算节点数量的目的,一般切片的大小为块的整数倍,默认情况下,Split 切片的大小等于 Block 的大小 ,默认128M, 一个切片对应一个

4. MapTask

MapTask就是一个程序map 默认从所属切片读取数据,每次读取一行(默认读取器)到内存中,内存是有限的,可能会导致内存溢出,都放在硬盘效率低,所以,边写入到内存,边写出到硬盘

5. 环形数据缓冲区

每一个Map可以独享的一个内存区域。在内存中构建一个环形数据缓冲区 (kvBuffer) ,默认大小为100M。设置缓冲区的阈值为80%,当缓冲区的数据达到80M开始向外溢写到硬盘。溢写的时候还有20M的空间可以被使用效率并不会被减缓。而且将数据循环写到硬盘,不用担心 OOM 问题

6. 分区Partation

根据Key直接计算出对应的Reduce。分区的数量和 Reduce 的数量是相等的。 默认分区的算法是Hash然后取余,Object 的 hashCode 方法和equals 方法,如果两个对象equals,那么两个对象的hashcode一定相等,如果两个对象的hashcode相等,但是对象不一定equlas

7. 排序Sort

对要溢写的数据进行排序(QuickSort),按照先Partation后Key的顺序排序-->相同分区在一起,相同Key的在一起,我们将来溢写出的小文件也都是有序的

8. 溢写Spill

将内存中的数据循环写到硬盘,不用担心OOM问题。每次会产生一个80M的文件,如果本次Map产生的数据较多,可能会溢写多个文件

9. 合并Merge

因为溢写会产生很多有序(分区 key)的小文件,而且小文件的数目不确定,后面向reduce传递数据带来很大的问题,所以将小文件合并成一个大文件,将来拉取的数据直接从大文件拉取即可,合并小文件的时候同样进行排序(归并排序),最终产生一个有序的大文件

10. 组合器combiner

集群的带宽限制了 mapreduce 作业的数量,因此应该尽量避免 map和 reduce 任务之间的数据传输。combiner 的意义就是对每一个 maptask 的输出进行局部汇总,以减小网络传输量。

11. 拉取Fetch

将相同的数据拉取到一个节点上,我们需要将Map的临时结果拉取到Reduce节点, 原则: 相同的Key必须拉取到同一个Reduce节点,但是一个Reduce节点可以有多个Key

12. 合并Merge

因为reduce拉取的时候,会从多个map拉取数据。那么每个map都会产生一个小文件,这些小文件(文件与文件之间无序,文件内部有序),为了方便计算(没必要读取N个小文件),需要合并文件,归并算法合并成2个(qishishilia) 相同的key都在一起

13. 归并Reduce

将文件中的数据读取到内存中,一次性将相同的key全部读取到内存中,直接将相同的key得到结果-->最终结果

14. 写出Output

每个reduce将自己计算的最终结果都会存放到HDFS上

Hadoop YARN
是什么?

Yarn 是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统和调度平台 ,可为上层应用提供统一的资源管理和调度 。

YARN 的基本结构

YARN是一个资源管理、任务调度的框架,主要包含三大模块:ResourceManagerRM)、NodeManagerNM)、ApplicationMasterAM)。

  • ResourceManager 负责所有资源的监控、分配和管理,一个集群只有一个;
  • NodeManager 负责每一个节点的维护,一个集群有多个。
  • ApplicationMaster 负责每一个具体应用程序的调度和协调,一个集群有多个;

对于所有的 applications,RM 拥有绝对的控制权和对资源的分配权。而每个 AM 则会和 RM 协商资源,同时和 NodeManager 通信来执行和监控 task 。

YARN 常用命令
  • yarn node -list -all :列出所有节点;
  • yarn application -list :列出所有 Application;
  • yarn application -list -appStates :根据 Application 的状态过滤(所有状态:ALL、NEW、NEW_SAVING、 SUBMITTED、ACCEPTED、RUNNING、FINISHED、FAILED、KILLED);
  • yarn logs -applicationId application_1667293209556_0001 :查看 Application 的日志;
  • yarn logs -applicationId application_1667293209556_0001 -containerId container_e01_1667293209556_0001_01_000002 :查询 Container 的日志;
  • yarn application -kill application_1667293209556_0001 :根据 ApplicationID 杀死应用;
  • yarn container -list appattempt_1667293209556_0001_000001 :列出 Application 的所有 Container;
  • yarn container -status container_e01_1667293209556_0001_01_000002 :打印 Container 的状态;只有在任务运行的过程中才能看到 Container 的状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值