hadoop由 hdfs和 y hadoop和hdfs关系_HDFS


我觉得什么是hadoop这个东西,百度给的回答已经是很详尽了,有趣的一点是hadoop的名字来源是作者Doug Cutting儿子的玩具大象的名字

hadoop的组成:

Hadoop = hdfs(存储) + mapreduce(计算) + yarn(资源管理) + common(工具包)

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

作用:分布式存储系统

提供了高可靠,高扩展性,高吞吐率的数据存储服务

分布式计算框架:MapReduce

作用:分布式计算框架(计算向数据移动)

具有易于编程,高容错性和高扩展性等优点

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

作用:负责集群资源的管理和调度

这里我们具体先来讲讲Hadoop之HDFS

1.什么是HDFS

HDFS是Hadoop分布式文件存储系统 --主要解决大数据的存储问题 用途广泛

2,.HDFS架构图


hadoop由 hdfs和 y hadoop和hdfs关系_数据块_02


HDFS数据的存储单元(block)

--文件被切分为固定大小的数据块block

默认数据块大小为128mb(hadoop2.x),可自定义配置

若文件大小不足128MB,还是按一个块来存储

-- 一个文件的存储方式

按文件大小被切分成若干个块,存储到不同的节点上

默认情况下每个block都会有三个副本,以便尽量保持文件的安全性和服务的效率性

--block大小和副本数通过Client端上传文件时设置,文件上传成功后,副本数可以变更,Block Size不可变更


hadoop由 hdfs和 y hadoop和hdfs关系_hadoop合并日志_03


HDFS存储摸型:字节

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

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

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

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

副本数不要超过节点数量(放不下)

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

--已上传的block副本数可以调整,大小不可调整

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

--可以append追加数据

2.NameNde(NN)

2.1:作用

接收客户端的读/写服务

收集DataNode汇报的block列表

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

只存在内存中

持久化

2.3NameNode保存metadata(元数据)信息:

文件ownership(归属)和permissions(权限)

文件大小,时间

(block列表:block偏移量),位置信息

block保存在哪个DataNode信息(由DataNode启动时上报,不保存在磁盘)

2.4:NN持久化

NN的metadata信息在启动后会加载到内存

metadata存储到磁盘文件名为fsimage

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

edits记录对metadata的操作日志

-fsimmage保存了最新的元数据检查点,类似快照功能,基本一个小时会保存一次

-edits保存自最新检查点后的元信息变化,自最新检查点后,Hadoop将对每个文件的操作都保存得到edits中,客户端(Clients)修改文件时,先将操作写到edits,成功后才更新内存中能够的metadata信息

Metadata = fsimage + edits

2.4DataNode(DN)

本地磁盘目录存储数据(block),文件形式

同时存储block的元数据信息文件

启动DN进程的时候会向NN汇报block信息

通过向NN发送心跳(HeartBeats)保持与其联系(三秒一次),如果NN10分钟没有收到DN的心跳则认为其已经lost,并copy其上的block到其他DN

2.5SecondaryNameDode(SSN)

--他的主要工作是帮助NN合并edits文件,减少NN启动时间,他不是NN的备份

--SNN执行合并时间和机制

根据配置文件设置的时间间隔fs.checkpoint.period默认3600秒

根据配置文件设置edits大小fs.checkpoint.size规定edits文件内的最大默认值为128MB

2.6 SecondaryNameDode SNN 合并流程


hadoop由 hdfs和 y hadoop和hdfs关系_HDFS_04


首先是NN中的fsimage和edits文件通过网络copy,到达SNN服务器,拷贝的同时,用户的实时在操作数据,那么NN就会新生成一个edits来记录用户操作,而另一边的SNN将copy过来的fsimage和edits进行合并,合并之后替换NN中原来的旧的fsimage.之后NN根据fsimage进行操作(每隔一段时间就进行合并替换,循环)

2.6 block的副本放置策略

  • 第一个副本:放置在上传文件的DN,如果是集群外提交则随机选一台磁盘不太满,cpu不太忙的节点
  • 第二个副本: 放置在于第一个副本不同机架的节点上
  • 第三个副本: 放置在于第二个副本相同机架的不同节点
  • 更多副本: 随机节点

2.7 HDFS读写流程

2.7.1 写文件流程


hadoop由 hdfs和 y hadoop和hdfs关系_数据块_05


-Client:

  • 将文件切分为block
  • 将block线性切割 NN获取DN列表(副本数)
  • 验证DN列表后以更小的单位(packet)流式传输数据 --各节点,两两通信确定可用
  • block传输结束后
  • DN向NN汇报block信息
  • DN向Client汇报完成
  • Client向NN汇报完成
  • 获取下一个block存放的DN列表
  • ...................循换类似于管道
  • 最终Client汇报完成
  • NN会在写流程更新文件状态

2.7.2 读文件过程


hadoop由 hdfs和 y hadoop和hdfs关系_hadoop合并日志_06


-Client

  • 和NN获取一部分block副本位置列表
  • 线性和DN获取block,最终合并为一个文件
  • 在block副本列表中按距离择优选取

2.8 HDFS文件权限

• 与Linux文件权限类似

– r: read; w:write; x:execute

– 权限x对于文件忽略,对于文件夹表示是否允许访问其内容

  • 如果Linux系统用户zhangsan使用hadoop命令创建一个文件,那么这个文件在HDFS中owner就是zhangsan

2.9 安全模式

  • namenode启动的时候,首先将映像文件(fsimage)载入内存,并执行编辑日志(edits)中的各项操作
  • 一旦在内存中能够成功建立文件系统元数据的隐射,则创建一个新的fsimage文件和一个空的edits,用来实时记录用户的操作日志
  • 此刻NN运行在安全模式,即NN的文件系统对于客服端来说是只读的
  • 在此阶段NN收集各个DN的报告,当数据块达到最小副本数以上时,会被认为是安全的的,在一定比例(可以自定义设置)的数据块被确定是安全的后,再过若干时间,安全模式结束
  • 当检测到副本数不足的数据块时,该块会被复制直到达到最小副本数,系统中数据块的位置并不是有NN维护的,而是以快列表形式存储在DN中

3.HDFS的优缺点

优点:

- 高容错性

  • 数据自动保存多个副本
  • 副本丢失后,自动恢复

- 适合批处理

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

- 适合大数据处理

  • TB PB 甚至EB级数据
  • 百万规模以上的文件数量
  • 10K+节点

- 可构建在廉价机器上

  • 通过多副本提高可靠性
  • 提供了容错和恢复机制

缺点:

- 低延迟搞数据吞吐访问问题

  • 比如支持秒级别反应.不支持毫秒级
  • 延迟与高吞吐率问题(吞吐量大但有限制于其延迟)

- 小文件存取

  • 占用NN大量内存
  • 寻道时间超过读取时间

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

  • 一个文件只能有一个写入者
  • 仅支持append

送大家一句话


hadoop由 hdfs和 y hadoop和hdfs关系_Hadoop_07