Hadoop概念

Hadoop是一个开源的、分布式存储和分布式计算平台,Hadoop的组成包括两个核心部分:
  HDFS:分布式文件系统,存储海量的数据
  MapReduce:并行处理框架,实现任务分解和调度

HDFS

Hadoop之HDFS、MapReduce小结
【1】HDFS基本概念
 HDFS是通过分布式集群来存储文件,为客户端提供一个虚拟的目录结构。文件存储到HDFS集群中是被切分成若干block块。文件的block块存放在DataNode节点上。HDFS文件系统中的文件与block块之间有映射关系,由NameNode管理。每一个block块在集群中会通过流水线复制存储多个副本,既可以提高数据的可靠性,又可以提高访问的吞吐量。NameNode和DataNode之间是有心跳协议,使NameNode掌握集群DataNode的状态。
【2】HDFS的特点
(1)数据冗余,硬件容错
 通过流水线复制用3个备份来实现硬件上的容错。
(2)流式地数据访问
 流式的数据访问即一次写入,多次读取。一旦被写入,不能被修改。
(3)存储大文件
如果存储的是大量小文件,NameNode由于存储文件的元数据,压力会很大。
适合数据批量读写,吞吐量高。不适合交互式应用,不支持多用户并发写相同文件,延迟低很难满足。
【3】NameNode元数据管理机制
Hadoop之HDFS、MapReduce小结
NameNode维护着元数据信息,维护整个文件系统的文件目录树,接收客户端的操作请求。包括:
1、fsimage:元数据镜像文件,保存在磁盘中。存储某一时段NameNode内存元数据信息
2、edits.log:操作日志文件
3、fstime:保存最近一次checkpoint的时间
客户端上传文件时,NameNode首先往edits log文件中记录元数据操作日志
1、客户端开始上传文件,完成后返回成功信息给NameNode,NameNode就在内存中写入这次上传操作的新产生的元数据信息
2、每当edits log写满时,需要将这一段时间的新的元数据刷到fsimage文件中去
Secondary NameNode是HA(高可用)的一个解决方案。checkpoint的时机:
1、fs.checkpoint.period指定两次checkpoint的最大时间间隔,默认3600秒
2、fs.checkpoint.size规定edits文件的最大值,一旦超过这个值则强制checkpoint,默认大小64M。

MapReduce(分而治之)

Hadoop之HDFS、MapReduce小结
 MapReduce中有两类节点,第一个是JobTracker,它也是一个Master管理节点。客户端提交一个任务,JobTracker把它放到一个后续队列里面,在适当的时候选择一个Job,将这个Job拆分成多个Map任务和Reduce任务,将任务分发给TaskTracker。在部署的时候,TaskTracker和HDFS中的DataNode往往是同一种物理节点。这样可以保证计算是跟着数据走的,保证读取数据开销最小,即移动计算。

 输入数据进行分片,分片之后按照一定规则分给TaskTracker,放到TaskTracker中,分配Map任务。产生一些中间结果(key-value)写到本地的磁盘,key和value根据一些映射规则进行交换,再到Reduce端,进行Reduce任务,Reduce也是一些TaskTracker,运算完之后,数据结果写回到HDFS。

MapReduce容错机制:
1、重复执行:出错可能是Job出错,也可能是硬件问题或数据问题。首先会尝试重试(默认重复执行4次)。若仍出错,则会放弃执行。
2、推测执行:推测执行是在任务执行过程中需要待所有的Map端都完成,Reduce端才会开始。可能会存在某个节点算得很慢,再另外找一台TaskTracker去和它做同样的执行,两者谁先算完就会把另外一个终止。通过推测执行,保证任务不会因为某一两个TaskTracker的故障导致整个执行效率很低。
Yarn:
资源调度 ResourceManager——NodeManager
     节点            节点
MapReduce:
MRAPPMaster——yarnchild
 动态产生     动态产生
Hadoop之HDFS、MapReduce小结

Yarn框架

 MapReduce的逻辑写在一个Mapper类和一个Reducer类,还要写一个Runner类就是用来描述具体的Job,编写的MapReduce逻辑就形成了一个Job,这个Job是要提交给Hadoop集群去运行。代码的提交全部是通过Yarn框架实现的。
 Yarn的Runner,首先会去找ResourceManager通信,通信是申请Job的提交资源staging-dir,还会拿到ResourceManager为这个Job产生的JobID,并把staging-dir和JobID合并在一起形成特定路径。然后客户端再把这些资源提交到HDFS相应的路径下面。随后,Yarn框架会把本次Job所要用到的资源放到一个任务队列里面描述出来,然后NodeManager就去领任务,领到任务就在本地创建一个运行代码的容器。把这些资源封装好之后,ResourceManager会找到其中一台NodeManager在它的容器里面启动你的程序中的主进程,就是MapReduce程序,框架实现了一个主进程叫作MRAPPMaster,它会负责把你写的Map任务和Reduce任务启动起来,而且会负责对它们的监控以及数据的调度,最后等待整个Job运行完了,就会向ResourceManager注销自己,这时所有资源会回收。

shuffle机制

两个重要操作:
分组——k-v对分在那个Reduce组通过Partition实现
排序——key实现Comparable接口
每个map有一个环形内存缓冲区,用于存储任务的输出。默认大小100MB,一旦达到阀值0.8,一个后台线程把内容写到磁盘的指定目录下的新建的一个溢出写文件。写磁盘前,要分组和排序。等最后记录写完,合并全部溢出写文件为一个分区且排序的文件。Map执行起来很慢,就是因为要往磁盘写数据。

RPC框架

Hadoop之HDFS、MapReduce小结
Hadoop的远程过程调用都由RPC框架实现,Controller与Service不再耦合,通过代理对象就能实现真实对象的login方法,远程过程调用包括:
1、客户端与NameNode之间
2、NameNode与DataNode之间

相关文章: