hadoop知识点汇总

来源:互联网 发布:html ccs js 编辑:程序博客网 时间:2024/06/16 19:24

一、Hadoop的主要模块

  • Hadoop Common: 基础模块
  • Hadoop Distributed File System (HDFS): 分布式文件系统
  • Hadoop YARN:hadoop的资源管理平台[Yet Another Resource Negotiator,另一种资源协调者]
  • Hadoop MapReduce: 一个分布式的并行计算框架.

    主要分两步:map阶段和reduce阶段map:运行在多台服务器上进行计算reduce:默认运行在一台 机器中,对map运行的结果进行合并分析

1、HDFS架构:存储数据

  • NameNode:存放元数据[数据的基本属性]
  • DataNode:存放具体文件数据
  • SecondaryNameNode:辅助NameNode的

    注意:采用备份机制保证数据的安全性,并且文件按块存放,默认每块的大小为128M 

2、YARN架构:资源管理平台[在hadoop1.x中没有的,这是hadoop2.x与hadoop1.x最大的区别]

  • ResourceManager:资源管理节点
  • NodeManager:数据处理节点
  • Container:资源对象封装
  • Application Master:当前job的管理者

    注意:每一个job都需要通过RM分配资源并且将资源对象封装成Container,然后RM选择一个NM启动App Mstr,App Mstr负责该job的运行过程,并将最后的执行结果汇报给RM

二、HDFS架构

这里写图片描述

  1. 主从架构【NameNode/DataNodes】
  2. NameNode存放元数据【文件名、文件的存放位置、文件的副本个数。。。】
  3. DataNode存放数据【以块的形式进行存储,默认每个块的大小为128M】,真正响应客户端读取数的
  4. 在一个HDFS文件系统中一般NameNode只有一个,DataNode可以存在多个,并且每一个服务器中只启动对应一个进程.
  5. DataNode会周期性的向NameNode发送心跳机制、NameNode管理文件和DataNode服务的对应关系(内存)
  6. NameNode整个集群的访问入口、会监听DataNode节点的存活状态(DataNode
    3秒钟发送一次,10分钟如果NameNode接受不到某一个DataNode节点心跳信息,那么NameNode就
  7. 认为该DataNode节点失效,NameNode就需要将该DataNode节点中数据进行备份)。一个数据块在DataNode以文件存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳

    /opt/modules/hadoop-2.5.0/data/dfs/data/current/BP-1950595699-192.168.17.100-1487039906884/current/finalizedhdfs的DataNode中数据在物理磁盘中的具体存储位置
  8. 副本存放策略

    1. 第一个副本存放在本机架某一个DataNode节点中2. 第二个副本放在同一个机架的另外一个DataNode节点中3. 第三副本放在另外一个机架的节点中4. 客户端读取数据的原则:就近原则5. 机架感知(RackAwareness)

三、NameNOde启动流程

这里写图片描述

  1. Name启动的时候首先将fsimage(镜像)载入内存,并执行(replay)编辑日志editlog的的各项操作;
  2. 一旦在内存中建立文件系统元数据映射,则创建一个新的fsimage文件(这个过程不需SecondaryNameNode)和一个空的editlog;
  3. 在安全模式下,各个datanode会向namenode发送块列表的最新情况;
  4. 此刻namenode运行在安全模式。即NameNode的文件系统对于客服端来说是只读的。(显示目录,显示文件内容等。写、删除、重命名都会失败);
  5. NameNode开始监听RPC和HTTP请求
    **解释RPC:**RPC(Remote Procedure Call Protocol)——远程过程通过协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议;
  6. 系统中数据块的位置并不是由namenode维护的,而是以块列表形式存储在datanode中;
  7. 在系统的正常操作期间,namenode会在内存中保留所有块信息的映射信息。

NameNode存放元数据

** fsimage  文件系统的镜像** edits    编辑日志    客户端操作文件的一些行为:put get cat rmr ...
  1. 加载fsimage,并重新执行edits文件,然后加载到内存中

    • 如果edits文件比较大的话,合并会非常耗费时间
    • 解决办法:SecondaryNameNode【时间、大小】
  2. 产生一个新的fsimage和edits
  3. 等待DataNode注册与发送Block Report
  4. SencondayNameNode

    1. 辅助NameNode,进行fsimage和edits文件合并2. 避免NameNode下一期重启fsimage和edits文件合并时间过长的问题3. SencodaryNameNode不是NameNode的热备

