Hadoop是一个适合海量数据的分布式存储和分布式计算的平台

主要有以下功能:

Hadoop Common:基础型功能

Hadoop Distributed File System (HDFS™):一种分布式文件系统,可提供对应用程序数据的高吞吐量访问。负责存放数据

Hadoop YARN:作业调度和集群资源管理的框架。负责资源的调配

Hadoop MapReduce:基于 YARN 的系统,用于并行处理大型数据集,大数据的计算框架

 

HDFS

进程理解:

 

 

联邦机制:

 

 

宏观写流程图:

微观写流程图:

读流程图:

其中要注意的是:

这里我们在文件切分里使用了一个非常重要的思想即–分而治之

在Hadoop 1默认大小为64M,在Hadoop 2及其之后默认大小为128M

HDFS中小于一个块的大小的文件不会占据整个块的空间

备份的数量要小于等于节点的数量

每个数据块默认会有三个副本

block的位置信息不会持久化,需要每次开启集群的时候DN向NN汇报

NameNode为了效率,将所有的操作都在内存中进行

 

拆分的数据块需要等大的原因(面试题)

a. 数据计算的时候简化问题的复杂度(否则进行分布式算法设计的时候会因为数据量不一很难设计)

b. 数据拉取的时候时间相对一致

c. 通过偏移量就知道这个块的位置

d. 相同文件分成的数据块大小应该相等

注意事项

a. 只要有任意一个块丢失,整个数据文件被损坏

b. HDFS中一旦文件被存储,数据不允许被修改 修改会影响偏移量

 

MapReduce

架构特点:

MapReduce1.x:

JobTracker

   主节点,单点,负责调度所有的作用和监控整个集群的资源负载。

TaskTracker

   从节点,自身节点资源管理和JobTracker进行心跳联系,汇报资源和获取task。

Client

   以作业为单位,规划作业计算分布,提交作业资源到HDFS,最终提交作业到JobTracker。

Slot(槽):

属于JobTracker分配的资源(计算能力、IO能力等)。

不管任务大小,资源是恒定的,不灵活但是好管理。

Task(MapTask–>ReduceTask):

开始按照MR的流程执行业务。

当任务完成时,JobTracker告诉TaskTracker回收资源。

MapReduce1.x的弊端

  1.JobTracker负载过重,存在单点故障。

  2.资源管理和计算调度强耦合,其它计算框架难以复用其资源管理。

  3.不同框架对资源不能全局管理。

 

MapReduce2.x:

 

Client: 客户端发送MR任务到集群,其中客户端有很多种类,例如hadoop jar

ResourceManager: 资源协调框架的管理者,分为主节点和备用节点(防止单点故障,主备的切换基于ZK的管理),它时刻与NodeManager保持心跳,接受NodeManager的汇报(NodeManager当前节点的资源情况)。

当有外部框架要使用资源的时候直接访问ResourceManager即可。

如果是有MR任务,先去ResourceManager申请资源,ResourceManager根据汇报分配资源,例如资源在NodeManager1,那么NodeManager1要负责开辟资源。

Yarn(NodeManager): Yarn(Yet Another Resource Negotiator,另一种资源协调者),统一管理资源。以后其他的计算框架可以直接访问yarn获取当前集群的空闲节点。

每个DataNode上默认有一个NodeManager,NodeManager汇报自己的信息到ResourceManager。

Container: 它是动态分配的,2.X资源的代名词。

ApplicationMaster: 我们本次任务的主导者,负责调度本次被分配的资源Container。当所有的节点任务全部完成,applicaion告诉ResourceManager请求杀死当前ApplicationMaster线程,本次任务的所有资源都会被释放。

Task(MapTask–ReduceTask): 开始按照MR的流程执行业务,当任务完成时,ApplicationMaster接收当前节点的反馈。

 

YARN【Yet Another Resource Negotiator】:Hadoop 2.0新引入的资源管理系统,直接从MRv1演化而来的。

核心思想:将MRv1中JobTracker的资源管理和任务调度两个功能分开,分别由ResourceManager和ApplicationMaster进程实现:

   ResourceManager:负责整个集群的资源管理和调度。

   ApplicationMaster:负责应用程序相关的事务,比如任务调度、任务监控和容错等。

YARN的引入,使得多个计算框架可运行在一个集群中 每个应用程序对应一个ApplicationMaster 目前多个计算框架可以运行在YARN上,比如MapReduce、Spark、Storm等。

 

MapReduce流程图:

MapReduce详细流程数据变化:

注意事项:

有多少个切片就会执行多少个Map任务

默认情况下,Split切片的大小等于Block的大小 ,默认128M,如果读取到最后一个block块的时候,与前一个blokc块组合起来的大小小于128M*1.1的话,他们结合生一个split切片,生成一个map任务

shuffle就是map之后,reduce之前的所有操作的过程,包含map task端对数据的分区、排序,溢写磁盘和合并操作,以及reduce task端从网络拉取数据、对数据排序合并等一系列操作。shuffle中做了大量的排序,数据溢写、合并和网络传输的工作,故而shuffle是个非常耗时的过程。

当我们对汉字进行操作时需要借助IK分词器(ikanalyzer)对汉字进行分词

版权声明:本文为slm-1314521原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/slm-1314521/p/16630944.html