为了账号安全,请及时绑定邮箱和手机立即绑定

大数据——Hadoop让你爱上学习

标签:
Hadoop

Hadoop

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

简介

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

主要模块

Hadoop Common:为其他Hadoop模块提供基础设施

Hadoop HDFS:一个高可靠的、高吞吐量的分布式文件存储系统

Hadoop MapReduce:一个分布式的离线并行计算框架

Hadoop YARN:一个新的MapReduce框架,负责MapReduce任务调度与资源管理

HDFS架构

webp

主从架构

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

webp

启动NameNode后,NameNode将fsimage载入内存,并按顺序执行edits文件中的命令记录

SecondaryNameNode定期通过http get方式从NameNode中获取edits与fsimage,此时NameNode生成新的空edits文件用来接收Client命令,SecondaryNameNode会将读取过来的fsimage加载到内存,按顺序执行edits文件命令,生成新的fsimage文件

SecondaryNameNode将新的fsimage文件发送给NameNode代替原来的fsimage

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

YARN架构

webp

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

主节点(全局的,只有一个,除了HA):

ResourceManager(RM):资源管理服务,接收Client提交的任务请求,并把任务分发到各个节点中运行,并且给NodeManager提供运行时资源

从节点(可以有多个):

NodeManager(NM):资源管理器,负责向ResourceManager申请运行时的资源并管理运行此节点的任务

运行机制

webp

Client提交应用程序(包括用户程序、ApplicationMaster程序、ApplicationMaster启动命令等)到ResourceManager

ResourceManager向NodeManager分配一个Container,并在Container中启动ApplicationMaster

ApplicationMaster向ResourceManager注册,这样用户可以直接通过ResourceManager査看应用程序的运行状态(然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束)

ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源

一旦ApplicationMaster成功申请到资源,便开始与对应的NodeManager通信,要求它启动任务

NodeManager为任务设置好运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务

各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,使ApplicationMaster能够随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。在应用程序运行过程中,用户可随时通过RPC向ApplicationMaster查询应用程序的当前运行状态

应用程序运行完成后,ApplicationMaster通过RPC协议向ResourceManager注销并关闭自己

MapReduce架构

Map

并行处理输入的数据

Reduce

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

Shuffle

分为MapTask与ReduceTask

MapTask将数据写到本地磁盘

ReduceTask从每一个MapTask上读取数据

特点

仅适合离线批处理

容错性高、扩展性高

磁盘开销大、效率低



作者:清风_d587
链接:https://www.jianshu.com/p/6f7c213ac7ab


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消