大数据-hadoop入门学习

Hadoop

由于apache版本的Hadoop存在一些BUG,这里使用cdh5.3.6版本的Hadoop

简介

  • Hadoop是一个可靠的、可扩展的、开源的、高可用的分布式并行计算框架

主要模块

Hadoop Common:为其他Hadoop模块提供基础设施 
Hadoop HDFS:一个高可靠的、高吞吐量的分布式文件存储系统 
Hadoop MapReduce:一个分布式的离线并行计算框架 
Hadoop YARN:一个新的MapReduce框架,负责MapReduce任务调度与资源管理

HDFS架构

大数据-hadoop入门学习

主从架构

  • 主节点(只有一个,HA除外): 
    • NameNode(NN):存储元数据(数据块的校验和、时间戳、数据块存储的位置)
    • SecondaryNameNode(SNN):用来辅助NameNode同步元数据,减轻NameNode压力,不是NameNode的热备
  • 从节点(可以有多个): 
    • DataNode(DN):存储数据块,每一个数据块默认副本数是3份(可修改),如果有两个及以上机架,那么另外的机架必然会至少存在一份副本,防止其中一台机架挂掉(如断电),导致数据完全丢失

数据存取(就近原则)

  • 读取的时候,如果当前机架存在数据,不会到另外一个机架去读取

储存机制

  • 当一个文件上传到HDFS平台时,将会按照128Mb大小切割成数个数据块,并且每个数据块会进行复制,达到设置的副本数。接下来会根据NameNode的平衡机制(平衡各DataNode上储存的数据)分配到不同的DataNode中,并在NameNode中记录元数据

容错机制

  • 可以随意的增删服务器节点
  • 所有datanode会每隔3s向NameNode发送心跳信息(包括数据块的校验和,块报告),NameNode会接收DataNode发送的块的报告,如果规定时间内,NameNode没有接收到DataNode发送的心跳报告,就默认这台机器已经挂掉
  • 如果某台DataNode挂掉或部分数据丢失,这时NameNode收不到这台DataNode发送的心跳报告或者心跳报告信息与元数据不符,将会检查元数据来匹配DataNode中丢失的数据块,并且从另外机架复制数据块达到副本数

SecondaryNameNode辅助过程

大数据-hadoop入门学习

  1. 启动NameNode后,NameNode将fsimage载入内存,并按顺序执行edits文件中的命令记录
  2. SecondaryNameNode定期通过http get方式从NameNode中获取edits与fsimage,此时NameNode生成新的空edits文件用来接收Client命令,SecondaryNameNode会将读取过来的fsimage加载到内存,按顺序执行edits文件命令,生成新的fsimage文件
  3. SecondaryNameNode将新的fsimage文件发送给NameNode代替原来的fsimage

原本NameNode中的edits文件会记录所有命令,当文件过大时会导致启动NameNode时间过长,启动时NameNode处于安全模式,只读不可写。使用SecondaryNameNode将会减小edits大小,减轻NameNode启动时的压力

YARN架构

大数据-hadoop入门学习

资源调度管理框架(负责运行集群中的任务)

  • 主节点(全局的,只有一个,除了HA): 
    • ResourceManager(RM):资源管理服务,接收Client提交的任务请求,并把任务分发到各个节点中运行,并且给NodeManager提供运行时资源
  • 从节点(可以有多个): 
    • NodeManager(NM):资源管理器,负责向ResourceManager申请运行时的资源并管理运行此节点的任务

运行机制

大数据-hadoop入门学习

  1. Client提交应用程序(包括用户程序、ApplicationMaster程序、ApplicationMaster启动命令等)到ResourceManager
  2. ResourceManager向NodeManager分配一个Container,并在Container中启动ApplicationMaster
  3. ApplicationMaster向ResourceManager注册,这样用户可以直接通过ResourceManager査看应用程序的运行状态(然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束)
  4. ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源
  5. 一旦ApplicationMaster成功申请到资源,便开始与对应的NodeManager通信,要求它启动任务
  6. NodeManager为任务设置好运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务
  7. 各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,使ApplicationMaster能够随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。在应用程序运行过程中,用户可随时通过RPC向ApplicationMaster查询应用程序的当前运行状态
  8. 应用程序运行完成后,ApplicationMaster通过RPC协议向ResourceManager注销并关闭自己

MapReduce架构

Map

  • 并行处理输入的数据

Reduce    2317384986     yxxy1717

  • 处理Map输出的数据,将Map的结果进行汇总

Shuffle

  • 分为MapTask与ReduceTask
  • MapTask将数据写到本地磁盘
  • ReduceTask从每一个MapTask上读取数据

特点

  • 仅适合离线批处理
  • 容错性高、扩展性高
  • 磁盘开销大、效率低

MapReduce整体运行过程