学习笔记_Hadoop入门

Hadoop简介Hadoop是一个可靠的、可扩展的、开源的、高可用的分布式并行计算框架主要模块Hadoop Common:为其他Hadoop模块提供基础设施 Hadoop HDFS:一个高可靠的、高吞吐量的分布式文件存储系统 Hadoop MapReduce:一个分布式的离线并行计算框架 Hadoop YARN:一个新的MapReduce框架,负责MapReduce任...
摘要由CSDN通过智能技术生成

Hadoop

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

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

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

HDFS架构

这里写图片描述

主从架构

  • 主节点(只有一个,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辅助过程

这里写图片描述

  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架构

这里写图片描述

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

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

运行机制

这里写图片描述

  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

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

特点

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

MapReduce整体运行过程

这里写图片描述

  1. 客户端向ResourceManager提交任务
  2. ResourceManager向NodeManager分配一个ApplicationsManager,并找到一个Container生成一个MR App Mstr
  3. ApplicationsManager向ResourceManager申请资源
  4. 找到NodeManager,将Container中的MR App Mster启动
  5. Map和Reduce启动
  6. Map和Reduce一直向MR App Mster提交信息
  7. 任务运行结束时,ApplicationsManager向ResourceManager提交信息

Map与Reduce运行过程

  1. 任务数据文件将会被切片为< key,value >形式,每片交给一个Map运行,其中key为LongWritable类型,value为Text类型,key中储存偏移量,value储存文本内容
  2. Map根据任务需求,按编写的代码输出结果< key,value >(字段类型根据任务需求确定)
  3. Reduce根据一定规则(与任务有关)分区接收多个Map输出结果,并根据需要得出新的结果< key,value >并输出
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值