四、YARN架构剖析【hadoop2.x版本】

这里写图片描述

  1. ResourceManager

    1. 接受客户端的请求【./bin/yarn jar xxx.jar wordcount /input /output】
    2. 启动、监控[ApplicationMaster]
    3. 监控NodeManager
    4. 资源分配和任务调度
  2. NodeManager

    1. 单个节点上的资源管理
    2. 处理来自ResourceManager的命令
    3. 处理来自ApplicationMaster的命令
  3. ApplicationMaster[AM]

    1. 当前任务的管理者,任务运行结束后自动消失
    2. 数据切分
    3. 为当前程序申请资源,并分配给内部任务
    4. 任务的监控和容错
  4. Container

    • 对当前任务运行环境的一个抽象,封装了CPU、内存、网络带宽等等和任务相关的信息

这里写图片描述

五、MapReduce的运行流程

这里写图片描述
1. client向集群提交一个 job任务,ResourceManager接收到任务请求
2. ResourceManager接收到该任务请求后,选择一台NodeManager启动一个ApplicationMaster
3. ApplicationMaster向ResourceManager申请资源(运行当前任务需要哪些NodeManager、每一个NodeManager需要多少CPU、内存)
4. ResourceManager把对应的资源信息响应给 ApplicationMaster
5. ApplicationMaster收到后,调度指挥其他NodeManager运行任务
6. 相关NodeManager接收任务并运行(Map\Reduce)
7. NodeManager运行结束后会向ApplicationManater汇报
8. ApplicationMaster向ResourceManager报告,并将结果反馈给Client

hadoop读文件流程

这里写图片描述
1. 打开分布式文件
调用 分布式文件 DistributedFileSystem.open()方法
2. 从 NameNode 获得 DataNode 地址
DistributedFileSystem 使用 RPC 调用 NameNode,NameNode 返回存有该副本的 DataNode 地址,DistributedFileSystem 返 回一个输入流 FSDataInputStream对象,该对象封存了输入流 DFSInputStream
3. 连接到DataNode
调用 输入流 FSDataInputStream 的 read() 方法,从而 输入流 DFSInputStream 连接 DataNodes
4. 读取DataNode
反复调用 read()方法,从而将数据从 DataNode 传输到客户端
5. 读取另外的DataNode直到完成
到达块的末端时候,输入流 DFSInputStream 关闭与DataNode 连接, 寻找下一个 DataNode
6. 完成读取,关闭连接
即调用输入流 FSDataInputStream.close()

hadoop写文件流程

这里写图片描述
1. 发送创建文件请求:调用分布式文件系统DistributedFileSystem.create()方法
2. NameNode中创建文件记录:分布式文件系统DistributedFileSystem 发送 RPC 请求给namenode,namenode 检查权限后创建一条记录,返回输出流 FSDataOutputStream,封装了输出流 DFSOutputDtream
3. 客户端写入数据:输出流 DFSOutputDtream 将数据分成一个个的数据包,并写入内部队列。DataStreamer 根据 DataNode 列表来要求 namenode 分配适合的新块来存储数据备份。一组DataNode 构成管线(管线的 DataNode 之间使用 Socket 流式通信)
4. 使用管线传输数据:DataStreamer 将数据包流式传输到管线第一个DataNode,第一个DataNode 再传到第二个DataNode ,直到完成。
5. 确认队列:DataNode 收到数据后发送确认,管线的DataNode所有的确认组成一个确认队列。所有DataNode 都确认,管线数据包删除。
6. 关闭:客户端对数据量调用close()方法。将剩余所有数据写入DataNode管线,并联系NameNode且发送文件写入完成信息之前等待确认。
7. NameNode确认

故障处理:    若过程中发生故障,则先关闭管线, 把队列中所有数据包添加回去队列,确保数据包不漏。为另一个正常DataNode的当前数据块指定一个新的标识,并将该标识传送给NameNode, 一遍故障DataNode在恢复后删除上面的不完整数据块. 从管线中删除故障DataNode 并把余下的数据块写入余下正常的DataNode。NameNode发现复本两不足时,会在另一个节点创建一个新的复本
原创粉丝点击