Hadoop

Hadoop是什么?

​ Hadoop是分布式的系统架构,是Apache基金会顶级金牌项目。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

Hadoop由什么组成?

​ Hadoop 2.0 = hdfs(存储) + mapreduce(计算) + yarn(资源管理)

分布式存储系统HDFS(Hadoop Distributed File System)

​ – 分布式存储系统

​ – 提供了 高可靠性、高扩展性和高吞吐率的数据存储服务

分布式计算框架 MapReduce

​ – 分布式计算框架(计算向数据移动)

​ – 具有 易于编程、高容错性和高扩展性等优点。

分布式资源管理框架YARN(Yet Another Resource Management)

​ – 负责集群资源的管理和调度

分布式文件存储系统HDFS ---- HDFS是Hadoop分布式文件存储系统

分布式存储系统HDFS的作用?

​ 主要解决大数据的存储问题。经过多年的发展,HDFS的应用已经非常成熟非常多,如百度网盘 360云盘 腾讯微云 阿里云。

​ 大数据好多技术框架都架构于这个文件存储系统之上的。

在这里插入图片描述

HDFS架构图

在这里插入图片描述

HDFS的功能模块及原理详解

1.HDFS 数据存储单元(block)

1.1 文件被切分成固定大小的数据块block

  • 默认的数据块大小为128MB(hadoop2.0版本),可自定义配置
  • 若文件大小不到128MB,则单独存成一个block

1.2 一个文件存储方式

  • 按大小被分成若干个block,存储到不同节点上
  • 默认情况下每个block都有3个副本

1.3 block大小和副本数通过client端上传文件时设置,文件上传后副本数可以变更,block size大小不可变

2.hdfs存储模型:字节

2.1 文件线性分割成块(block):偏移量 offset(byte)

2.2 block分散存储在集群节点中

2.3 单一文件block大小一致,文件与文件可以不一致

2.4 block可以设置副本数,副本分散在不同节点中

  • 副本数不要超过节点数量

2.5 文件上传可以设置block大小和副本数

2.6 已上传的文件block副本数可以调整,大小不可变

2.7 只支持一次写入多次读取,同一时刻只有一个写入者

2.8 可以append追加数据

3.NameNode(简称NN)

3.1 NameNode主要功能

  • 接收客户端的读/写服务
  • 收集DataNode汇报的block列表信息

3.2 基于内存存储:不会和磁盘发生交换

  • 只存在内存中
  • 只会持久化到磁盘中,除了开启时从磁盘读取,其他时刻不会去磁盘中读取信息

3.3 NameNode保存metadata元数据信息

  • 文件owership(归属)和permissions(权限)
  • 文件大小,存储时间
  • (block列表信息:block偏移量)
  • block保存在那个DateNode位置信息(由DataNode启动时上报,不保存)
4.NameNode持久化
  • NameNode的metadata信息在启动后会加载到内存

  • metadata存储到磁盘文件名为“fsimage”

  • block的位置信息不会保存到fsimage

  • edits记录对metadata的操作日志

    fsimage保存了最新的元数据检查点,类似快照

    editslog保存自最新检查点后的元信息变化,从最新检查点后,hadoop将对每个文件的操作都保存在edits中。客户端修改文件的时候,先写到editslog,成功后才会更新内存中的metadata信息。

matedata = fsimage + editslog

5.DataNode(DN)
  • 本地磁盘目录存储数据(block),文件形式
  • 同时存储block的元数据信息文件
  • 启动DN进程的时候会向NameNode汇报block信息
  • 通过向NN发送心跳保持与其联系(3秒一次),如果NN10分钟没有收到DN的心跳,则认为其已经lost,并copy其上的block到其他DN
6.SecondaryNameNode(SNN)

​ SNN的主要工作是帮助NN合并editslog文件,减少NN启动时间,它不是NN的备份(但是可以做备份)

