赞
踩
Hadoop是Apache开源的分布式大数据存储与计算框架,由HDFS、MapReduce、Yarn三部分组成。广义上的Hadoop其实是指Hadoop生态圈,包括的组件就不只是HDFS、MapReduce、Yarn,还包括Spark、Flink、Zookeeper、Sqoop、Hive、HBase等工具,但是我们讨论的不是Hadoop生态圈。
由于要解决大数据量的存储和计算问题,因此数据不能再存储在关系型数据库,而是存储在分布式文件系统HDFS中;然后通过分布式离线计算框架MapReduce进行计算;而Yarn则是负责资源调度,也就是决定计算任务调度到哪些节点上执行。
HDFS是一个分布式文件系统,用于存储海量的文件数据。其优点是可以存储达PB级别的文件数据,百万级别以上的文件数量;而缺点则是不适合低延时数据访问,并且不支持文件修改,只支持追加。
HDFS一共由四部分组成:Client、NameNode、DataNode、SecondaryNameNode。
文件写入流程如下:
客户端在上传文件时会进行文件切割,把文件切割成一个一个的数据块block,然后分别上传每个数据块;上传每个数据块时,询问NameNode得知该数据块传输到哪些DataNode上;然后根据NameNode返回结果,上传数据块到DataNode。
文件读取流程如下:
NameNode记录了文件元数据信息,比如哪个block存储在哪些DataNode。Client读取文件时,请求NameNode获取元数据信息,就可以根据元数据信息请求对应的DataNode读取对应的每个block。
MapReduce是一个分布式离线计算框架,专门用于处理大数据场景中与实时性无关的一些离线计算任务。
MapReduce的数据输入一般是HDFS,然后经过InputFormat进行输入格式化,变成<K,V>格式;然后执行用户实现的Mapper类型的map方法,进行数据映射,映射处理的结果也是<K,V>格式;然后执行一个shuffle过程,对映射结果进行按key进行分组分区,把同一区域的所有KV发送到同一个Reducer,由一个节点进行;Reducer对同一个key分组下的所有value进行聚合操作;然后Reducer的输出结果再经过OutputFormat进行格式化处理后进行结果输出。
下面是MapReduce运行的整体流程:
Yarn是负责资源调度的,由Yarn管理每个Node节点然后进行任务分派,也就是把MapTask和ReduceTask分配给对应的Node。
yarn有ResourceManager和NodeManager两角色。ResourceManager负责监控NodeManager,接收客户端提交的job,然后进行资源分配调度;NodeManager负责管理单个节点上的资源,并执行ResourceManager的命令,启动并运行相应的MapTask和ReduceTask。
然而真正进行任务分配的并不是ResourceManager,ResourceManager每接收一个job,会选一个NodeManager来启动一个ApplicationMaster,由ApplicationMaster向ResourceManager申请资源并发送任务和启动脚本到对应的NodeManager。
而task都是在Container中运行,Container是节点资源的抽象(比如cpu、内存等),也就是限制了该task只能使用这么多资源,避免一个task占满整个node的所有资源。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。