​ SNN执行合并时间和机制

  • 根据配置文件设置的时间间隔fs.checkpoint.period默认3600秒
  • 根据配置文件设置editslog大小fs.checkpoint.size规定edits文件的最大值默认是64MB
7.SecondaryNameNode合并流程

在这里插入图片描述

​ 首先是NN中的Fsimage和edits文件通过网络拷贝,到达SNN服务器中,拷贝的同时,用户的实时在操作数据,那么NN中就会从新生成一个edits来记录用户的操作,而另一边的SNN将拷贝过来的edits和fsimage进行合并,合并之后就替换NN中的fsimage。之后NN根据fsimage进行操作(当然每隔一段时间就进行替换合并,循环)。当然新的edits与合并之后传输过来的fsimage会在下一次时间内又进行合并。

8.block的副本放置策略
  • 第一个副本:放置在上传文件的DN;如果是集群外提交,则随机挑选一个磁盘不太满,cpu不太忙的节点

  • 第二个副本:放置在与第一个副本不同机架的节点上

  • 第三个副本:与第二个副本相同机架的不同节点

    ···

集群内提交:
在这里插入图片描述

9.HDFS读写流程
9.1写入文件流程

在这里插入图片描述

HDFS写流程:

​ client:

  • 切分文件block
  • 按block线性和NN获取DN列表(副本数)
  • 验证DN列表后以更小的单位(packet)流式传输数据
    • 各节点,两两通信确定可用
  • block传输结束后:
    • DN向NN汇报block信息
    • DN向client汇报完成
    • client向NN汇报完成
  • 获取下一个block存放的DN列表
  • 最终client汇报完成
  • NN会在写流程更新文件状态
9.2读文件过程

在这里插入图片描述

HDFS读流程

​ client:

  • 和NN获取一部分block副本位置列表
  • 线性和DN获取block,最终合并为一个文件
  • 在block副本列表中按距离择优选择
10.安全模式
  • namenode启动的时候,首先将映像文件(fsimage)载入内存,并执行编辑日志(edits)中的各项操作
  • 一旦在内存中成功建立文件系统元数据的映射,则创建一个新的fsimage文件(这个操作不需要SecondaryNameNode)和一个空的编辑日志
  • 此刻namenode运行在安全模式。即namenode的文件系统对于客户端来说是只读的(显示目录,显示文件内容等。写、删除、重命名都会失败)
  • 在此阶段namenode手机各个datanode的报告,当数据块达到最小副本数以上时,会被认为是“安全”的, 在一定比例(可设置)的数据块被确定为“安全”后,再过若干时间,安全模式结束
  • 当检测到副本数不足的数据块时,该块会被复制直到达到最小副本数,系统中数据块的位置并不是由namenode维护的,而是以块列表形式存储在datanode中。

HDFS的优缺点

1.优点

​ 高容错性

​ • 数据自动保存多个副本

​ • 副本丢失后,自动恢复

​ 适合批处理

​ • 移动计算而非数据

​ • 数据位置暴露给计算框架(block偏移量)

​ 适合大数据处理

​ • GB 、TB 、甚至PB 级数据

​ • 百万规模以上的文件数量

​ • 10K+ 节点

​ 可构建在廉价机器上

​ • 通过多副本提高可靠性

​ • 提供了容错和恢复机制

2.缺点

​ 低延迟高数据吞吐访问问题

​ 比如说只支持秒级别反应,不支持毫秒级别

​ 延迟与高吞吐率问题(吞吐量大但有限制于其延迟)

​ 小文件存取

​ 占用namenode大量内存

​ 寻道时间超过读取时间

​ 并发写入,文件随机修改

​ 一个文件只有一个写入者

​ 仅支持append

Hadoop伪分布式搭建

http://pjyn8dgy4.bkt.clouddn.com/Hadoop%E4%BC%AA%E5%88%86%E5%B8%83%E5%BC%8F%E6%90%AD%E5%BB%BA.txt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值